diff --git a/src/main/java/org/springframework/data/release/build/BuildCommands.java b/src/main/java/org/springframework/data/release/build/BuildCommands.java index 194a278..c5b0236 100644 --- a/src/main/java/org/springframework/data/release/build/BuildCommands.java +++ b/src/main/java/org/springframework/data/release/build/BuildCommands.java @@ -26,7 +26,6 @@ import java.util.Optional; import org.springframework.data.release.CliComponent; import org.springframework.data.release.TimedCommand; import org.springframework.data.release.cli.TrainIterationConverter; -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; @@ -49,7 +48,6 @@ class BuildCommands extends TimedCommand { @NonNull BuildOperations build; @NonNull Workspace workspace; - @NonNull GitOperations git; @NonNull Logger logger; /** @@ -83,7 +81,6 @@ class BuildCommands extends TimedCommand { project.ifPresent(it -> build.triggerBuild(iteration.getModule(it))); if (!project.isPresent()) { - git.prepare(iteration); iteration.forEach(build::triggerBuild); } } @@ -102,17 +99,14 @@ class BuildCommands extends TimedCommand { TrainIteration.class, null); Assert.notNull(trainIteration, "TrainIteration must not be null!"); - git.prepare(trainIteration); build.distributeResources(trainIteration); return; } Train train = ReleaseTrains.getTrainByName(trainOrIteration); - Assert.notNull(train, "Train must not be null!"); - git.checkout(train); build.distributeResources(train); } } diff --git a/src/main/java/org/springframework/data/release/build/BuildOperations.java b/src/main/java/org/springframework/data/release/build/BuildOperations.java index 64c447a..27cdfa9 100644 --- a/src/main/java/org/springframework/data/release/build/BuildOperations.java +++ b/src/main/java/org/springframework/data/release/build/BuildOperations.java @@ -25,7 +25,6 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import org.assertj.core.util.VisibleForTesting; - import org.springframework.data.release.deployment.DeploymentInformation; import org.springframework.data.release.deployment.StagingRepository; import org.springframework.data.release.model.Module; @@ -74,42 +73,77 @@ public class BuildOperations { } /** - * Triggers the distribution builds for all modules participating in the given {@link TrainIteration}. + * Prepares the versions of the given {@link TrainIteration} depending on the given {@link Phase}. * * @param iteration must not be {@literal null}. + * @param phase must not be {@literal null}. */ - public void distributeResources(TrainIteration iteration) { + public void prepareVersions(TrainIteration iteration, Phase phase) { Assert.notNull(iteration, "Train iteration must not be null!"); + Assert.notNull(phase, "Phase must not be null!"); - distributeResources(iteration.getTrain()); + BuildExecutor.Summary summary = executor.doWithBuildSystemOrdered(iteration, + (system, module) -> system.prepareVersion(module, phase)); + + logger.log(iteration, "Prepare versions: %s", summary); } /** - * Triggers the distribution builds for all modules participating in the given {@link Train}. + * Prepares the version of the given {@link ModuleIteration} depending on the given {@link Phase}. * - * @param train must not be {@literal null}. + * @param iteration must not be {@literal null}. + * @param phase must not be {@literal null}. + * @return */ - public void distributeResources(Train train) { + @VisibleForTesting + public ModuleIteration prepareVersion(ModuleIteration iteration, Phase phase) { - Assert.notNull(train, "Train must not be null!"); + Assert.notNull(iteration, "Module iteration must not be null!"); + Assert.notNull(phase, "Phase must not be null!"); - BuildExecutor.Summary summary = executor.doWithBuildSystemAnyOrder(train, - BuildSystem::triggerDistributionBuild); - - logger.log(train, "Distribution build: %s", summary); + return doWithBuildSystem(iteration, (system, module) -> system.prepareVersion(module, phase)); } + /** - * Triggers the distribution builds for the given module. + * Opens a repository to stage artifacts for this {@link ModuleIteration}. * * @param iteration must not be {@literal null}. */ - public void distributeResources(ModuleIteration iteration) { + public void open(ModuleIteration iteration) { - Assert.notNull(iteration, "ModuleIteration must not be null!"); + doWithBuildSystem(iteration, (buildSystem, moduleIteration) -> buildSystem.open()); + } - doWithBuildSystem(iteration, BuildSystem::triggerDistributionBuild); + /** + * Closes a repository to stage artifacts for this {@link ModuleIteration}. + * + * @param iteration must not be {@literal null}. + * @param stagingRepository must not be {@literal null}. + */ + public void close(ModuleIteration iteration, StagingRepository stagingRepository) { + + Assert.notNull(stagingRepository, "StagingRepository must not be null"); + Assert.isTrue(stagingRepository.isPresent(), "StagingRepository must be present"); + + doWithBuildSystem(iteration, (buildSystem, moduleIteration) -> { + buildSystem.close(stagingRepository); + return null; + }); + } + + /** + * Performs a local build for all modules in the given {@link TrainIteration}. + * + * @param iteration must not be {@literal null}. + * @return + */ + public void build(TrainIteration iteration) { + + executor.doWithBuildSystemOrdered(iteration, BuildSystem::triggerBuild); + + logger.log(iteration, "Build finished"); } /** @@ -149,36 +183,42 @@ public class BuildOperations { } /** - * Prepares the versions of the given {@link TrainIteration} depending on the given {@link Phase}. + * Triggers the distribution builds for all modules participating in the given {@link TrainIteration}. * * @param iteration must not be {@literal null}. - * @param phase must not be {@literal null}. */ - public void prepareVersions(TrainIteration iteration, Phase phase) { + public void distributeResources(TrainIteration iteration) { Assert.notNull(iteration, "Train iteration must not be null!"); - Assert.notNull(phase, "Phase must not be null!"); - BuildExecutor.Summary summary = executor.doWithBuildSystemOrdered(iteration, - (system, module) -> system.prepareVersion(module, phase)); - - logger.log(iteration, "Prepare versions: %s", summary); + distributeResources(iteration.getTrain()); } /** - * Prepares the version of the given {@link ModuleIteration} depending on the given {@link Phase}. + * Triggers the distribution builds for all modules participating in the given {@link Train}. + * + * @param train must not be {@literal null}. + */ + public void distributeResources(Train train) { + + Assert.notNull(train, "Train must not be null!"); + + BuildExecutor.Summary summary = executor.doWithBuildSystemAnyOrder(train, + BuildSystem::triggerDistributionBuild); + + logger.log(train, "Distribution build: %s", summary); + } + + /** + * Triggers the distribution builds for the given module. * * @param iteration must not be {@literal null}. - * @param phase must not be {@literal null}. - * @return */ - @VisibleForTesting - public ModuleIteration prepareVersion(ModuleIteration iteration, Phase phase) { + public void distributeResources(ModuleIteration iteration) { - Assert.notNull(iteration, "Module iteration must not be null!"); - Assert.notNull(phase, "Phase must not be null!"); + Assert.notNull(iteration, "ModuleIteration must not be null!"); - return doWithBuildSystem(iteration, (system, module) -> system.prepareVersion(module, phase)); + doWithBuildSystem(iteration, BuildSystem::triggerDistributionBuild); } /** @@ -190,33 +230,6 @@ public class BuildOperations { return properties.getLocalRepository().toPath(); } - /** - * Opens a repository to stage artifacts for this {@link ModuleIteration}. - * - * @param iteration must not be {@literal null}. - */ - public void open(ModuleIteration iteration) { - - doWithBuildSystem(iteration, (buildSystem, moduleIteration) -> buildSystem.open()); - } - - /** - * Closes a repository to stage artifacts for this {@link ModuleIteration}. - * - * @param iteration must not be {@literal null}. - * @param stagingRepository must not be {@literal null}. - */ - public void close(ModuleIteration iteration, StagingRepository stagingRepository) { - - Assert.notNull(stagingRepository, "StagingRepository must not be null"); - Assert.isTrue(stagingRepository.isPresent(), "StagingRepository must be present"); - - doWithBuildSystem(iteration, (buildSystem, moduleIteration) -> { - buildSystem.close(stagingRepository); - return null; - }); - } - /** * Builds the release for the given {@link ModuleIteration} and deploys it to the staging repository. * diff --git a/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java b/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java index 972b7d6..92b05be 100644 --- a/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java +++ b/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java @@ -67,6 +67,26 @@ class ReleaseCommands extends TimedCommand { orElse(null); } + /** + * Composite command to prepare a release. + * + * @param iteration + * @throws Exception + */ + @CliCommand(value = "prepare-it") + public void prepareIt(@CliOption(key = "", mandatory = true) TrainIteration iteration) throws Exception { + + tracker.trackerPrepare(iteration); + + prepare(iteration); + + build.build(iteration); + + conclude(iteration); + + gitHub.push(iteration); + } + /** * Composite command to ship a full release. * @@ -80,14 +100,14 @@ class ReleaseCommands extends TimedCommand { prepare(iteration); - buildRelease(iteration, null); - conclude(iteration); - gitHub.push(iteration); + buildRelease(iteration, null); distribute(iteration, null); + gitHub.push(iteration); + tracker.closeIteration(iteration); } @@ -133,6 +153,8 @@ class ReleaseCommands extends TimedCommand { public void buildRelease(@CliOption(key = "", mandatory = true) TrainIteration iteration, // @CliOption(key = "project", mandatory = false) String projectName) { + git.checkout(iteration); + if (!iteration.getIteration().isPublic()) { deployment.verifyAuthentication(); } diff --git a/src/main/java/org/springframework/data/release/git/GitOperations.java b/src/main/java/org/springframework/data/release/git/GitOperations.java index 63c74e2..e741faf 100644 --- a/src/main/java/org/springframework/data/release/git/GitOperations.java +++ b/src/main/java/org/springframework/data/release/git/GitOperations.java @@ -202,7 +202,7 @@ public class GitOperations { } /** - * Checks out all projects of the given {@link TrainIteration}. + * Checks out all projects of the given {@link TrainIteration} using their tags. * * @param iteration must not be {@literal null}. */