diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index b63fc166..c00e17f9 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -7,10 +7,6 @@ on: description: 'Version to release' required: true type: string - springBootVersion: - description: 'Spring Boot Version (Delivery Vehicle)' - required: true - type: string permissions: contents: read @@ -54,10 +50,9 @@ jobs: git config user.name 'github-actions[bot]' git config user.email 'github-actions[bot]@users.noreply.github.com' releaseVersion="${{ inputs.releaseVersion }}" - springBootVersion="${{ inputs.springBootVersion }}" releaseBranch="release-initiate/$releaseVersion" git checkout -b $releaseBranch - ./gradlew :updateToReleaseVersion -PreleaseVersion=$releaseVersion -PspringBootVersion=$springBootVersion + ./gradlew :updateToReleaseVersion -PreleaseVersion=$releaseVersion git commit -am "[Release $releaseVersion] Update version" git push origin $releaseBranch gh pr create --title "[Release $releaseVersion] Update version" --body "Merge to initiate release." diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionPlugin.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionPlugin.java index 65f37ca0..655e3b56 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionPlugin.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionPlugin.java @@ -26,7 +26,6 @@ public class UpdateProjectVersionPlugin implements Plugin { updateToReleaseVersionTask.setGroup("Release"); updateToReleaseVersionTask.setDescription("Updates the project version to the next release in gradle.properties"); updateToReleaseVersionTask.setReleaseVersion((String) project.findProperty("releaseVersion")); - updateToReleaseVersionTask.setSpringBootVersion((String) project.findProperty("springBootVersion")); }); project.getTasks().register("updateToSnapshotVersion", UpdateToSnapshotVersionTask.class, updateToSnapshotVersionTask -> { updateToSnapshotVersionTask.setGroup("Release"); diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java index 2208675e..b6f297c2 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java @@ -19,14 +19,24 @@ package org.springframework.pulsar.gradle.versions; import java.io.File; import java.util.Objects; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.gradle.api.DefaultTask; import org.gradle.api.Project; +import org.springframework.lang.Nullable; + public abstract class UpdateProjectVersionTask extends DefaultTask { + static final String VERSION_PROPERTY = "version"; + + static final String SPRING_BOOT_VERSION_PROPERTY = "springBootVersionForDocs"; + + static final Pattern VERSION_PATTERN = Pattern.compile("^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-M\\d+|-RC\\d+|-SNAPSHOT)?$"); + protected void updateVersionInGradleProperties(String newVersion) { - this.updatePropertyInGradleProperties("version", (p) -> p.getVersion().toString(), newVersion); + this.updatePropertyInGradleProperties(VERSION_PROPERTY, (p) -> p.getVersion().toString(), newVersion); } protected void updatePropertyInGradleProperties(String propertyName, String newPropertyValue) { @@ -52,4 +62,22 @@ public abstract class UpdateProjectVersionTask extends DefaultTask { return gradlePropertiesText; }); } + + protected VersionInfo parseVersion(String version) { + Matcher versionMatch = VERSION_PATTERN.matcher(version); + if (versionMatch.find()) { + String majorSegment = versionMatch.group(1); + String minorSegment = versionMatch.group(2); + String patchSegment = versionMatch.group(3); + String modifier = versionMatch.group(4); + return new VersionInfo(majorSegment, minorSegment, patchSegment, modifier); + } + else { + throw new IllegalStateException( + "Cannot extract version segment from %s as it does not conform to the expected format".formatted(version)); + } + } + + record VersionInfo(String major, String minor, String patch, @Nullable String modifier) { + } } diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java index 8475b33a..83a58906 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java @@ -16,21 +16,22 @@ package org.springframework.pulsar.gradle.versions; +import java.util.Objects; + import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; +import org.springframework.util.Assert; + public abstract class UpdateToReleaseVersionTask extends UpdateProjectVersionTask { @Input private String releaseVersion; - @Input - private String springBootVersion; - @TaskAction public void updateToReleaseVersion() { updateVersionInGradleProperties(this.releaseVersion); - updatePropertyInGradleProperties("springBootVersionForDocs", this.springBootVersion); + updatePropertyInGradleProperties(SPRING_BOOT_VERSION_PROPERTY, calculateReleaseBootVersion()); } public String getReleaseVersion() { @@ -41,11 +42,16 @@ public abstract class UpdateToReleaseVersionTask extends UpdateProjectVersionTas this.releaseVersion = releaseVersion; } - public String getSpringBootVersion() { - return springBootVersion; + private String calculateReleaseBootVersion() { + String currentBootVersion = Objects.toString(getProject().findProperty(SPRING_BOOT_VERSION_PROPERTY), null); + Assert.notNull(currentBootVersion, () -> "% property not found".formatted(SPRING_BOOT_VERSION_PROPERTY)); + VersionInfo bootVersionSegments = parseVersion(currentBootVersion); + String releaseBootVersion = "%s.%s.%s".formatted(bootVersionSegments.major(), bootVersionSegments.minor(), bootVersionSegments.patch()); + String releaseVersionModifier = parseVersion(this.releaseVersion).modifier(); + if (releaseVersionModifier != null) { + releaseBootVersion = releaseBootVersion + releaseVersionModifier; + } + return releaseBootVersion; } - public void setSpringBootVersion(String springBootVersion) { - this.springBootVersion = springBootVersion; - } } diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java index 2704fa72..21f69b59 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java @@ -16,40 +16,41 @@ package org.springframework.pulsar.gradle.versions; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.Objects; import org.gradle.api.tasks.TaskAction; -public abstract class UpdateToSnapshotVersionTask extends UpdateProjectVersionTask { +import org.springframework.util.Assert; - private static final String RELEASE_VERSION_PATTERN = "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-M\\d+|-RC\\d+)?$"; +public abstract class UpdateToSnapshotVersionTask extends UpdateProjectVersionTask { @TaskAction public void updateToSnapshotVersion() { String currentVersion = getProject().getVersion().toString(); updateVersionInGradleProperties(calculateNextSnapshotVersion(currentVersion)); + String currentBootVersion = Objects.toString(getProject().findProperty(SPRING_BOOT_VERSION_PROPERTY), null); + Assert.notNull(currentBootVersion, () -> "% property not found".formatted(SPRING_BOOT_VERSION_PROPERTY)); + updatePropertyInGradleProperties(SPRING_BOOT_VERSION_PROPERTY, calculateNextSnapshotVersion(currentBootVersion)); } - private String calculateNextSnapshotVersion(String currentVersion) { - Pattern releaseVersionPattern = Pattern.compile(RELEASE_VERSION_PATTERN); - Matcher releaseVersion = releaseVersionPattern.matcher(currentVersion); - - if (releaseVersion.find()) { - String majorSegment = releaseVersion.group(1); - String minorSegment = releaseVersion.group(2); - String patchSegment = releaseVersion.group(3); - String modifier = releaseVersion.group(4); - if (modifier == null) { - patchSegment = String.valueOf(Integer.parseInt(patchSegment) + 1); - } - System.out.println("modifier = " + modifier); - return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment); - } - else { - throw new IllegalStateException( - "Cannot calculate next snapshot version because the current project version does not conform to the expected format"); + private String calculateNextSnapshotVersion(String version) { + VersionInfo versionSegments = parseVersion(version); + String majorSegment = versionSegments.major(); + String minorSegment = versionSegments.minor(); + String patchSegment = versionSegments.patch(); + String modifier = versionSegments.modifier(); + System.out.println("modifier = " + modifier); + if (modifier == null) { + patchSegment = String.valueOf(Integer.parseInt(patchSegment) + 1); } + return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment); } + private String calculateCurrentSnapshotVersion(String version) { + VersionInfo versionSegments = parseVersion(version); + String majorSegment = versionSegments.major(); + String minorSegment = versionSegments.minor(); + String patchSegment = versionSegments.patch(); + return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment); + } } diff --git a/gradle.properties b/gradle.properties index ba1c8809..fb1accfb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=1.0.0-SNAPSHOT +version=1.0.1-SNAPSHOT org.gradle.caching=true org.gradle.parallel=true @@ -11,7 +11,7 @@ springFrameworkVersion=6.1.0-RC1 # only used by integration tests and samples (unpublished deps) springBootVersion=3.2.0-SNAPSHOT -# only used for docs -springBootVersionForDocs=3.2.0-SNAPSHOT +# only used for docs (links) +springBootVersionForDocs=3.2.1-SNAPSHOT springCloudStreamVersion=4.1.0-SNAPSHOT