[CI] Update snapshot boot version property at end of release process

This commit is contained in:
Chris Bono
2023-10-14 20:45:45 -05:00
parent 5da13d29d2
commit 907cd74a1c
6 changed files with 71 additions and 42 deletions

View File

@@ -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."

View File

@@ -26,7 +26,6 @@ public class UpdateProjectVersionPlugin implements Plugin<Project> {
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");

View File

@@ -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) {
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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