diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt index a4a7d3306f2..a1ce40158d3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt @@ -25,11 +25,13 @@ import org.junit.runners.Parameterized import java.io.File import kotlin.test.assertEquals +private val DEFAULT_GRADLE_VERSION = GradleVersionRequired.AtLeast("5.6.4") + @RunWith(Parameterized::class) class BuildCacheRelocationIT : BaseGradleIT() { override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.AtLeast("5.6.4") + get() = DEFAULT_GRADLE_VERSION override fun defaultBuildOptions(): BuildOptions = super.defaultBuildOptions().copy( @@ -51,7 +53,7 @@ class BuildCacheRelocationIT : BaseGradleIT() { val (firstProject, secondProject) = (0..1).map { id -> workingDir = workingDirs[id] - Project(projectName, directoryPrefix = projectDirectoryPrefix).apply { + Project(projectName, directoryPrefix = projectDirectoryPrefix, gradleVersionRequirement = gradleVersionRequired).apply { setupWorkingDir() initProject() prepareLocalBuildCache(localBuildCacheDirectory) @@ -69,7 +71,13 @@ class BuildCacheRelocationIT : BaseGradleIT() { } workingDir = workingDirs[1] - secondProject.build(*testCase.taskToExecute) { + val alternateBuildEnvOptions = if (withAnotherGradleHome) { + val alternateGradleHome = File(firstProject.projectDir.parentFile, "gradleUserHome") + defaultBuildOptions().copy(gradleUserHome = alternateGradleHome) + } else { + defaultBuildOptions() + } + secondProject.build(*testCase.taskToExecute, options = alternateBuildEnvOptions) { assertSuccessful() val secondOutputHashes = hashOutputFiles(outputRoots) assertEquals(firstOutputHashes, secondOutputHashes) @@ -86,8 +94,10 @@ class BuildCacheRelocationIT : BaseGradleIT() { val cacheableTaskNames: List, val projectDirectoryPrefix: String? = null, val outputRootPaths: List = listOf("build"), - val initProject: Project.() -> Unit = { }, - val taskToExecute: Array + val initProject: Project.() -> Unit = {}, + val taskToExecute: Array, + val withAnotherGradleHome: Boolean = false, + val gradleVersionRequired: GradleVersionRequired = DEFAULT_GRADLE_VERSION ) { override fun toString(): String = (projectDirectoryPrefix?.plus("/") ?: "") + projectName @@ -158,7 +168,24 @@ class BuildCacheRelocationIT : BaseGradleIT() { }, outputRootPaths = listOf("app/build"), initProject = { File(projectDir, "app/build.gradle").appendText("\nkapt.useBuildCache = true") } - ) + ), + TestCase("native-build-cache", + taskToExecute = arrayOf("build-cache-lib:publish", "build-cache-app:assemble"), + cacheableTaskNames = listOf("build-cache-lib:compileKotlinHost", "build-cache-app:compileKotlinHost", + "build-cache-app:lib-module:compileKotlinHost", + "build-cache-app:linkDebugStaticHost", "build-cache-app:linkDebugSharedHost"), + outputRootPaths = listOf("build-cache-app/build", "build-cache-lib/build", "build-cache-app/lib-module/build"), + initProject = { + val localRepoUri = projectDir.resolve("repo").toURI() + val buildKtsApp = projectDir.resolve("build-cache-app").resolve("build.gradle.kts") + val buildKtsLib = projectDir.resolve("build-cache-lib").resolve("build.gradle.kts") + buildKtsApp.appendText("\nrepositories { maven { setUrl(\"$localRepoUri\") } }") + buildKtsApp.modify(::transformBuildScriptWithPluginsDsl) + buildKtsLib.modify(::transformBuildScriptWithPluginsDsl) + }, + withAnotherGradleHome = true, + gradleVersionRequired = GradleVersionRequired.FOR_MPP_SUPPORT + ), ).map { arrayOf(it) } } 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 497ecfedf8b..f5e6a2feb19 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 @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WA import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_PROPERTY_WARNING import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_WARNING import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind -import org.jetbrains.kotlin.gradle.prepareLocalBuildCache import org.jetbrains.kotlin.gradle.transformProjectWithPluginsDsl import org.jetbrains.kotlin.gradle.util.isWindows import org.jetbrains.kotlin.gradle.util.modify @@ -26,7 +25,6 @@ import org.junit.Assume import org.junit.Ignore import org.junit.Test import java.io.File -import java.nio.file.Files import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -88,8 +86,6 @@ class GeneralNativeIT : BaseGradleIT() { val nativeHostTargetName = MPPNativeTargets.current - private val buildCacheEnabledOptions = super.defaultBuildOptions().copy(withBuildCache = true) - private fun Project.targetClassesDir(targetName: String, sourceSetName: String = "main") = classesDir(sourceSet = "$targetName/$sourceSetName") @@ -142,8 +138,6 @@ class GeneralNativeIT : BaseGradleIT() { @Test fun testCanProduceNativeLibraries() = with(transformNativeTestProjectWithPluginDsl("libraries", directoryPrefix = "native-binaries")) { - prepareLocalBuildCache() - val baseName = "native_library" val sharedPrefix = CompilerOutputKind.DYNAMIC.prefix(HostManager.host) @@ -180,16 +174,9 @@ class GeneralNativeIT : BaseGradleIT() { val klibTask = ":compileKotlinHost" - // Building to local build cache - build("assemble", options = buildCacheEnabledOptions) { + build(":assemble") { assertSuccessful() assertTasksExecuted(linkTasks + klibTask) - } - - // Retrieving from build cache - build(":clean", ":assemble", options = buildCacheEnabledOptions) { - assertSuccessful() - assertTasksRetrievedFromCache(linkTasks + klibTask) sharedPaths.forEach { assertFileExists(it) } staticPaths.forEach { assertFileExists(it) } @@ -225,7 +212,6 @@ class GeneralNativeIT : BaseGradleIT() { data class BinaryMeta(val name: String, val isStatic: Boolean = false) - val baseName = "main" val frameworkPrefix = CompilerOutputKind.FRAMEWORK.prefix(HostManager.host) val frameworkSuffix = CompilerOutputKind.FRAMEWORK.suffix(HostManager.host) val targets = listOf("ios", "iosSim") @@ -841,93 +827,4 @@ class GeneralNativeIT : BaseGradleIT() { } } } - - @Test - fun testNativeDependenciesBuildCache() { - val libProject = transformNativeTestProjectWithPluginDsl("build-cache-lib", directoryPrefix = "native-build-cache") - val appProject = transformNativeTestProjectWithPluginDsl("build-cache-app", directoryPrefix = "native-build-cache") - val appProjectAltPath = Project("build-cache-app2", directoryPrefix = "native-build-cache") - - val libLocalRepoUri = libProject.projectDir.resolve("repo").toURI() - - with(libProject) { - prepareLocalBuildCache() - - val compileTask = ":compileKotlinHost" - - build("assemble", options = buildCacheEnabledOptions) { - assertSuccessful() - assertTasksExecuted(compileTask) - } - - build("clean", "publish", options = buildCacheEnabledOptions) { - assertSuccessful() - assertTasksRetrievedFromCache(compileTask) - } - } - - val compileAppTasks = listOf( - ":compileKotlinHost", - ":lib-module:compileKotlinHost", - ) - - with(appProject) { - prepareLocalBuildCache() - - val klibPrefix = CompilerOutputKind.LIBRARY.prefix(HostManager.host) - val klibSuffix = CompilerOutputKind.LIBRARY.suffix(HostManager.host) - val klibPaths = listOf( - "${targetClassesDir("host")}${klibPrefix}app$klibSuffix", - "lib-module/${targetClassesDir("host")}${klibPrefix}lib-module$klibSuffix", - ) - - gradleBuildScript().appendText("\nrepositories { maven { setUrl(\"$libLocalRepoUri\") } }") - - build("assemble", options = buildCacheEnabledOptions) { - assertSuccessful() - assertTasksExecuted(compileAppTasks) - klibPaths.forEach { assertFileExists(it) } - } - - build("clean", "assemble", options = buildCacheEnabledOptions) { - assertSuccessful() - assertTasksRetrievedFromCache(compileAppTasks) - klibPaths.forEach { assertFileExists(it) } - } - - assertTrue(projectDir.resolve(klibPaths[0]).delete()) - - build("clean", ":lib-module:assemble") { - assertSuccessful() - assertTasksExecuted(compileAppTasks[1]) - } - - build("assemble", options = buildCacheEnabledOptions) { - assertSuccessful() - assertTasksRetrievedFromCache(compileAppTasks[0]) - assertTasksUpToDate(compileAppTasks[1]) - klibPaths.forEach { assertFileExists(it) } - } - - build("clean") { - assertSuccessful() - } - } - - Files.move(appProject.projectDir.toPath(), appProjectAltPath.projectDir.toPath()) - - // It's very time-consuming check so on Mac TC agent we test only source relocation - val alternateBuildEnvOptions = if (isTeamCityRun && HostManager.hostIsMac) { - buildCacheEnabledOptions - } else { - val alternateGradleHome = File(appProject.projectDir.parentFile, "gradleUserHome") - buildCacheEnabledOptions.copy(gradleUserHome = alternateGradleHome) - } - with(appProjectAltPath) { - build("assemble", options = alternateBuildEnvOptions) { - assertSuccessful() - assertTasksRetrievedFromCache(compileAppTasks) - } - } - } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/build.gradle.kts index c3f0b1c85d8..a45ca8579aa 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/build.gradle.kts @@ -8,13 +8,18 @@ repositories { } kotlin { - ("host") + linuxX64("host") { + binaries { + sharedLib(listOf(DEBUG)) + staticLib(listOf(DEBUG)) + } + } sourceSets { val hostMain by getting { dependencies { implementation("com.example:build-cache-lib:1.0") - api(project(":lib-module")) + api(project(":build-cache-app:lib-module")) } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/lib-module/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/lib-module/build.gradle.kts index 190deb5c47d..abed0d77a58 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/lib-module/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/lib-module/build.gradle.kts @@ -8,5 +8,5 @@ repositories { } kotlin { - ("host") + linuxX64("host") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-lib/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-lib/build.gradle.kts index 0b4d38a4e94..c50ad94133f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-lib/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-lib/build.gradle.kts @@ -12,11 +12,11 @@ repositories { } kotlin { - ("host") + linuxX64("host") } publishing { repositories { - maven(url = "file://${projectDir.absolutePath.replace('\\', '/')}/repo") + maven(url = "file://${projectDir.absolutePath.replace('\\', '/')}/../repo") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-lib/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-lib/settings.gradle deleted file mode 100644 index 9f205d955cb..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-lib/settings.gradle +++ /dev/null @@ -1,7 +0,0 @@ -pluginManagement { - repositories { - mavenLocal() - jcenter() - gradlePluginPortal() - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/settings.gradle similarity index 59% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/settings.gradle rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/settings.gradle index b5f45925717..aa0386a26ec 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/build-cache-app/settings.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-build-cache/settings.gradle @@ -6,5 +6,4 @@ pluginManagement { } } -include ":lib-module" -rootProject.name = "app" \ No newline at end of file +include ':build-cache-app:lib-module', ':build-cache-app', ':build-cache-lib' \ No newline at end of file