From 0b7abe64f072fd02704d669cbc4d297f2e0d673f Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 24 Mar 2023 14:32:07 +0100 Subject: [PATCH] Create and close release milestones when creating release versions/closing release versions. Closes #37 --- .../data/release/issues/IssueTrackerCommands.java | 11 +++++++++-- .../data/release/issues/github/GitHub.java | 4 +++- .../release/issues/github/GitHubMilestone.java | 3 ++- .../springframework/data/release/model/Module.java | 3 +++ .../data/release/model/ModuleIteration.java | 2 +- .../data/release/model/Project.java | 14 +++++++++----- .../data/release/model/Projects.java | 5 ++++- .../issues/github/GithubMilestoneUnitTests.java | 12 ++++++++++++ .../release/model/ModuleIterationUnitTests.java | 1 + 9 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java b/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java index d12751d..2e39a79 100644 --- a/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java +++ b/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java @@ -29,11 +29,13 @@ import java.util.stream.StreamSupport; import org.springframework.data.release.CliComponent; import org.springframework.data.release.TimedCommand; +import org.springframework.data.release.model.Module; import org.springframework.data.release.model.ModuleIteration; 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.ExecutionUtils; +import org.springframework.data.util.Streamable; import org.springframework.plugin.core.PluginRegistry; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -115,7 +117,7 @@ public class IssueTrackerCommands extends TimedCommand { @CliCommand(value = "tracker create releaseversions") public void jiraCreateReleaseVersions(@CliOption(key = "", mandatory = true) TrainIteration iteration) { - run(executor, iteration, module -> getTrackerFor(module).createReleaseVersion(module)); + run(executor, withReleaseProject(iteration), module -> getTrackerFor(module).createReleaseVersion(module)); } @CliCommand(value = "tracker create releasetickets") @@ -188,7 +190,7 @@ public class IssueTrackerCommands extends TimedCommand { @CliCommand("tracker close") public void closeIteration(@CliOption(key = "", mandatory = true) TrainIteration iteration) { - run(executor, iteration, module -> getTrackerFor(module).closeIteration(module)); + run(executor, withReleaseProject(iteration), module -> getTrackerFor(module).closeIteration(module)); } @CliCommand("tracker archive") @@ -196,6 +198,11 @@ public class IssueTrackerCommands extends TimedCommand { run(executor, iteration, module -> getTrackerFor(module).archiveReleaseVersion(module)); } + private static Streamable withReleaseProject(TrainIteration iteration) { + ModuleIteration bom = iteration.getModule(Projects.BOM); + return iteration.and(new ModuleIteration(new Module(Projects.RELEASE, bom.getVersion()), iteration)); + } + private IssueTracker getTrackerFor(ModuleIteration moduleIteration) { return tracker.getRequiredPluginFor(moduleIteration.getProject(), diff --git a/src/main/java/org/springframework/data/release/issues/github/GitHub.java b/src/main/java/org/springframework/data/release/issues/github/GitHub.java index 81c47bb..792df71 100644 --- a/src/main/java/org/springframework/data/release/issues/github/GitHub.java +++ b/src/main/java/org/springframework/data/release/issues/github/GitHub.java @@ -465,7 +465,9 @@ public class GitHub extends GitHubSupport implements IssueTracker { // - if no next version exists, create - closeReleaseTicket(module); + if (getTicketsFor(module).hasReleaseTicket(module)) { + closeReleaseTicket(module); + } } @Override diff --git a/src/main/java/org/springframework/data/release/issues/github/GitHubMilestone.java b/src/main/java/org/springframework/data/release/issues/github/GitHubMilestone.java index e8e01ad..b657af5 100644 --- a/src/main/java/org/springframework/data/release/issues/github/GitHubMilestone.java +++ b/src/main/java/org/springframework/data/release/issues/github/GitHubMilestone.java @@ -41,6 +41,7 @@ class GithubMilestone { */ @Override public String toString() { - return module.getMediumVersionString(); + return module.getProject().isUseShortVersionMilestones() ? module.getReleaseVersionString() + : module.getMediumVersionString(); } } diff --git a/src/main/java/org/springframework/data/release/model/Module.java b/src/main/java/org/springframework/data/release/model/Module.java index a382a47..64d02e2 100644 --- a/src/main/java/org/springframework/data/release/model/Module.java +++ b/src/main/java/org/springframework/data/release/model/Module.java @@ -37,6 +37,9 @@ public class Module implements VersionAware, ProjectAware, Comparable { this(project, version, null); } + public Module(Project project, Version version) { + this(project, version, null); + } Module(Project project, String version, String customFirstIteration) { diff --git a/src/main/java/org/springframework/data/release/model/ModuleIteration.java b/src/main/java/org/springframework/data/release/model/ModuleIteration.java index 5686aa8..f721ac8 100644 --- a/src/main/java/org/springframework/data/release/model/ModuleIteration.java +++ b/src/main/java/org/springframework/data/release/model/ModuleIteration.java @@ -116,7 +116,7 @@ public class ModuleIteration implements IterationVersion, ProjectAware { if (getTrain().usesCalver()) { builder.append(trainIteration.getName()); } else { - builder.append(trainIteration.toString()); + builder.append(trainIteration); } } else { builder.append(" ").append(iteration.getName()).append(" ("); diff --git a/src/main/java/org/springframework/data/release/model/Project.java b/src/main/java/org/springframework/data/release/model/Project.java index 06f3c30..a8b52c6 100644 --- a/src/main/java/org/springframework/data/release/model/Project.java +++ b/src/main/java/org/springframework/data/release/model/Project.java @@ -44,19 +44,22 @@ public class Project implements Comparable { private final @Getter Tracker tracker; private final @With ArtifactCoordinates additionalArtifacts; private final @With boolean skipTests; + private final @Getter @With boolean useShortVersionMilestones; // use a short version 2.3.0-RC1 instead of 2.3 RC1 if + // true Project(String key, String name, Tracker tracker) { this(key, name, null, tracker); } private Project(String key, String name, String fullName, Tracker tracker) { - this(new ProjectKey(key), name, fullName, Collections.emptySet(), tracker, ArtifactCoordinates.SPRING_DATA, true); + this(new ProjectKey(key), name, fullName, Collections.emptySet(), tracker, ArtifactCoordinates.SPRING_DATA, true, + false); } @java.beans.ConstructorProperties({ "key", "name", "fullName", "dependencies", "tracker", "additionalArtifacts", - "skipTests" }) + "skipTests", "plainVersionMilestones" }) private Project(ProjectKey key, String name, String fullName, Collection dependencies, Tracker tracker, - ArtifactCoordinates additionalArtifacts, boolean skipTests) { + ArtifactCoordinates additionalArtifacts, boolean skipTests, boolean useShortVersionMilestones) { this.key = key; this.name = name; @@ -65,6 +68,7 @@ public class Project implements Comparable { this.tracker = tracker; this.additionalArtifacts = additionalArtifacts; this.skipTests = skipTests; + this.useShortVersionMilestones = useShortVersionMilestones; } public boolean uses(Tracker tracker) { @@ -105,8 +109,8 @@ public class Project implements Comparable { } public Project withDependencies(Project... project) { - - return new Project(key, name, fullName, Arrays.asList(project), tracker, additionalArtifacts, skipTests); + return new Project(key, name, fullName, Arrays.asList(project), tracker, additionalArtifacts, skipTests, + useShortVersionMilestones); } /** diff --git a/src/main/java/org/springframework/data/release/model/Projects.java b/src/main/java/org/springframework/data/release/model/Projects.java index 85acecf..bb4f070 100644 --- a/src/main/java/org/springframework/data/release/model/Projects.java +++ b/src/main/java/org/springframework/data/release/model/Projects.java @@ -44,9 +44,12 @@ public class Projects { public static final List PROJECTS; public static final Project SMOKE_TESTS = new Project("SMOKE_TESTS", "Smoke Tests", Tracker.GITHUB); + public static final Project RELEASE = new Project("RELEASE", "Release", Tracker.GITHUB) + .withUseShortVersionMilestones(true); + static { - BOM = new Project("DATABOM", "BOM", Tracker.GITHUB); + BOM = new Project("DATABOM", "BOM", Tracker.GITHUB).withUseShortVersionMilestones(true); BUILD = new Project("DATABUILD", "Build", Tracker.GITHUB) // .withAdditionalArtifacts(ArtifactCoordinates.forGroupId("org.springframework.data.build") diff --git a/src/test/java/org/springframework/data/release/issues/github/GithubMilestoneUnitTests.java b/src/test/java/org/springframework/data/release/issues/github/GithubMilestoneUnitTests.java index dc914a5..cf80945 100644 --- a/src/test/java/org/springframework/data/release/issues/github/GithubMilestoneUnitTests.java +++ b/src/test/java/org/springframework/data/release/issues/github/GithubMilestoneUnitTests.java @@ -23,6 +23,7 @@ import org.springframework.data.release.model.Iteration; import org.springframework.data.release.model.ModuleIteration; import org.springframework.data.release.model.Projects; import org.springframework.data.release.model.ReleaseTrains; +import org.springframework.data.release.model.TrainIteration; /** * Unit tests for {@link GithubMilestone}. @@ -83,6 +84,17 @@ class GithubMilestoneUnitTests { assertThat(version.getDescription()).isEqualTo("Dijkstra M2"); } + @Test + void rendersShortBomAndReleaseMilestoneVersions() { + + TrainIteration iteration = new TrainIteration(ReleaseTrains.ULLMAN, Iteration.SR1); + ModuleIteration module = iteration.getModule(Projects.BOM); + + GithubMilestone milestone = new GithubMilestone(module); + assertThat(milestone.toMilestone().getTitle()).isEqualTo("2023.0.1"); + assertThat(milestone.toMilestone().getDescription()).isEqualTo("2023.0.1"); + } + private void assertIterationVersion(Iteration iteration, String expected) { ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.COMMONS, iteration); diff --git a/src/test/java/org/springframework/data/release/model/ModuleIterationUnitTests.java b/src/test/java/org/springframework/data/release/model/ModuleIterationUnitTests.java index bf2a554..189cab0 100644 --- a/src/test/java/org/springframework/data/release/model/ModuleIterationUnitTests.java +++ b/src/test/java/org/springframework/data/release/model/ModuleIterationUnitTests.java @@ -45,4 +45,5 @@ class ModuleIterationUnitTests { assertThat(module.getMediumVersionString()).isEqualTo("1.6.1 (Dijkstra SR1)"); assertThat(module.getFullVersionString()).isEqualTo("1.6.1.RELEASE (Dijkstra SR1)"); } + }