Run Gradle 8.0+ on macOS with configuration cache
macOS is the smallest IT suite where it is easy to enable testing with
CC. We are using 8.0+ because since this version Gradle does the
serialization and deseriazation of the configuration state from the
first execution
^KT-69956
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt
index b45089b..fec445b 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt
@@ -354,7 +354,7 @@
buildOptions = defaultBuildOptions.copy(
logLevel = LogLevel.DEBUG,
projectIsolation = true,
- configurationCache = null,
+ configurationCache = BuildOptions.ConfigurationCacheValue.DONT_SPECIFY,
buildReport = listOf(BuildReportType.FILE, BuildReportType.JSON)
)
) {
@@ -663,7 +663,7 @@
buildOptions = defaultBuildOptions.copy(
logLevel = LogLevel.DEBUG,
projectIsolation = true,
- configurationCache = null,
+ configurationCache = BuildOptions.ConfigurationCacheValue.DONT_SPECIFY,
buildReport = listOf(BuildReportType.BUILD_SCAN)
)
) {
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildStatisticsWithKtorIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildStatisticsWithKtorIT.kt
index 4a3a7c9..4a53aca 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildStatisticsWithKtorIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildStatisticsWithKtorIT.kt
@@ -236,7 +236,7 @@
fun testConfigurationCache(gradleVersion: GradleVersion) {
runWithKtorService { port ->
- val buildOptions = defaultBuildOptions.copy(configurationCache = true)
+ val buildOptions = defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)
project("incrementalMultiproject", gradleVersion) {
setProjectForTest(port)
build("assemble", buildOptions = buildOptions) {
@@ -305,7 +305,7 @@
fun testProjectIsolation(gradleVersion: GradleVersion) {
runWithKtorService { port ->
- val buildOptions = defaultBuildOptions.copy(projectIsolation = true, configurationCache = null)
+ val buildOptions = defaultBuildOptions.copy(projectIsolation = true, configurationCache = BuildOptions.ConfigurationCacheValue.DONT_SPECIFY)
project("incrementalMultiproject", gradleVersion) {
setProjectForTest(port)
build("assemble", "--stacktrace", buildOptions = buildOptions) {
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt
index f32bd7a..9c5b979 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt
@@ -374,7 +374,7 @@
abstract class AbstractConfigurationCacheIT : KGPBaseTest() {
override val defaultBuildOptions =
- super.defaultBuildOptions.copy(configurationCache = true)
+ super.defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)
protected fun TestProject.testConfigurationCacheOf(
vararg taskNames: String,
@@ -399,7 +399,7 @@
)
)
} else defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
konanDataDir = konanTempDir,
nativeOptions = super.defaultBuildOptions.nativeOptions.copy(
// set the KGP's default Kotlin Native version, because in CI we don't have K/N versions in maven repo for each build
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt
index f775b69..d252840 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt
@@ -162,7 +162,7 @@
project(
"instantExecutionWithIncludedBuildPlugin",
gradleVersion,
- buildOptions = defaultBuildOptions.copy(configurationCache = true)
+ buildOptions = defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)
) {
build("compileKotlin", "-Pkotlin.session.logger.root.path=$projectPath") {
Files.list(projectPath.resolve("kotlin-profile")).forEach {
@@ -261,7 +261,7 @@
"simpleProject",
gradleVersion,
buildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
projectIsolation = isProjectIsolationEnabled,
buildReport = listOf(BuildReportType.FILE)
),
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsConfigurationCacheIT.kt
index 68736fe..e05ed97 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsConfigurationCacheIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsConfigurationCacheIT.kt
@@ -13,7 +13,7 @@
class JsIrConfigurationCacheIT : KGPBaseTest() {
override val defaultBuildOptions =
super.defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
configurationCacheProblems = BaseGradleIT.ConfigurationCacheProblems.FAIL
)
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt
index 75c4395..011f648 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt
@@ -20,7 +20,7 @@
override val defaultBuildOptions =
super.defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
configurationCacheProblems = BaseGradleIT.ConfigurationCacheProblems.FAIL
)
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt
index 48257b5..d1515e3 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt
@@ -14,7 +14,7 @@
class ProjectIsolationIT : KGPBaseTest() {
override val defaultBuildOptions: BuildOptions
- get() = super.defaultBuildOptions.copy(configurationCache = true, projectIsolation = true)
+ get() = super.defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED, projectIsolation = true)
@DisplayName("JVM project should be compatible with project isolation")
@JvmGradlePluginTests
@@ -43,7 +43,7 @@
project(
projectName = "kt-63990-buildSrcWithKotlinJvmPlugin",
gradleVersion = gradleVersion,
- buildOptions = defaultBuildOptions.copy(configurationCache = null)
+ buildOptions = defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.DONT_SPECIFY)
) {
build("tasks")
}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt
index e542c60..80b2a5a 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WasmConfigurationCacheIT.kt
@@ -13,7 +13,7 @@
class WasmConfigurationCacheIT : KGPBaseTest() {
override val defaultBuildOptions =
super.defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
)
@DisplayName("configuration cache is working for wasm")
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt
index c5070e3..8f03a06 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/ExternalAndroidTargetIT.kt
@@ -105,7 +105,7 @@
buildJdk = jdkVersion.location,
localRepoDir = localRepoDir
) {
- build("publish", buildOptions = buildOptions.copy(configurationCache = true)) {
+ build("publish", buildOptions = buildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)) {
val pomFile = localRepoDir.resolve("app/app-android/1.0/app-android-1.0.pom")
assertFileExists(pomFile)
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt
index b09290b..97c750e 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt
@@ -79,13 +79,13 @@
@TestMetadata("errorDiagnosticBuildFails")
fun testErrorDiagnosticBuildFailsWithConfigurationCache(gradleVersion: GradleVersion) {
project("errorDiagnosticBuildFails", gradleVersion) {
- buildAndFail("assemble", buildOptions = buildOptions.copy(configurationCache = true)) {
+ buildAndFail("assemble", buildOptions = buildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)) {
assertConfigurationCacheStored()
assertEqualsToFile(expectedOutputFile("assemble"), extractProjectsAndTheirDiagnostics())
}
// fails again
- buildAndFail("assemble", buildOptions = buildOptions.copy(configurationCache = true)) {
+ buildAndFail("assemble", buildOptions = buildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)) {
assertConfigurationCacheReused()
assertEqualsToFile(expectedOutputFile("assemble-cache-reused"), extractProjectsAndTheirDiagnostics())
}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslAssociateCompilationsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslAssociateCompilationsIT.kt
index 62acf67..4e595fe 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslAssociateCompilationsIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslAssociateCompilationsIT.kt
@@ -117,7 +117,7 @@
buildOptions = buildOptions.copy(
logLevel = LogLevel.LIFECYCLE,
buildCacheEnabled = true,
- configurationCache = gradleVersion >= GradleVersion.version("8.5"),
+ configurationCache = runWithConfigurationCacheSinceGradle("8.5", gradleVersion)
)
) {
assertTasksExecuted(testTasks)
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslPublishedMetadataIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslPublishedMetadataIT.kt
index 6aa15d1..4e0ddaf 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslPublishedMetadataIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDslPublishedMetadataIT.kt
@@ -113,7 +113,7 @@
"clean",
"publish",
buildOptions = defaultBuildOptions
- .copy(configurationCache = gradleVersion > GradleVersion.version("8.0")),
+ .copy(configurationCache = runWithConfigurationCacheSinceGradle("8.0", gradleVersion))
) {
assertFileContains(
localRepoDir.resolve("com/exampleapp/sample-app-nodejs/1.0/sample-app-nodejs-1.0.pom"),
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppIncorrectCompileOnlyDependenciesValidationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppIncorrectCompileOnlyDependenciesValidationIT.kt
index e3a9265..8e3aed5 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppIncorrectCompileOnlyDependenciesValidationIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppIncorrectCompileOnlyDependenciesValidationIT.kt
@@ -16,7 +16,7 @@
override val defaultBuildOptions: BuildOptions
get() = super.defaultBuildOptions.copy(
logLevel = LIFECYCLE, // less logging, faster tests
- configurationCache = true, // more caching, faster tests
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED, // more caching, faster tests
)
@GradleTest
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppJvmRunIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppJvmRunIT.kt
index db51e58..018900c 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppJvmRunIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppJvmRunIT.kt
@@ -55,7 +55,7 @@
@GradleTestVersions(minVersion = TestVersions.Gradle.G_7_4)
@GradleTest
fun `test - jvmRun - works with Gradle configuration cache`(version: GradleVersion) {
- project("mppRunJvm", version, buildOptions = defaultBuildOptions.copy(configurationCache = true)) {
+ project("mppRunJvm", version, buildOptions = defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)) {
build("jvmRun", "-DmainClass=JvmMainKt") {
assertOutputContains("Jvm: OK!")
assertOutputContains("Executed: JvmMain")
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt
index 5299713..b3750fe 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppTestsIT.kt
@@ -94,7 +94,7 @@
fun testKt68638KotlinNativeLinkApiFilesResolutionError(gradleVersion: GradleVersion) {
project("kt-68638-native-link-self-dependency", gradleVersion) {
val buildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
freeArgs = listOf("--dry-run")
)
// no build failure is expected
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/AppleFrameworkIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/AppleFrameworkIT.kt
index 1c1c0ad..36b03de 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/AppleFrameworkIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/AppleFrameworkIT.kt
@@ -428,7 +428,11 @@
buildAndFail(":shared:embedAndSignAppleFrameworkForXcode", environmentVariables = environmentVariables) {
if (gradleVersion >= GradleVersion.version("8.0")) {
- assertOutputContains("error: Execution failed for task ':shared:compileKotlinIosArm64'.")
+ if (buildOptions.configurationCache == BuildOptions.ConfigurationCacheValue.ENABLED) {
+ assertOutputContains("error: Configuration cache state could not be cached: field `libraries` of task `:shared:compileKotlinIosArm64` of type `org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile`: error writing value of type 'org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection'")
+ } else {
+ assertOutputContains("error: Execution failed for task ':shared:compileKotlinIosArm64'.")
+ }
assertOutputContains("error: Could not resolve all files for configuration ':shared:iosArm64CompileKlibraries'.")
assertOutputContains("error: Could not resolve all dependencies for configuration ':shared:iosArm64CompileKlibraries'.")
assertOutputContains("error: Could not find com.example.unknown:dependency:0.0.1.")
@@ -594,7 +598,11 @@
nativeProject(
"appleGradlePluginConsumesAppleFrameworks",
gradleVersion,
- buildJdk = providedJdk.location
+ buildJdk = providedJdk.location,
+ buildOptions = defaultBuildOptions.copy(
+ // Apple plugin doesn't support configuration cache
+ configurationCache = BuildOptions.ConfigurationCacheValue.DISABLED,
+ )
) {
fun dependencyInsight(configuration: String) = arrayOf(
":iosApp:dependencyInsight", "--configuration", configuration, "--dependency", "iosLib"
@@ -630,7 +638,7 @@
"sharedAppleFramework",
gradleVersion,
// enable CC to make sure that external process isn't run during configuration
- buildOptions = defaultBuildOptions.copy(configurationCache = true),
+ buildOptions = defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED),
) {
build(":shared:linkReleaseFrameworkIosSimulatorArm64") {
assertNoDiagnostic(KotlinToolingDiagnostics.XcodeVersionTooHighWarning)
@@ -650,4 +658,4 @@
if (writeProtected) {
setPosixFilePermissions(setOf(PosixFilePermission.OWNER_READ))
}
-}
\ No newline at end of file
+}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt
index 2f573a7..de29526 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt
@@ -121,7 +121,7 @@
"cinterop-with-header",
gradleVersion = gradleVersion,
buildOptions = defaultBuildOptions.copy(
- configurationCache = true
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED
)
) {
val dummyHeaderPath = projectPath.resolve("libs").resolve("include").resolve("dummy.h").toFile().canonicalPath
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt
index 83147ce..3b87960 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt
@@ -533,7 +533,11 @@
)
buildAndFail("syncFramework", buildOptions = buildOptions) {
if (gradleVersion >= GradleVersion.version("8.0")) {
- assertOutputContains("error: Execution failed for task ':compileKotlinIOS'.")
+ if (buildOptions.configurationCache == BuildOptions.ConfigurationCacheValue.ENABLED) {
+ assertOutputContains("error: Configuration cache state could not be cached: field `libraries` of task `:compileKotlinIOS` of type `org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile`: error writing value of type 'org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection'")
+ } else {
+ assertOutputContains("error: Execution failed for task ':compileKotlinIOS'.")
+ }
assertOutputContains("error: Could not resolve all files for configuration ':iOSCompileKlibraries'.")
assertOutputContains("error: Could not resolve all dependencies for configuration ':iOSCompileKlibraries'.")
assertOutputContains("error: Could not find com.example.unknown:dependency:0.0.1.")
@@ -921,7 +925,7 @@
cocoapodsArchs = "x86_64",
cocoapodsConfiguration = "Debug"
),
- configurationCache = true
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED
)
nativeProjectWithCocoapodsAndIosAppPodFile(
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt
index 3ee3fd7..651b889 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt
@@ -396,7 +396,7 @@
* - Before 8.0 Gradle doesn't deserialize CC during the first execution and the issue is not visible
* - Before 7.4.2 there is a CC serialization failure because Gradle can't serialize ComponentResult
*/
- configurationCache = gradleVersion >= GradleVersion.version(TestVersions.Gradle.G_8_0)
+ configurationCache = runWithConfigurationCacheSinceGradle(TestVersions.Gradle.G_8_0, gradleVersion)
)
) {
val binaries = mutableListOf(
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt
index a494180..1653508 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt
@@ -75,7 +75,7 @@
// enabled incremental cache and configuration cache parameters
val withIncrementalCacheAndConfigurationCacheBuildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
nativeOptions = defaultBuildOptions.nativeOptions.copy(
incremental = true
)
diff --git "a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWith\320\241onfigurationCacheIT.kt" b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWithConfigurationCacheIT.kt
similarity index 96%
rename from "libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWith\320\241onfigurationCacheIT.kt"
rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWithConfigurationCacheIT.kt
index 7cc40e1..046ebee 100644
--- "a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWith\320\241onfigurationCacheIT.kt"
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWithConfigurationCacheIT.kt
@@ -13,7 +13,7 @@
@NativeGradlePluginTests
class NativeWithConfigurationCacheIT : KGPBaseTest() {
- override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(configurationCache = true)
+ override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED)
@DisplayName(
"Configuration phase should be reused from configuration cache for the second build " +
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt
index a281b97..d537be0 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt
@@ -38,7 +38,7 @@
":shared:embedAndSignAppleFrameworkForXcode",
environmentVariables = swiftExportEmbedAndSignEnvVariables(testBuildDir),
buildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
)
) {
assertTasksExecuted(":shared:iosArm64DebugSwiftExport")
@@ -76,7 +76,7 @@
":shared:embedAndSignAppleFrameworkForXcode",
environmentVariables = swiftExportEmbedAndSignEnvVariables(testBuildDir),
buildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
)
) {
assertTasksExecuted(":shared:copyDebugSPMIntermediates")
@@ -130,7 +130,7 @@
":shared:embedAndSignAppleFrameworkForXcode",
environmentVariables = swiftExportEmbedAndSignEnvVariables(testBuildDir, listOf("arm64", "x86_64"), "iphonesimulator"),
buildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
)
) {
assertTasksExecuted(":shared:copyDebugSPMIntermediates")
@@ -168,7 +168,7 @@
":shared:embedAndSignAppleFrameworkForXcode",
environmentVariables = swiftExportEmbedAndSignEnvVariables(testBuildDir),
buildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
)
) {
assertTasksExecuted(":shared:copyDebugSPMIntermediates")
@@ -204,7 +204,7 @@
":shared:embedAndSignAppleFrameworkForXcode",
environmentVariables = swiftExportEmbedAndSignEnvVariables(testBuildDir, listOf("arm64", "x86_64"), "iphonesimulator"),
buildOptions = defaultBuildOptions.copy(
- configurationCache = true,
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED,
)
) {
assertTasksExecuted(":shared:copyDebugSPMIntermediates")
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt
index 7b0b017..10c7179 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt
@@ -16,7 +16,7 @@
@DisplayName("JVM API validation")
class KotlinJvmApiTest : KGPBaseTest() {
override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(
- configurationCache = true
+ configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED
)
@DisplayName("Kotlin compilation can be set up using APIs")
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt
index 261c2ab..ad085aa 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/BuildOptions.kt
@@ -26,7 +26,7 @@
val stacktraceMode: String? = StacktraceOption.FULL_STACKTRACE_LONG_OPTION,
val kotlinVersion: String = TestVersions.Kotlin.CURRENT,
val warningMode: WarningMode = WarningMode.Fail,
- val configurationCache: Boolean? = false, //null value is only for cases, when project isolation is used without configuration cache. Otherwise Gradle runner will throw exception "The configuration cache cannot be disabled when isolated projects is enabled."
+ val configurationCache: ConfigurationCacheValue = ConfigurationCacheValue.DISABLED_BY_DEFAULT,
val projectIsolation: Boolean = false,
val configurationCacheProblems: BaseGradleIT.ConfigurationCacheProblems = BaseGradleIT.ConfigurationCacheProblems.FAIL,
val parallel: Boolean = true,
@@ -59,6 +59,14 @@
val kotlinUserHome: Path? = testKitDir.resolve(".kotlin"),
val compilerArgumentsLogLevel: String? = "info",
) {
+ enum class ConfigurationCacheValue {
+ DISABLED_BY_DEFAULT,
+ DISABLED,
+ ENABLED,
+ // DONT_SPECIFY value is only for cases, when project isolation is used without configuration cache. Otherwise Gradle runner will throw exception "The configuration cache cannot be disabled when isolated projects is enabled."
+ DONT_SPECIFY
+ }
+
val isK2ByDefault
get() = KotlinVersion.DEFAULT >= KotlinVersion.KOTLIN_2_0
@@ -120,8 +128,14 @@
WarningMode.None -> arguments.add("--warning-mode=none")
}
- if (configurationCache != null) {
- arguments.add("-Dorg.gradle.unsafe.configuration-cache=$configurationCache")
+ val configurationCacheValue = when (configurationCache) {
+ ConfigurationCacheValue.DISABLED,
+ ConfigurationCacheValue.DISABLED_BY_DEFAULT -> false
+ ConfigurationCacheValue.ENABLED -> true
+ ConfigurationCacheValue.DONT_SPECIFY -> null
+ }
+ if (configurationCacheValue != null) {
+ arguments.add("-Dorg.gradle.unsafe.configuration-cache=$configurationCacheValue")
arguments.add("-Dorg.gradle.unsafe.configuration-cache-problems=${configurationCacheProblems.name.lowercase(Locale.getDefault())}")
}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/configurationCacheHelpers.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/configurationCacheHelpers.kt
index 80faeda..d8c92c4 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/configurationCacheHelpers.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/configurationCacheHelpers.kt
@@ -61,4 +61,4 @@
}
val BuildOptions.withConfigurationCache: BuildOptions
- get() = copy(configurationCache = true, configurationCacheProblems = BaseGradleIT.ConfigurationCacheProblems.FAIL)
\ No newline at end of file
+ get() = copy(configurationCache = BuildOptions.ConfigurationCacheValue.ENABLED, configurationCacheProblems = BaseGradleIT.ConfigurationCacheProblems.FAIL)
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt
index ea4955a..c3b8f81 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt
@@ -18,6 +18,7 @@
import org.jetbrains.kotlin.gradle.util.modify
import org.jetbrains.kotlin.gradle.util.runProcess
import org.jetbrains.kotlin.konan.target.HostManager
+import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.presetName
import org.jetbrains.kotlin.test.util.KtTestUtil
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
@@ -78,7 +79,21 @@
gradleRunner,
projectName,
projectPath,
- buildOptions,
+ buildOptions.copy(
+ configurationCache = when (buildOptions.configurationCache) {
+ BuildOptions.ConfigurationCacheValue.DISABLED_BY_DEFAULT -> if (
+ shouldTestWithConfigurationCacheByDefault(
+ host = HostManager.host,
+ gradleVersion = gradleVersion
+ )
+ ) {
+ BuildOptions.ConfigurationCacheValue.ENABLED
+ } else {
+ BuildOptions.ConfigurationCacheValue.DISABLED_BY_DEFAULT
+ }
+ else -> buildOptions.configurationCache
+ }
+ ),
gradleVersion,
forceOutput = forceOutput,
enableBuildScan = enableBuildScan,
@@ -961,3 +976,18 @@
* Resolves the temporary local repository path for the test with specified Gradle version.
*/
fun KGPBaseTest.defaultLocalRepo(gradleVersion: GradleVersion) = workingDir.resolve(gradleVersion.version).resolve("repo")
+
+private fun shouldTestWithConfigurationCacheByDefault(
+ host: KonanTarget,
+ gradleVersion: GradleVersion,
+): Boolean =
+ // For now test with CC by default only on macOS
+ host.family.isAppleFamily
+ // Test with CC since Gradle 8.0 and higher because since 8.0 Gradle deserializes from CC on the execution
+ && gradleVersion >= GradleVersion.version("8.0")
+
+fun runWithConfigurationCacheSinceGradle(
+ sinceGradleVersion: String,
+ currentGradleVersion: GradleVersion
+): BuildOptions.ConfigurationCacheValue =
+ if (GradleVersion.version(sinceGradleVersion) >= currentGradleVersion) BuildOptions.ConfigurationCacheValue.ENABLED else BuildOptions.ConfigurationCacheValue.DISABLED_BY_DEFAULT
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt
index 7e9ba69..a31c79f 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt
@@ -17,32 +17,33 @@
fun TestProject.testResolveAllConfigurations(
subproject: String? = null,
- skipSetup: Boolean = false,
- excludeConfigurations: List<String> = listOf(),
- options: BuildOptions = buildOptions,
withUnresolvedConfigurationNames: TestProject.(unresolvedConfigurations: List<String>, buildResult: BuildResult) -> Unit = { conf, _ ->
assertTrue("Unresolved configurations: $conf") { conf.isEmpty() }
},
) {
- if (!skipSetup) {
- val targetProject = subproject?.let { subProject(it) } ?: this
- when {
- Files.exists(targetProject.buildGradle) -> targetProject.buildGradle
- .append("\n${generateResolveAllConfigurationsTask(excludeConfigurations)}")
- Files.exists(targetProject.buildGradleKts) -> targetProject.buildGradleKts
- .append("\n${generateResolveAllConfigurationsTaskKts(excludeConfigurations)}")
- else -> error("Build script does not exist under $projectPath")
- }
+ val targetProject = subproject?.let { subProject(it) } ?: this
+ when {
+ Files.exists(targetProject.buildGradle) -> targetProject.buildGradle
+ .append("\n${generateResolveAllConfigurationsTask()}")
+ Files.exists(targetProject.buildGradleKts) -> targetProject.buildGradleKts
+ .append("\n${generateResolveAllConfigurationsTaskKts()}")
+ else -> error("Build script does not exist under $projectPath")
}
- build(RESOLVE_ALL_CONFIGURATIONS_TASK_NAME, buildOptions = options) {
+ build(
+ RESOLVE_ALL_CONFIGURATIONS_TASK_NAME,
+ buildOptions = buildOptions.copy(
+ // The configuration resolution happens during execution, so we have to disable CC
+ configurationCache = BuildOptions.ConfigurationCacheValue.DISABLED,
+ )
+ ) {
assertTasksExecuted(":${subproject?.let { "$it:" }.orEmpty()}$RESOLVE_ALL_CONFIGURATIONS_TASK_NAME")
val unresolvedConfigurations = unresolvedConfigurationRegex.findAll(output).map { it.groupValues[1] }.toList()
withUnresolvedConfigurationNames(unresolvedConfigurations, this)
}
}
-private fun generateResolveAllConfigurationsTask(excludes: List<String>) =
+private fun generateResolveAllConfigurationsTask() =
"""
tasks.register("$RESOLVE_ALL_CONFIGURATIONS_TASK_NAME") {
if ("commonizeNativeDistribution" in rootProject.tasks.names) {
@@ -50,7 +51,7 @@
}
doFirst {
def excludeConfigs = ["default", "archives"]
- ${computeExcludeConfigurations(excludes)}
+ ${computeExcludeConfigurations()}
project.configurations
.matching { it.canBeResolved }
@@ -74,7 +75,7 @@
}
""".trimIndent()
-private fun generateResolveAllConfigurationsTaskKts(excludes: List<String>) =
+private fun generateResolveAllConfigurationsTaskKts() =
"""
tasks.register("$RESOLVE_ALL_CONFIGURATIONS_TASK_NAME") {
if ("commonizeNativeDistribution" in rootProject.tasks.names) {
@@ -82,7 +83,6 @@
}
doFirst {
val excludeConfigs = mutableListOf("default", "archives")
- ${computeExcludeConfigurations(excludes)}
project.configurations
.filter { it.isCanBeResolved }
@@ -108,7 +108,7 @@
}
""".trimIndent()
-private fun computeExcludeConfigurations(excludes: List<String>): String {
+private fun computeExcludeConfigurations(): String {
val excludingConfigurations = listOf("compile", "runtime", "compileOnly", "runtimeOnly")
return """
kotlin.sourceSets.forEach { sourceSet ->
@@ -121,9 +121,5 @@
excludeConfigs.add(it)
excludeConfigs.add("test" + it.capitalize())
}
-
- "${excludes.joinToString()}".split(", ").toList().forEach {
- excludeConfigs.add(it)
- }
""".trimIndent()
}