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 c09ef30..dbc4cc7 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 @@ -99,6 +99,18 @@ public class BuildOperations { logger.log(train, "Distribution build: %s", summary); } + /** + * Triggers the distribution builds for the given module. + * + * @param iteration must not be {@literal null}. + */ + public void distributeResources(ModuleIteration iteration) { + + Assert.notNull(iteration, "ModuleIteration must not be null!"); + + doWithBuildSystem(iteration, BuildSystem::triggerDistributionBuild); + } + /** * Performs the release build for all modules in the given {@link TrainIteration}. * diff --git a/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java b/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java index 96b7cc1..dc05b6e 100644 --- a/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java +++ b/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java @@ -28,6 +28,8 @@ import org.springframework.data.release.build.BuildOperations; import org.springframework.data.release.deployment.DeploymentInformation; import org.springframework.data.release.deployment.DeploymentOperations; import org.springframework.data.release.git.GitOperations; +import org.springframework.data.release.issues.IssueTrackerCommands; +import org.springframework.data.release.issues.github.GitHubCommands; import org.springframework.data.release.misc.ReleaseOperations; import org.springframework.data.release.model.ArtifactVersion; import org.springframework.data.release.model.ModuleIteration; @@ -53,6 +55,8 @@ class ReleaseCommands extends TimedCommand { @NonNull ReleaseOperations misc; @NonNull DeploymentOperations deployment; @NonNull BuildOperations build; + @NonNull IssueTrackerCommands tracker; + @NonNull GitHubCommands gitHub; @CliCommand("release predict") public String predictTrainAndIteration() { @@ -62,6 +66,30 @@ class ReleaseCommands extends TimedCommand { orElse(null); } + /** + * Composite command to ship a full release. + * + * @param iteration + * @throws Exception + */ + @CliCommand(value = "ship-it") + public void shipIt(@CliOption(key = "", mandatory = true) TrainIteration iteration) throws Exception { + + tracker.trackerPrepare(iteration); + + prepare(iteration); + + buildRelease(iteration, null); + + conclude(iteration); + + gitHub.push(iteration); + + distribute(iteration, null); + + tracker.closeIteration(iteration); + } + /** * Prepares the release of the given iteration of the given train. * @@ -152,10 +180,19 @@ class ReleaseCommands extends TimedCommand { * @throws Exception */ @CliCommand("release distribute") - public void distribute(@CliOption(key = "", mandatory = true) TrainIteration iteration) { + public void distribute(@CliOption(key = "", mandatory = true) TrainIteration iteration, + @CliOption(key = "project", mandatory = false) String projectName) { git.checkout(iteration); - build.distributeResources(iteration); + + if (projectName != null) { + Project project = Projects.requiredByName(projectName); + ModuleIteration module = iteration.getModule(project); + + build.distributeResources(module); + } else { + build.distributeResources(iteration); + } } private static String getTrainNameForCommonsVersion(ArtifactVersion version) { diff --git a/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java b/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java index 2b3e8d9..d12751d 100644 --- a/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java +++ b/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java @@ -46,7 +46,7 @@ import org.springframework.util.StringUtils; @CliComponent @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) -class IssueTrackerCommands extends TimedCommand { +public class IssueTrackerCommands extends TimedCommand { @NonNull PluginRegistry tracker; @NonNull Executor executor; diff --git a/release-tools/src/main/java/org/springframework/data/release/issues/github/GitHubCommands.java b/release-tools/src/main/java/org/springframework/data/release/issues/github/GitHubCommands.java index be24477..41367e9 100644 --- a/release-tools/src/main/java/org/springframework/data/release/issues/github/GitHubCommands.java +++ b/release-tools/src/main/java/org/springframework/data/release/issues/github/GitHubCommands.java @@ -45,7 +45,7 @@ import org.springframework.shell.core.annotation.CliOption; @CliComponent @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) -class GitHubCommands extends TimedCommand { +public class GitHubCommands extends TimedCommand { @NonNull PluginRegistry tracker; @NonNull GitHub gitHub;