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