diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts index 5df4934db65..1b5896b6620 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts @@ -1,7 +1,5 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile -import org.jetbrains.kotlin.konan.target.HostManager -import org.jetbrains.kotlin.konan.target.KonanTarget import java.nio.file.Paths plugins { @@ -150,11 +148,38 @@ tasks.register("prepareNativeBundleForGradleIT") { description = "This task adds dependency on :kotlin-native:bundle" if (project.kotlinBuildProperties.isKotlinNativeEnabled) { - // 1. Build full Kotlin Native bundle + // Build full Kotlin Native bundle dependsOn(":kotlin-native:bundle") } } +tasks.register("createProvisionedOkFiles") { + + description = "This task creates `provisioned.ok` file for each preconfigured k/n native bundle." + + "Kotlin/Native bundle can be prepared in two ways:" + + "`prepareNativeBundleForGradleIT` task for local environment and `Compiler Dist: full bundle` build for CI environment." + + val prepareNativeBundleTaskName = ":kotlin-gradle-plugin-integration-tests:prepareNativeBundleForGradleIT" + val taskExists = project.tasks.findByPath(prepareNativeBundleTaskName) != null + if (taskExists) { + mustRunAfter(prepareNativeBundleTaskName) + } + + val konanDistributions = File(konanDataDir) + + doLast { + konanDistributions + .walkTopDown().maxDepth(1) + .filter { file -> file != konanDistributions } + .filter { file -> file.isDirectory } + .toSet() + .forEach { + File(it, "provisioned.ok").createNewFile() + } + } + +} + fun Test.includeMppAndAndroid(include: Boolean) = includeTestsWithPattern(include) { addAll(listOf("*Multiplatform*", "*Mpp*", "*Android*")) } @@ -164,7 +189,8 @@ fun Test.includeNative(include: Boolean) = includeTestsWithPattern(include) { } fun Test.applyKotlinNativeFromCurrentBranchIfNeeded() { - val kotlinNativeFromMasterEnabled = project.kotlinBuildProperties.isKotlinNativeEnabled && project.kotlinBuildProperties.useKotlinNativeLocalDistributionForTests + val kotlinNativeFromMasterEnabled = + project.kotlinBuildProperties.isKotlinNativeEnabled && project.kotlinBuildProperties.useKotlinNativeLocalDistributionForTests //add native bundle dependencies for local test run if (kotlinNativeFromMasterEnabled && !project.kotlinBuildProperties.isTeamcityBuild) { @@ -185,6 +211,7 @@ fun Test.applyKotlinNativeFromCurrentBranchIfNeeded() { } systemProperty("konanDataDirForIntegrationTests", konanDataDir) } + dependsOn(":kotlin-gradle-plugin-integration-tests:createProvisionedOkFiles") } fun Test.includeTestsWithPattern(include: Boolean, patterns: (MutableSet).() -> Unit) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeCompilerDownloadIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeCompilerDownloadIT.kt index c46bfc56f2a..080e9057713 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeCompilerDownloadIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeCompilerDownloadIT.kt @@ -77,6 +77,7 @@ class KotlinNativeCompilerDownloadIT : KGPBaseTest() { assertOutputDoesNotContain(DOWNLOAD_KONAN_FINISHED_LOG) assertOutputContains(UNPUCK_KONAN_FINISHED_LOG) assertOutputDoesNotContain("Please wait while Kotlin/Native") + assertFileExists(konanTemp.resolve(STABLE_VERSION_DIR_NAME).resolve("provisioned.ok")) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt index 0a995414721..b8a0c6c5fdc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt @@ -40,7 +40,7 @@ import java.nio.file.attribute.PosixFilePermission import java.util.zip.GZIPInputStream import javax.inject.Inject -private const val KONAN_DIRECTORY_NAME_TO_CHECK_EXISTENCE = "konan" +private const val MARKER_FILE = "provisioned.ok" internal interface UsesKotlinNativeBundleBuildService : Task { @get:Internal @@ -106,7 +106,7 @@ internal abstract class KotlinNativeBundleBuildService : BuildService