Skip to content

Commit f103e5d

Browse files
committed
Introduce CV test configuration
This allows configuring the JDK version to use for the cross-version tests itself. For Gradle 9, we want to run the tests with both Java 17 and Java 25. Signed-off-by: Daniel Clausen <dclausen@gradle.com>
1 parent ef37655 commit f103e5d

File tree

4 files changed

+67
-7
lines changed

4 files changed

+67
-7
lines changed

.teamcity/settings.kts

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,43 @@ project {
5050
}
5151
}
5252

53-
val crossVersionTestLinuxGroup = listOf(5, 6, 7, 8, 9).map { gradleMajorVersion ->
54-
val toolchainVersion = if(gradleMajorVersion >= 9) 17 else 8
55-
buildType("CrossVersionTest Gradle $gradleMajorVersion.x Releases Linux - Java $toolchainVersion") {
53+
data class CrossVersionTestConfiguration(
54+
val gradleMajorVersion: Int,
55+
val javaToolchainVersion: Int,
56+
val testJavaToolchainVersion: Int?,
57+
) {
58+
constructor(gradleMajorVersion: Int, testJavaToolchainVersion: Int) : this(
59+
gradleMajorVersion,
60+
if(gradleMajorVersion >= 9) 17 else 8,
61+
testJavaToolchainVersion,
62+
)
63+
64+
constructor(gradleMajorVersion: Int) : this(
65+
gradleMajorVersion,
66+
if(gradleMajorVersion >= 9) 17 else 8,
67+
null,
68+
)
69+
}
70+
71+
val crossVersionGroupConfigs = listOf(
72+
CrossVersionTestConfiguration(gradleMajorVersion = 5),
73+
CrossVersionTestConfiguration(gradleMajorVersion = 6),
74+
CrossVersionTestConfiguration(gradleMajorVersion = 7),
75+
CrossVersionTestConfiguration(gradleMajorVersion = 8),
76+
CrossVersionTestConfiguration(gradleMajorVersion = 9),
77+
CrossVersionTestConfiguration(gradleMajorVersion = 9, testJavaToolchainVersion = 25),
78+
)
79+
80+
val crossVersionTestLinuxGroups = crossVersionGroupConfigs.map { config ->
81+
val testConfig = if (config.testJavaToolchainVersion == null) "" else " (tests use Java ${config.testJavaToolchainVersion})"
82+
buildType("CrossVersionTest Gradle ${config.gradleMajorVersion}.x Releases Linux - Java ${config.javaToolchainVersion}${testConfig}") {
83+
val javaToolchainVersionParameter = "-PjavaToolchainVersion=${config.javaToolchainVersion}"
84+
val testJavaToolchainVersionParameter = if (config.testJavaToolchainVersion == null) "" else "-PtestJavaToolchainVersion=${config.testJavaToolchainVersion}"
5685
steps {
5786
gradle {
58-
tasks = "clean testGradle${gradleMajorVersion}Releases"
87+
tasks = "clean testGradle${config.gradleMajorVersion}Releases"
5988
buildFile = ""
60-
gradleParams = "-s $useGradleInternalScansServer $buildCacheSetup -PjavaToolchainVersion=$toolchainVersion"
89+
gradleParams = "-s $useGradleInternalScansServer $buildCacheSetup $javaToolchainVersionParameter $testJavaToolchainVersionParameter"
6190
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
6291
}
6392
}
@@ -109,7 +138,7 @@ project {
109138
onDependencyFailure = FailureAction.CANCEL
110139
onDependencyCancel = FailureAction.CANCEL
111140
}
112-
crossVersionTestLinuxGroup.map {
141+
crossVersionTestLinuxGroups.map {
113142
snapshot(it) {
114143
onDependencyFailure = FailureAction.CANCEL
115144
onDependencyCancel = FailureAction.CANCEL

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ org.gradle.parallel=true
33
org.gradle.caching=true
44
org.gradle.java.installations.auto-detect=false
55
org.gradle.java.installations.auto-download=false
6-
org.gradle.java.installations.fromEnv=JDK8,JDK17
6+
org.gradle.java.installations.fromEnv=JDK8,JDK17,JDK25
77
systemProp.org.gradle.kotlin.dsl.caching.buildcache=true
88
systemProp.scan.capture-file-fingerprints=true
99
systemProp.org.gradle.groovy.compilation.avoidance=true

plugin/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,11 @@ tasks.withType<Test> {
172172
systemProperty("spock1Version", libs.versions.spock1.get())
173173
systemProperty("spock2Version", if (isGradle9OrNewer) libs.versions.spock2.groovy4.get() else libs.versions.spock2.groovy3.get())
174174
systemProperty("testNgVersion", libs.versions.testNg.get())
175+
176+
if (project.hasProperty("testJavaToolchainVersion")) {
177+
val testJavaToolchainVersion = project.property("testJavaToolchainVersion").toString()
178+
systemProperty("testJavaToolchainVersion", testJavaToolchainVersion)
179+
}
175180
}
176181

177182
listOf(5, 6, 7, 8, 9).map { gradleMajorVersion ->

plugin/src/test/groovy/org/gradle/testretry/AbstractPluginFuncTest.groovy

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,30 @@ abstract class AbstractPluginFuncTest extends Specification implements TestFrame
126126
events "passed", "skipped", "failed"
127127
}
128128
}
129+
130+
${jdkConfigurationForTest()}
129131
"""
130132
}
131133

134+
String jdkConfigurationForTest() {
135+
def maybeTestJdkVersion = testJavaToolchainVersion()
136+
137+
if (maybeTestJdkVersion.present) {
138+
def testJdkVersion = maybeTestJdkVersion.get()
139+
println "Test runs with JDK ${testJdkVersion}"
140+
141+
"""
142+
java {
143+
toolchain {
144+
languageVersion = JavaLanguageVersion.of(${testJdkVersion})
145+
}
146+
}
147+
"""
148+
} else {
149+
return ""
150+
}
151+
}
152+
132153
abstract String getLanguagePlugin()
133154

134155
String baseBuildScriptWithoutPlugin() {
@@ -223,6 +244,11 @@ abstract class AbstractPluginFuncTest extends Specification implements TestFrame
223244
true
224245
}
225246

247+
Optional<Integer> testJavaToolchainVersion() {
248+
Optional.ofNullable(System.getProperty("testJavaToolchainVersion"))
249+
.map(s -> s.toInteger())
250+
}
251+
226252
static private List<String> gradleVersionsUnderTest() {
227253
def explicitGradleVersions = System.getProperty('org.gradle.test.gradleVersions')
228254
if (explicitGradleVersions) {

0 commit comments

Comments
 (0)