#33 - Projects can now have an explicit full name.

Project has a withFullName(…) to be able to define it manually. Projects makes use of that to explicitly define the name for Apache backed ones.

Introduced a skipTests property to make explicit, which projects should not have their test run during a build.

Introduced overloads to allow the optional lookup of a Project by name.
This commit is contained in:
Oliver Gierke
2016-11-24 15:28:53 +01:00
parent dbf7b26261
commit 15935fb9bb
4 changed files with 40 additions and 10 deletions

View File

@@ -93,7 +93,7 @@ class ReleaseCommands extends TimedCommand {
deployment.verifyAuthentication(); deployment.verifyAuthentication();
Project project = Projects.byName(projectName); Project project = Projects.requiredByName(projectName);
ModuleIteration module = iteration.getModule(project); ModuleIteration module = iteration.getModule(project);
DeploymentInformation information = build.performRelease(module); DeploymentInformation information = build.performRelease(module);

View File

@@ -15,9 +15,12 @@
*/ */
package org.springframework.data.release.model; package org.springframework.data.release.model;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Wither;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -29,30 +32,40 @@ import org.springframework.util.Assert;
*/ */
@ToString @ToString
@EqualsAndHashCode @EqualsAndHashCode
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class Project implements Comparable<Project> { public class Project implements Comparable<Project> {
private final @Getter ProjectKey key; private final @Getter ProjectKey key;
private final @Getter String name; private final @Getter String name;
private final @Wither String fullName;
private final @Getter List<Project> dependencies; private final @Getter List<Project> dependencies;
private final @Getter Tracker tracker; private final @Getter Tracker tracker;
private final @Getter ArtifactCoordinates additionalArtifacts; private final @Getter ArtifactCoordinates additionalArtifacts;
private final @Wither boolean skipTests;
Project(String key, String name, List<Project> dependencies) { Project(String key, String name, List<Project> dependencies) {
this(key, name, Tracker.JIRA, dependencies, ArtifactCoordinates.NONE); this(key, name, null, Tracker.JIRA, dependencies, ArtifactCoordinates.NONE);
} }
Project(String key, String name, List<Project> dependencies, ArtifactCoordinates additionalArtifacts) { Project(String key, String name, List<Project> dependencies, ArtifactCoordinates additionalArtifacts) {
this(key, name, Tracker.JIRA, dependencies, additionalArtifacts); this(key, name, null, Tracker.JIRA, dependencies, additionalArtifacts);
} }
Project(String key, String name, Tracker tracker, List<Project> dependencies, Project(String key, String name, Tracker tracker, List<Project> dependencies,
ArtifactCoordinates additionalArtifacts) { ArtifactCoordinates additionalArtifacts) {
this(key, name, null, tracker, dependencies, additionalArtifacts);
}
private Project(String key, String name, String fullName, Tracker tracker, List<Project> dependencies,
ArtifactCoordinates additionalArtifacts) {
this.key = new ProjectKey(key); this.key = new ProjectKey(key);
this.name = name; this.name = name;
this.fullName = fullName;
this.dependencies = dependencies; this.dependencies = dependencies;
this.tracker = tracker; this.tracker = tracker;
this.additionalArtifacts = additionalArtifacts; this.additionalArtifacts = additionalArtifacts;
this.skipTests = false;
} }
public boolean uses(Tracker tracker) { public boolean uses(Tracker tracker) {
@@ -60,7 +73,7 @@ public class Project implements Comparable<Project> {
} }
public String getFullName() { public String getFullName() {
return "Spring Data ".concat(name); return fullName != null ? fullName : "Spring Data ".concat(name);
} }
public String getFolderName() { public String getFolderName() {
@@ -88,6 +101,10 @@ public class Project implements Comparable<Project> {
return dependencies.stream().anyMatch(dependency -> dependency.equals(project) || dependency.dependsOn(project)); return dependencies.stream().anyMatch(dependency -> dependency.equals(project) || dependency.dependsOn(project));
} }
public boolean skipTests() {
return this.skipTests;
}
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object) * @see java.lang.Comparable#compareTo(java.lang.Object)

View File

@@ -20,6 +20,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Optional;
import org.jgrapht.graph.DefaultDirectedGraph; import org.jgrapht.graph.DefaultDirectedGraph;
import org.jgrapht.graph.DefaultEdge; import org.jgrapht.graph.DefaultEdge;
@@ -45,10 +46,10 @@ public class Projects {
MONGO_DB = new Project("DATAMONGO", "MongoDB", Arrays.asList(COMMONS), MONGO_DB = new Project("DATAMONGO", "MongoDB", Arrays.asList(COMMONS),
ArtifactCoordinates.NONE.artifacts("spring-data-mongodb-cross-store", "spring-data-mongodb-log4j")); ArtifactCoordinates.NONE.artifacts("spring-data-mongodb-cross-store", "spring-data-mongodb-log4j"));
NEO4J = new Project("DATAGRAPH", "Neo4j", Arrays.asList(COMMONS)); NEO4J = new Project("DATAGRAPH", "Neo4j", Arrays.asList(COMMONS));
SOLR = new Project("DATASOLR", "Solr", Arrays.asList(COMMONS)); SOLR = new Project("DATASOLR", "Solr", Arrays.asList(COMMONS)).withFullName("Spring Data for Apache Solr");
COUCHBASE = new Project("DATACOUCH", "Couchbase", Arrays.asList(COMMONS)); COUCHBASE = new Project("DATACOUCH", "Couchbase", Arrays.asList(COMMONS));
CASSANDRA = new Project("DATACASS", "Cassandra", Arrays.asList(COMMONS), CASSANDRA = new Project("DATACASS", "Cassandra", Arrays.asList(COMMONS),
ArtifactCoordinates.NONE.artifacts("spring-cql")); ArtifactCoordinates.NONE.artifacts("spring-cql")).withFullName("Spring Data for Apache Cassandra");
ELASTICSEARCH = new Project("DATAES", "Elasticsearch", Arrays.asList(COMMONS)); ELASTICSEARCH = new Project("DATAES", "Elasticsearch", Arrays.asList(COMMONS));
KEY_VALUE = new Project("DATAKV", "KeyValue", Arrays.asList(COMMONS)); KEY_VALUE = new Project("DATAKV", "KeyValue", Arrays.asList(COMMONS));
REDIS = new Project("DATAREDIS", "Redis", Arrays.asList(COMMONS, KEY_VALUE)); REDIS = new Project("DATAREDIS", "Redis", Arrays.asList(COMMONS, KEY_VALUE));
@@ -87,11 +88,16 @@ public class Projects {
PROJECTS = Collections.unmodifiableList(intermediate); PROJECTS = Collections.unmodifiableList(intermediate);
} }
public static Project byName(String name) { public static Optional<Project> byName(String name) {
return PROJECTS.stream().// return PROJECTS.stream().//
filter(project -> project.getName().equalsIgnoreCase(name) || project.getKey().toString().equals(name)).// filter(project -> project.getName().equalsIgnoreCase(name) || project.getKey().toString().equals(name)).//
findFirst() findFirst();
.orElseThrow(() -> new IllegalArgumentException(String.format("No project named %s available!", name))); }
public static Project requiredByName(String name) {
return byName(name).//
orElseThrow(() -> new IllegalArgumentException(String.format("No project named %s available!", name)));
} }
} }

View File

@@ -48,6 +48,13 @@ public class ProjectUnitTests {
*/ */
@Test @Test
public void findsProjectByKey() { public void findsProjectByKey() {
assertThat(Projects.byName("DATACMNS"), is(Projects.COMMONS)); assertThat(Projects.requiredByName("DATACMNS"), is(Projects.COMMONS));
}
@Test
public void returnsCustomFullNameIfSet() {
assertThat(Projects.BUILD.getFullName(), is("Spring Data Build"));
assertThat(Projects.CASSANDRA.getFullName(), is("Spring Data for Apache Cassandra"));
} }
} }