diff --git a/gradle/plugins/aot-smoke-test-plugin/src/main/java/org/springframework/aot/gradle/UseSnapshots.java b/gradle/plugins/aot-smoke-test-plugin/src/main/java/org/springframework/aot/gradle/UseSnapshots.java
index 6246b300..e9a1baa4 100644
--- a/gradle/plugins/aot-smoke-test-plugin/src/main/java/org/springframework/aot/gradle/UseSnapshots.java
+++ b/gradle/plugins/aot-smoke-test-plugin/src/main/java/org/springframework/aot/gradle/UseSnapshots.java
@@ -27,9 +27,14 @@ import org.gradle.api.artifacts.ResolutionStrategy;
* dependency's current version:
*
* - {@code x.y.z-SNAPSHOT} is used as-is
- * - {@code x.y.z} is changed to {@code x.y.z+1-SNAPSHOT}
+ * - {@code x.y.z.BUILD-SNAPSHOT} is used as-is
* - {@code x.y.z-Mn} is changed to {@code to x.y.z-SNAPSHOT}
+ * - {@code x.y.z.Mn} is changed to {@code to x.y.z.BUILD-SNAPSHOT}
* - {@code x.y.z-RCn} is changed to {@code to x.y.z-SNAPSHOT}
+ * - {@code x.y.z.RCn} is changed to {@code to x.y.z.BUILD-SNAPSHOT}
+ * - {@code x.y.z} is changed to {@code x.y.z+1-SNAPSHOT}
+ * - {@code x.y.z.RELEASE} is changed to {@code x.y.z+1.BUILD-SNAPSHOT}
+ *
*
*
* @author Marcus Hert Da Coregio
@@ -55,6 +60,10 @@ final class UseSnapshots implements Action {
if (version.endsWith("-SNAPSHOT")) {
return version;
}
+ boolean oldVersionFormat = version.matches(".*\\.(((M|RC)\\d+)|RELEASE)$");
+ if (oldVersionFormat) {
+ return buildSnapshotOf(version);
+ }
boolean isMilestone = version.matches(".*-(M|RC)\\d+$");
String rawVersion = version.split("-")[0];
if (isMilestone) {
@@ -66,4 +75,16 @@ final class UseSnapshots implements Action {
return String.join(".", parts);
}
+ private String buildSnapshotOf(String version) {
+ boolean isMilestone = !version.endsWith(".RELEASE");
+ String rawVersion = version.substring(0, version.lastIndexOf("."));
+ if (isMilestone) {
+ return rawVersion + ".BUILD-SNAPSHOT";
+ }
+ String[] parts = rawVersion.split("\\.");
+ int nextPatchVersion = Integer.parseInt(parts[2]) + 1;
+ parts[2] = nextPatchVersion + ".BUILD-SNAPSHOT";
+ return String.join(".", parts);
+ }
+
}
diff --git a/gradle/plugins/aot-smoke-test-plugin/src/test/java/org/springframework/aot/gradle/UseSnapshotsTests.java b/gradle/plugins/aot-smoke-test-plugin/src/test/java/org/springframework/aot/gradle/UseSnapshotsTests.java
index 7a3e34d5..fcf68341 100644
--- a/gradle/plugins/aot-smoke-test-plugin/src/test/java/org/springframework/aot/gradle/UseSnapshotsTests.java
+++ b/gradle/plugins/aot-smoke-test-plugin/src/test/java/org/springframework/aot/gradle/UseSnapshotsTests.java
@@ -19,6 +19,8 @@ package org.springframework.aot.gradle;
import org.gradle.api.artifacts.DependencyResolveDetails;
import org.gradle.api.artifacts.ModuleVersionSelector;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
@@ -33,34 +35,54 @@ class UseSnapshotsTests {
private final UseSnapshots useSnapshots = new UseSnapshots();
- @Test
- void snapshotVersionIsUsedAsIs() {
- DependencyResolveDetails dependency = dependency("org.springframework", "6.0.12-SNAPSHOT");
- then(dependency).should().useVersion("6.0.12-SNAPSHOT");
+ @ParameterizedTest
+ @CsvSource(textBlock = """
+ 6.0.12-SNAPSHOT, 6.0.12-SNAPSHOT
+ 5.2.26.BUILD-SNAPSHOT, 5.2.26.BUILD-SNAPSHOT
+ """)
+ void snapshotVersionIsUsedAsIs(String version, String derivedVersion) {
+ DependencyResolveDetails dependency = dependency("org.springframework", version);
+ then(dependency).should().useVersion(derivedVersion);
}
- @Test
- void milestoneUsesSnapshotOfSameVersion() {
- DependencyResolveDetails dependency = dependency("org.springframework", "6.1.0-M2");
- then(dependency).should().useVersion("6.1.0-SNAPSHOT");
+ @ParameterizedTest
+ @CsvSource(textBlock = """
+ 6.1.0-M2, 6.1.0-SNAPSHOT
+ 5.2.0.M2, 5.2.0.BUILD-SNAPSHOT
+ """)
+ void milestoneUsesSnapshotOfSameVersion(String version, String derivedVersion) {
+ DependencyResolveDetails dependency = dependency("org.springframework", version);
+ then(dependency).should().useVersion(derivedVersion);
}
- @Test
- void releaseCandidateUsesSnapshotOfSameVersion() {
- DependencyResolveDetails dependency = dependency("org.springframework", "6.1.0-RC2");
- then(dependency).should().useVersion("6.1.0-SNAPSHOT");
+ @ParameterizedTest
+ @CsvSource(textBlock = """
+ 6.1.0-RC1, 6.1.0-SNAPSHOT
+ 5.2.0.RC1, 5.2.0.BUILD-SNAPSHOT
+ """)
+ void releaseCandidateUsesSnapshotOfSameVersion(String version, String derivedVersion) {
+ DependencyResolveDetails dependency = dependency("org.springframework", version);
+ then(dependency).should().useVersion(derivedVersion);
}
- @Test
- void gaReleaseUsesSnapshotOfNextPatch() {
- DependencyResolveDetails dependency = dependency("org.springframework", "6.1.0");
- then(dependency).should().useVersion("6.1.1-SNAPSHOT");
+ @ParameterizedTest
+ @CsvSource(textBlock = """
+ 6.1.0, 6.1.1-SNAPSHOT
+ 5.2.0.RELEASE, 5.2.1.BUILD-SNAPSHOT
+ """)
+ void gaReleaseUsesSnapshotOfNextPatch(String version, String derivedVersion) {
+ DependencyResolveDetails dependency = dependency("org.springframework", version);
+ then(dependency).should().useVersion(derivedVersion);
}
- @Test
- void maintenanceReleaseUsesSnapshotOfNextPatch() {
- DependencyResolveDetails dependency = dependency("org.springframework", "6.1.3");
- then(dependency).should().useVersion("6.1.4-SNAPSHOT");
+ @ParameterizedTest
+ @CsvSource(textBlock = """
+ 6.1.1, 6.1.2-SNAPSHOT
+ 5.2.1.RELEASE, 5.2.2.BUILD-SNAPSHOT
+ """)
+ void maintenanceReleaseUsesSnapshotOfNextPatch(String version, String derivedVersion) {
+ DependencyResolveDetails dependency = dependency("org.springframework", version);
+ then(dependency).should().useVersion(derivedVersion);
}
@Test