From 37ea4bbea77c4105e9010c78b8dfb1978130b6f2 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 24 Nov 2016 15:45:52 +0100 Subject: [PATCH] #35 - Added command to trigger builds. --- .../data/release/build/BuildCommands.java | 29 +++++++++++++++++++ .../data/release/build/BuildOperations.java | 4 +++ .../data/release/build/BuildSystem.java | 2 ++ .../data/release/build/MavenBuildSystem.java | 22 ++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/release-tools/src/main/java/org/springframework/data/release/build/BuildCommands.java b/release-tools/src/main/java/org/springframework/data/release/build/BuildCommands.java index 0a14817..12d0241 100644 --- a/release-tools/src/main/java/org/springframework/data/release/build/BuildCommands.java +++ b/release-tools/src/main/java/org/springframework/data/release/build/BuildCommands.java @@ -21,12 +21,19 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; import java.io.IOException; +import java.util.Optional; import org.springframework.data.release.CliComponent; import org.springframework.data.release.TimedCommand; +import org.springframework.data.release.git.GitOperations; import org.springframework.data.release.io.Workspace; +import org.springframework.data.release.model.Project; +import org.springframework.data.release.model.Projects; +import org.springframework.data.release.model.TrainIteration; import org.springframework.data.release.utils.Logger; import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; +import org.springframework.util.Assert; /** * @author Oliver Gierke @@ -38,6 +45,7 @@ class BuildCommands extends TimedCommand { @NonNull BuildOperations build; @NonNull Workspace workspace; + @NonNull GitOperations git; @NonNull Logger logger; /** @@ -54,4 +62,25 @@ class BuildCommands extends TimedCommand { workspace.purge(build.getLocalRepository(), path -> build.getLocalRepository().relativize(path).startsWith("org/springframework/data")); } + + /** + * Triggers a build for all modules of the given {@link TrainIteration}. + * + * @param iteration must not be {@literal null}. + * @param projectKey can be {@literal null} or empty. + */ + @CliCommand("build") + public void build(@CliOption(key = "", mandatory = true) TrainIteration iteration, // + @CliOption(key = "module") String projectKey) { + + Assert.notNull(iteration, "Train iteration must not be null!"); + Optional project = Projects.byName(projectKey); + + project.ifPresent(it -> build.triggerBuild(iteration.getModule(it))); + + if (!project.isPresent()) { + git.prepare(iteration); + iteration.forEach(module -> build.triggerBuild(module)); + } + } } diff --git a/release-tools/src/main/java/org/springframework/data/release/build/BuildOperations.java b/release-tools/src/main/java/org/springframework/data/release/build/BuildOperations.java index a3e2450..17b53d3 100644 --- a/release-tools/src/main/java/org/springframework/data/release/build/BuildOperations.java +++ b/release-tools/src/main/java/org/springframework/data/release/build/BuildOperations.java @@ -135,6 +135,10 @@ public class BuildOperations { return doWithBuildSystem(module, BuildSystem::deploy); } + public ModuleIteration triggerBuild(ModuleIteration module) { + return doWithBuildSystem(module, BuildSystem::triggerBuild); + } + /** * Selects the build system for each {@link ModuleIteration} contained in the given {@link TrainIteration} and * executes the given function for it. diff --git a/release-tools/src/main/java/org/springframework/data/release/build/BuildSystem.java b/release-tools/src/main/java/org/springframework/data/release/build/BuildSystem.java index 649143b..b2590dc 100644 --- a/release-tools/src/main/java/org/springframework/data/release/build/BuildSystem.java +++ b/release-tools/src/main/java/org/springframework/data/release/build/BuildSystem.java @@ -60,4 +60,6 @@ interface BuildSystem extends Plugin { * @return */ ModuleIteration triggerDistributionBuild(ModuleIteration module); + + ModuleIteration triggerBuild(ModuleIteration module); } diff --git a/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java b/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java index 2eafc26..7c7d4ed 100644 --- a/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java +++ b/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java @@ -221,6 +221,8 @@ class MavenBuildSystem implements BuildSystem { "-DnewVersion=".concat(information.getReleaseTrainVersion()), // "-DgroupId=org.springframework.data", // "-DartifactId=spring-data-releasetrain"); + + mvn.execute(project, "install"); } return module; @@ -243,6 +245,26 @@ class MavenBuildSystem implements BuildSystem { return information; } + /* + * (non-Javadoc) + * @see org.springframework.data.release.build.BuildSystem#triggerBuild(org.springframework.data.release.model.ModuleIteration) + */ + @Override + public ModuleIteration triggerBuild(ModuleIteration module) { + + List arguments = new ArrayList<>(); + arguments.add("clean"); + arguments.add("install"); + + if (module.getProject().skipTests()) { + arguments.add("-DskipTests"); + } + + mvn.execute(module.getProject(), arguments); + + return module; + } + /** * Triggers Maven commands to deploy module artifacts to Spring Artifactory. *