Skip to content

Commit 907cd74

Browse files
committed
[CI] Update snapshot boot version property at end of release process
1 parent 5da13d2 commit 907cd74

File tree

6 files changed

+71
-42
lines changed

6 files changed

+71
-42
lines changed

.github/workflows/prepare-release.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ on:
77
description: 'Version to release'
88
required: true
99
type: string
10-
springBootVersion:
11-
description: 'Spring Boot Version (Delivery Vehicle)'
12-
required: true
13-
type: string
1410
permissions:
1511
contents: read
1612

@@ -54,10 +50,9 @@ jobs:
5450
git config user.name 'github-actions[bot]'
5551
git config user.email 'github-actions[bot]@users.noreply.github.com'
5652
releaseVersion="${{ inputs.releaseVersion }}"
57-
springBootVersion="${{ inputs.springBootVersion }}"
5853
releaseBranch="release-initiate/$releaseVersion"
5954
git checkout -b $releaseBranch
60-
./gradlew :updateToReleaseVersion -PreleaseVersion=$releaseVersion -PspringBootVersion=$springBootVersion
55+
./gradlew :updateToReleaseVersion -PreleaseVersion=$releaseVersion
6156
git commit -am "[Release $releaseVersion] Update version"
6257
git push origin $releaseBranch
6358
gh pr create --title "[Release $releaseVersion] Update version" --body "Merge to initiate release."

buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionPlugin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public void apply(Project project) {
2626
updateToReleaseVersionTask.setGroup("Release");
2727
updateToReleaseVersionTask.setDescription("Updates the project version to the next release in gradle.properties");
2828
updateToReleaseVersionTask.setReleaseVersion((String) project.findProperty("releaseVersion"));
29-
updateToReleaseVersionTask.setSpringBootVersion((String) project.findProperty("springBootVersion"));
3029
});
3130
project.getTasks().register("updateToSnapshotVersion", UpdateToSnapshotVersionTask.class, updateToSnapshotVersionTask -> {
3231
updateToSnapshotVersionTask.setGroup("Release");

buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,24 @@
1919
import java.io.File;
2020
import java.util.Objects;
2121
import java.util.function.Function;
22+
import java.util.regex.Matcher;
23+
import java.util.regex.Pattern;
2224

2325
import org.gradle.api.DefaultTask;
2426
import org.gradle.api.Project;
2527

28+
import org.springframework.lang.Nullable;
29+
2630
public abstract class UpdateProjectVersionTask extends DefaultTask {
2731

32+
static final String VERSION_PROPERTY = "version";
33+
34+
static final String SPRING_BOOT_VERSION_PROPERTY = "springBootVersionForDocs";
35+
36+
static final Pattern VERSION_PATTERN = Pattern.compile("^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-M\\d+|-RC\\d+|-SNAPSHOT)?$");
37+
2838
protected void updateVersionInGradleProperties(String newVersion) {
29-
this.updatePropertyInGradleProperties("version", (p) -> p.getVersion().toString(), newVersion);
39+
this.updatePropertyInGradleProperties(VERSION_PROPERTY, (p) -> p.getVersion().toString(), newVersion);
3040
}
3141

3242
protected void updatePropertyInGradleProperties(String propertyName, String newPropertyValue) {
@@ -52,4 +62,22 @@ protected void updatePropertyInGradleProperties(
5262
return gradlePropertiesText;
5363
});
5464
}
65+
66+
protected VersionInfo parseVersion(String version) {
67+
Matcher versionMatch = VERSION_PATTERN.matcher(version);
68+
if (versionMatch.find()) {
69+
String majorSegment = versionMatch.group(1);
70+
String minorSegment = versionMatch.group(2);
71+
String patchSegment = versionMatch.group(3);
72+
String modifier = versionMatch.group(4);
73+
return new VersionInfo(majorSegment, minorSegment, patchSegment, modifier);
74+
}
75+
else {
76+
throw new IllegalStateException(
77+
"Cannot extract version segment from %s as it does not conform to the expected format".formatted(version));
78+
}
79+
}
80+
81+
record VersionInfo(String major, String minor, String patch, @Nullable String modifier) {
82+
}
5583
}

buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,22 @@
1616

1717
package org.springframework.pulsar.gradle.versions;
1818

19+
import java.util.Objects;
20+
1921
import org.gradle.api.tasks.Input;
2022
import org.gradle.api.tasks.TaskAction;
2123

24+
import org.springframework.util.Assert;
25+
2226
public abstract class UpdateToReleaseVersionTask extends UpdateProjectVersionTask {
2327

2428
@Input
2529
private String releaseVersion;
2630

27-
@Input
28-
private String springBootVersion;
29-
3031
@TaskAction
3132
public void updateToReleaseVersion() {
3233
updateVersionInGradleProperties(this.releaseVersion);
33-
updatePropertyInGradleProperties("springBootVersionForDocs", this.springBootVersion);
34+
updatePropertyInGradleProperties(SPRING_BOOT_VERSION_PROPERTY, calculateReleaseBootVersion());
3435
}
3536

3637
public String getReleaseVersion() {
@@ -41,11 +42,16 @@ public void setReleaseVersion(String releaseVersion) {
4142
this.releaseVersion = releaseVersion;
4243
}
4344

44-
public String getSpringBootVersion() {
45-
return springBootVersion;
45+
private String calculateReleaseBootVersion() {
46+
String currentBootVersion = Objects.toString(getProject().findProperty(SPRING_BOOT_VERSION_PROPERTY), null);
47+
Assert.notNull(currentBootVersion, () -> "% property not found".formatted(SPRING_BOOT_VERSION_PROPERTY));
48+
VersionInfo bootVersionSegments = parseVersion(currentBootVersion);
49+
String releaseBootVersion = "%s.%s.%s".formatted(bootVersionSegments.major(), bootVersionSegments.minor(), bootVersionSegments.patch());
50+
String releaseVersionModifier = parseVersion(this.releaseVersion).modifier();
51+
if (releaseVersionModifier != null) {
52+
releaseBootVersion = releaseBootVersion + releaseVersionModifier;
53+
}
54+
return releaseBootVersion;
4655
}
4756

48-
public void setSpringBootVersion(String springBootVersion) {
49-
this.springBootVersion = springBootVersion;
50-
}
5157
}

buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,41 @@
1616

1717
package org.springframework.pulsar.gradle.versions;
1818

19-
import java.util.regex.Matcher;
20-
import java.util.regex.Pattern;
19+
import java.util.Objects;
2120

2221
import org.gradle.api.tasks.TaskAction;
2322

24-
public abstract class UpdateToSnapshotVersionTask extends UpdateProjectVersionTask {
23+
import org.springframework.util.Assert;
2524

26-
private static final String RELEASE_VERSION_PATTERN = "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-M\\d+|-RC\\d+)?$";
25+
public abstract class UpdateToSnapshotVersionTask extends UpdateProjectVersionTask {
2726

2827
@TaskAction
2928
public void updateToSnapshotVersion() {
3029
String currentVersion = getProject().getVersion().toString();
3130
updateVersionInGradleProperties(calculateNextSnapshotVersion(currentVersion));
31+
String currentBootVersion = Objects.toString(getProject().findProperty(SPRING_BOOT_VERSION_PROPERTY), null);
32+
Assert.notNull(currentBootVersion, () -> "% property not found".formatted(SPRING_BOOT_VERSION_PROPERTY));
33+
updatePropertyInGradleProperties(SPRING_BOOT_VERSION_PROPERTY, calculateNextSnapshotVersion(currentBootVersion));
3234
}
3335

34-
private String calculateNextSnapshotVersion(String currentVersion) {
35-
Pattern releaseVersionPattern = Pattern.compile(RELEASE_VERSION_PATTERN);
36-
Matcher releaseVersion = releaseVersionPattern.matcher(currentVersion);
37-
38-
if (releaseVersion.find()) {
39-
String majorSegment = releaseVersion.group(1);
40-
String minorSegment = releaseVersion.group(2);
41-
String patchSegment = releaseVersion.group(3);
42-
String modifier = releaseVersion.group(4);
43-
if (modifier == null) {
44-
patchSegment = String.valueOf(Integer.parseInt(patchSegment) + 1);
45-
}
46-
System.out.println("modifier = " + modifier);
47-
return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment);
48-
}
49-
else {
50-
throw new IllegalStateException(
51-
"Cannot calculate next snapshot version because the current project version does not conform to the expected format");
36+
private String calculateNextSnapshotVersion(String version) {
37+
VersionInfo versionSegments = parseVersion(version);
38+
String majorSegment = versionSegments.major();
39+
String minorSegment = versionSegments.minor();
40+
String patchSegment = versionSegments.patch();
41+
String modifier = versionSegments.modifier();
42+
System.out.println("modifier = " + modifier);
43+
if (modifier == null) {
44+
patchSegment = String.valueOf(Integer.parseInt(patchSegment) + 1);
5245
}
46+
return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment);
5347
}
5448

49+
private String calculateCurrentSnapshotVersion(String version) {
50+
VersionInfo versionSegments = parseVersion(version);
51+
String majorSegment = versionSegments.major();
52+
String minorSegment = versionSegments.minor();
53+
String patchSegment = versionSegments.patch();
54+
return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment);
55+
}
5556
}

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version=1.0.0-SNAPSHOT
1+
version=1.0.1-SNAPSHOT
22

33
org.gradle.caching=true
44
org.gradle.parallel=true
@@ -11,7 +11,7 @@ springFrameworkVersion=6.1.0-RC1
1111
# only used by integration tests and samples (unpublished deps)
1212
springBootVersion=3.2.0-SNAPSHOT
1313

14-
# only used for docs
15-
springBootVersionForDocs=3.2.0-SNAPSHOT
14+
# only used for docs (links)
15+
springBootVersionForDocs=3.2.1-SNAPSHOT
1616

1717
springCloudStreamVersion=4.1.0-SNAPSHOT

0 commit comments

Comments
 (0)