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 2cbecd8..aa15d3e 100644 --- a/src/main/java/org/springframework/data/release/build/BuildOperations.java +++ b/src/main/java/org/springframework/data/release/build/BuildOperations.java @@ -31,6 +31,8 @@ import org.springframework.data.release.model.Phase; import org.springframework.data.release.model.Project; import org.springframework.data.release.model.Train; import org.springframework.data.release.model.TrainIteration; +import org.springframework.data.release.utils.ExecutionUtils; +import org.springframework.data.release.utils.Logger; import org.springframework.plugin.core.PluginRegistry; import org.springframework.stereotype.Component; import org.springframework.util.Assert; @@ -45,6 +47,7 @@ public class BuildOperations { private final @NonNull PluginRegistry buildSystems; private final @NonNull MavenProperties properties; + private final @NonNull Logger logger; /** * Updates all inter-project dependencies based on the given {@link TrainIteration} and release {@link Phase}. @@ -78,12 +81,18 @@ public class BuildOperations { /** * Triggers the distribution builds for all modules participating in the given {@link Train}. * - * @param iteration must not be {@literal null}. + * @param train must not be {@literal null}. */ public void distributeResources(Train train) { Assert.notNull(train, "Train must not be null!"); + logger.log(train, "Preparing distribution build…"); + ExecutionUtils.run(train, module -> { + doWithBuildSystem(module, BuildSystem::prepareDistributionBuild); + }); + + logger.log(train, "Running distribution build…"); doWithBuildSystem(train, BuildSystem::triggerDistributionBuild); } diff --git a/src/main/java/org/springframework/data/release/build/BuildSystem.java b/src/main/java/org/springframework/data/release/build/BuildSystem.java index 54ad6a5..ce7f29e 100644 --- a/src/main/java/org/springframework/data/release/build/BuildSystem.java +++ b/src/main/java/org/springframework/data/release/build/BuildSystem.java @@ -56,7 +56,15 @@ interface BuildSystem extends Plugin { DeploymentInformation deploy(ModuleIteration module); /** - * Runs the distribution build. + * Runs the distribution build preparation. + * + * @param module must not be {@literal null}. + * @return + */ + Module prepareDistributionBuild(Module module); + + /** + * Runs the distribution build. Requires {@link #prepareDistributionBuild(Module) a preparation run}. * * @param module must not be {@literal null}. * @return diff --git a/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java b/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java index 7e7e73e..f9a7022 100644 --- a/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java +++ b/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java @@ -95,6 +95,24 @@ class MavenBuildSystem implements BuildSystem { return module; } + /* + * (non-Javadoc) + * @see org.springframework.data.release.build.BuildSystem#prepareDistributionBuild(org.springframework.data.release.model.Module) + */ + @Override + public Module prepareDistributionBuild(Module module) { + + return doWithDistributionBuild(module, project -> { + + logger.log(project, "Preparing distribution build…"); + + mvn.execute(project, CommandLine.of(Goal.CLEAN, goal("generate-sources"), // + profile("distribute"), Argument.of("-B"))); + + logger.log(project, "Successfully prepared distribution build!"); + }); + } + /* * (non-Javadoc) * @see org.springframework.data.release.build.BuildSystem#triggerDistributionBuild(org.springframework.data.release.model.Module) @@ -102,6 +120,19 @@ class MavenBuildSystem implements BuildSystem { @Override public Module triggerDistributionBuild(Module module) { + return doWithDistributionBuild(module, project -> { + + logger.log(project, "Triggering distribution build…"); + + mvn.execute(project, CommandLine.of(Goal.DEPLOY, // + SKIP_TESTS, profile("distribute"), Argument.of("-B"))); + + logger.log(project, "Successfully finished distribution build!"); + }); + } + + private Module doWithDistributionBuild(Module module, Consumer consumer) { + Project project = module.getProject(); if (BUILD.equals(project)) { @@ -113,12 +144,7 @@ class MavenBuildSystem implements BuildSystem { return module; } - logger.log(project, "Triggering distribution build…"); - - mvn.execute(project, CommandLine.of(Goal.CLEAN, Goal.DEPLOY, // - SKIP_TESTS, profile("distribute"), Argument.of("-B"))); - - logger.log(project, "Successfully finished distribution build!"); + consumer.accept(project); return module; }