Enable use of deploy version for Kotlin Native in TeamCity
With this, versions.kotlin-native is set to the version of artifacts
in current build by default.
The tests that used the fallback version of Kotlin Native are switched
to work with Kotlin Native from local repo set up by TeamCity.
There are tests that rely on Kotlin Native being unpacked
in the project configuration stage. This is broken when using Maven repo
so a workaround is applied.
KTI-2342
KTI-2238
diff --git a/build.gradle.kts b/build.gradle.kts
index 7c65890..d2c7331 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -111,8 +111,9 @@
IdeVersionConfigurator.setCurrentIde(project)
if (!project.hasProperty("versions.kotlin-native")) {
- // BEWARE! Bumping this version doesn't take an immediate effect on TeamCity: KTI-1107
- extra["versions.kotlin-native"] = if (kotlinBuildProperties.isKotlinNativeEnabled) {
+ extra["versions.kotlin-native"] = if (kotlinBuildProperties.isTeamcityBuild) {
+ kotlinVersion
+ } else if (kotlinBuildProperties.isKotlinNativeEnabled) {
kotlinBuildProperties.defaultSnapshotVersion
} else {
"2.2.20-dev-5253"
diff --git a/libraries/tools/kotlin-compose-compiler/src/functionalTest/kotlin/org/jetbrains/kotlin/compose/compiler/gradle/testUtils/functionalTestDsl.kt b/libraries/tools/kotlin-compose-compiler/src/functionalTest/kotlin/org/jetbrains/kotlin/compose/compiler/gradle/testUtils/functionalTestDsl.kt
index 979c270..ec5f9c3 100644
--- a/libraries/tools/kotlin-compose-compiler/src/functionalTest/kotlin/org/jetbrains/kotlin/compose/compiler/gradle/testUtils/functionalTestDsl.kt
+++ b/libraries/tools/kotlin-compose-compiler/src/functionalTest/kotlin/org/jetbrains/kotlin/compose/compiler/gradle/testUtils/functionalTestDsl.kt
@@ -24,7 +24,6 @@
.build()
.also {
it.enableDependencyVerification(false)
- disableDownloadingKonanFromMavenCentral(it)
}
.apply(configureProject)
.let { it as ProjectInternal }
@@ -54,11 +53,6 @@
inline val ExtensionAware.extraProperties: ExtraPropertiesExtension
get() = extensions.extraProperties
-// TODO(Dmitrii Krasnov): we can remove this, when downloading konan from maven local will be possible KT-63198
-internal fun disableDownloadingKonanFromMavenCentral(project: Project) {
- project.extraProperties.set("kotlin.native.distribution.downloadFromMaven", "false")
-}
-
fun Project.applyKotlinJvmPlugin() {
project.plugins.apply(KotlinPluginWrapper::class.java)
}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWithConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWithConfigurationCacheIT.kt
index 0a3cb89..b0da264 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWithConfigurationCacheIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeWithConfigurationCacheIT.kt
@@ -31,7 +31,7 @@
// We need to download compiler on the first build, that is why we are setting custom konan home dir without any compiler inside
konanDataDir = workingDir.resolve(".konan"),
nativeOptions = defaultBuildOptions.nativeOptions.copy(
- version = null,
+ version = "2.1.21", // an arbitrary release version
distributionDownloadFromMaven = false, // please, remove the whole test, when this flag will be removed
),
),
diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
index 291eabb..ffe5f7f 100644
--- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
@@ -590,6 +590,11 @@
events("passed", "skipped", "failed")
}
+ val mavenLocalRepo = project.providers.systemProperty("maven.repo.local").orNull
+ if (mavenLocalRepo != null) {
+ systemProperty("maven.repo.local", mavenLocalRepo)
+ }
+
systemProperty("resourcesPath", layout.projectDirectory.dir("src/functionalTest/resources").asFile)
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt
index bd8b701..00e1863 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt
@@ -13,13 +13,20 @@
import org.jetbrains.kotlin.gradle.internal.properties.nativeProperties
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.IdeNativePlatformDependencyResolver
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
+import org.jetbrains.kotlin.gradle.util.provisionKotlinNativeDistribution
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget.LINUX_X64
import org.jetbrains.kotlin.konan.target.KonanTarget.MACOS_ARM64
import org.junit.Assume
+import org.junit.Before
import kotlin.test.Test
class IdeNativePlatformDependencyResolverTest {
+ // workaround for tests that don't unpack Kotlin Native when using local repo: KT-77580
+ @Before
+ fun setUp() {
+ provisionKotlinNativeDistribution()
+ }
@Test
fun `test - posix on linux`() {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativeStdlibResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativeStdlibResolverTest.kt
index 14a436f..bac6493 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativeStdlibResolverTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativeStdlibResolverTest.kt
@@ -13,9 +13,16 @@
import org.jetbrains.kotlin.gradle.internal.properties.nativeProperties
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.IdeNativeStdlibDependencyResolver
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
+import org.jetbrains.kotlin.gradle.util.provisionKotlinNativeDistribution
+import org.junit.Before
import org.junit.Test
class IdeNativeStdlibResolverTest {
+ // workaround for tests that don't unpack Kotlin Native when using local repo: KT-77580
+ @Before
+ fun setUp() {
+ provisionKotlinNativeDistribution()
+ }
@Test
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt
index f17acb2..8519822 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt
@@ -23,11 +23,18 @@
import org.jetbrains.kotlin.gradle.util.buildProject
import org.jetbrains.kotlin.gradle.util.enableDefaultStdlibDependency
import org.jetbrains.kotlin.gradle.util.enableDependencyVerification
+import org.jetbrains.kotlin.gradle.util.provisionKotlinNativeDistribution
+import org.junit.Before
import kotlin.test.Test
import kotlin.test.fail
import kotlin.text.Regex.Companion.escape
class IdeSourcesAndDocumentationResolutionTest {
+ // workaround for tests that don't unpack Kotlin Native when using local repo: KT-77580
+ @Before
+ fun setUp() {
+ provisionKotlinNativeDistribution()
+ }
@Test
fun `test - MVIKotlin`() {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeStdlibResolutionTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeStdlibResolutionTest.kt
index 9feacb9..3d85b54 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeStdlibResolutionTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeStdlibResolutionTest.kt
@@ -25,10 +25,17 @@
import org.jetbrains.kotlin.gradle.util.configureDefaults
import org.jetbrains.kotlin.gradle.util.enableDefaultStdlibDependency
import org.jetbrains.kotlin.gradle.util.enableDependencyVerification
+import org.jetbrains.kotlin.gradle.util.provisionKotlinNativeDistribution
import org.jetbrains.kotlin.gradle.utils.androidExtension
+import org.junit.Before
import org.junit.Test
class IdeStdlibResolutionTest {
+ // workaround for tests that don't unpack Kotlin Native when using local repo: KT-77580
+ @Before
+ fun setUp() {
+ provisionKotlinNativeDistribution()
+ }
@Test
fun `test single jvm target`() {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/MultiplatformSecondaryOutgoingVariantsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/MultiplatformSecondaryOutgoingVariantsTest.kt
index 1754008..153e72e 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/MultiplatformSecondaryOutgoingVariantsTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/MultiplatformSecondaryOutgoingVariantsTest.kt
@@ -65,6 +65,7 @@
wasmWasi()
applyDefaultHierarchyTemplate()
}
+ repositories.mavenLocal()
}
code(project)
if (evaluate) {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/buildProject.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/buildProject.kt
index 2080092..8e34f1d 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/buildProject.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/buildProject.kt
@@ -53,7 +53,6 @@
.apply(projectBuilder)
.build()
.also {
- disableDownloadingKonanFromMavenCentral(it)
it.enableDependencyVerification(false)
}
.apply(configureProject)
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/ideDependencyResolutionTestUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/ideDependencyResolutionTestUtils.kt
index 2641f19..45b08b0 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/ideDependencyResolutionTestUtils.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/ideDependencyResolutionTestUtils.kt
@@ -5,7 +5,16 @@
package org.jetbrains.kotlin.gradle.util
+import org.gradle.kotlin.dsl.maven
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates
+import org.jetbrains.kotlin.gradle.internal.properties.nativeProperties
+import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
+import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
+import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
+import org.jetbrains.kotlin.gradle.plugin.await
+import org.jetbrains.kotlin.gradle.plugin.kotlinPluginLifecycle
+import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeCompilation
+import org.jetbrains.kotlin.gradle.targets.native.internal.retrievePlatformDependencies
/**
* Legacy -jdk8 and -jdk7 dependencies:
@@ -21,3 +30,58 @@
binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$version"),
binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$version"),
)
+
+/**
+ * Download and unpack Kotlin Native distribution
+ *
+ * This is a workaround for the issue where Kotlin Native isn't unpacked into ~/.konan dir when used from local Maven repo: KT-77580
+ * as opposed to CDN where it happens in the project configuration phase.
+ * It should be run before tests that check dependencies in ~/.konan.
+ * The project in this function is created only to trigger downloading and unpacking Kotlin Native
+ * and isn't supposed to be used otherwise.
+ */
+fun provisionKotlinNativeDistribution() {
+ val project = buildProjectWithMPP {
+ if (project.nativeProperties.actualNativeHomeDirectory.get().exists()) return@buildProjectWithMPP
+
+ // For CI
+ repositories.mavenLocal()
+ // For local runs
+ repositories.maven("https://packages.jetbrains.team/maven/p/kt/bootstrap")
+ // Remove after KTI-1994
+ listOf(
+ "https://download.jetbrains.com/kotlin/native/builds/releases",
+ "https://download.jetbrains.com/kotlin/native/builds/dev",
+ ).forEach { repoUrl ->
+ repositories.ivy {
+ it.url = project.uri(repoUrl)
+ it.patternLayout {
+ it.artifact("[revision]/[classifier]/[artifact]-[classifier]-[revision].[ext]")
+ }
+ it.metadataSources {
+ it.artifact()
+ }
+ }
+ }
+
+ kotlin {
+ iosArm64()
+ iosX64()
+ linuxX64()
+ linuxArm64()
+ mingwX64()
+ kotlinPluginLifecycle.launch {
+ KotlinPluginLifecycle.Stage.ReadyForExecution.await()
+ val downloadDependencies = project.files()
+ targets.filter { it.platformType != KotlinPlatformType.common }.forEach {
+ downloadDependencies.from(
+ (it.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) as AbstractKotlinNativeCompilation)
+ .retrievePlatformDependencies()
+ )
+ }
+ downloadDependencies.files
+ }
+ }
+ }
+ project.evaluate()
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/propertiesUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/propertiesUtils.kt
deleted file mode 100644
index 9dcf982..0000000
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/propertiesUtils.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
- * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
- */
-
-package org.jetbrains.kotlin.gradle.util
-
-import org.gradle.api.Project
-import org.jetbrains.kotlin.gradle.plugin.extraProperties
-
-// TODO(Dmitrii Krasnov): we can remove this, when downloading konan from maven local will be possible KT-63198
-internal fun disableDownloadingKonanFromMavenCentral(project: Project) {
- project.extraProperties.set("kotlin.native.distribution.downloadFromMaven", "false")
-}
\ No newline at end of file