From f8507d522006a4c9306997432c9839ea8adc0df4 Mon Sep 17 00:00:00 2001 From: Dmitrii Krasnov Date: Fri, 3 Nov 2023 17:58:39 +0100 Subject: [PATCH] [Gradle, Native] Switched downloading k/n to from Maven Central in KGP #KT-62907 Fixed --- .../jetbrains/kotlin/gradle/BaseGradleIT.kt | 6 +++ .../kotlin/gradle/native/GeneralNativeIT.kt | 52 +++++++------------ .../native/NativeDownloadAndPlatformLibsIT.kt | 47 +++-------------- .../kotlin/gradle/testbase/BuildOptions.kt | 3 +- .../kotlin/gradle/testbase/TestVersions.kt | 2 +- .../native-download-maven/build.gradle.kts | 1 - .../gradle/plugin/PropertiesProvider.kt | 2 +- .../native/NativeCompilerDownloader.kt | 4 +- .../kotlin/gradle/util/buildProject.kt | 4 +- .../kotlin/gradle/util/propertiesUtils.kt | 14 +++++ .../kotlin/commonizer/utils/konanHome.kt | 4 ++ 11 files changed, 57 insertions(+), 82 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/propertiesUtils.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index f6b41e0dc6e..8d169d62d5c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -275,6 +275,8 @@ abstract class BaseGradleIT { val showDiagnosticsStacktrace: Boolean? = false, // false by default to not clutter the testdata + stacktraces change often val stacktraceMode: String? = StacktraceOption.FULL_STACKTRACE_LONG_OPTION, val konanDataDir: Path = konanDir, + // TODO(Dmitrii Krasnov): we can remove this, when downloading konan from maven local will be possible KT-63198 + val distributionDownloadFromMaven: Boolean? = false, ) { val safeAndroidGradlePluginVersion: AGPVersion get() = androidGradlePluginVersion ?: error("AGP version is expected to be set") @@ -1004,6 +1006,10 @@ abstract class BaseGradleIT { add("-Pkonan.data.dir=${options.konanDataDir.absolutePathString().normalize()}") + options.distributionDownloadFromMaven?.let { + add("-Pkotlin.native.distribution.downloadFromMaven=${it}") + } + // Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3): add("--console=plain") //The feature of failing the build on deprecation warnings is introduced in gradle 5.6 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 551b0fdb9d4..6b5b76efa94 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 @@ -810,45 +810,29 @@ class GeneralNativeIT : KGPBaseTest() { } @DisplayName("Checks builds with changing compiler version") - @OptIn(EnvironmentalVariablesOverride::class) - @GradleTestVersions(minVersion = TestVersions.Gradle.G_7_0) + @GradleTestVersions @GradleTest fun testCompilerVersionChange(gradleVersion: GradleVersion) { - if (KotlinToolingVersion(TestVersions.Kotlin.STABLE_RELEASE) < KotlinToolingVersion("1.9.20-Beta")) { - val konanDataDir = defaultBuildOptions.konanDataDir?.toAbsolutePath()?.normalize()?.absolutePathString() - ?: error("konanDataDir must not be null in this test. Please set a custom konanDataDir property.") + nativeProject("native-compiler-version", gradleVersion) { + val compileTasks = ":compileKotlinHost" - nativeProject( - "native-compiler-version", - gradleVersion, - environmentVariables = EnvironmentalVariables(mapOf("KONAN_DATA_DIR" to konanDataDir)), - ) { - val compileTasks = ":compileKotlinHost" - - build(compileTasks) { - assertTasksExecuted(compileTasks) - } - - build(compileTasks) { - assertTasksUpToDate(compileTasks) - } - - // Check that changing K/N version lead to tasks rerun - build( - compileTasks, buildOptions = defaultBuildOptions.copy( - nativeOptions = defaultBuildOptions.nativeOptions.copy(version = TestVersions.Kotlin.STABLE_RELEASE) - ) - ) { - assertTasksExecuted(compileTasks) - } + build(compileTasks) { + assertTasksExecuted(compileTasks) } - } else { - fail( - "Please remove setting KONAN_DATA_DIR environment variable," + - " because Kotlin stable release now supports konan.data.dir Gradle property." - ) - } + build(compileTasks) { + assertTasksUpToDate(compileTasks) + } + + // Check that changing K/N version lead to tasks rerun + build( + compileTasks, buildOptions = defaultBuildOptions.copy( + nativeOptions = defaultBuildOptions.nativeOptions.copy(version = TestVersions.Kotlin.STABLE_RELEASE) + ) + ) { + assertTasksExecuted(compileTasks) + } + } } @DisplayName("Assert that a project with a native target can be configure") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeDownloadAndPlatformLibsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeDownloadAndPlatformLibsIT.kt index 56c5a6ab799..c2b0ee4ec65 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeDownloadAndPlatformLibsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeDownloadAndPlatformLibsIT.kt @@ -9,15 +9,10 @@ import org.gradle.testkit.runner.BuildResult import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics import org.jetbrains.kotlin.gradle.testbase.* -import org.jetbrains.kotlin.gradle.util.replaceFirst import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader 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.tooling.core.KotlinToolingVersion -import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion.Maturity.* -import org.jetbrains.kotlin.tooling.core.buildNumber -import org.junit.jupiter.api.Assumptions import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.condition.OS import org.junit.jupiter.api.io.TempDir @@ -34,11 +29,6 @@ import kotlin.io.path.appendText @NativeGradlePluginTests class NativeDownloadAndPlatformLibsIT : KGPBaseTest() { - companion object { - private const val KOTLIN_SPACE_DEV = "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" - private const val MAVEN_CENTRAL = "https://cache-redirector.jetbrains.com/maven-central" - } - private val platformName: String = HostManager.platformName() private val currentCompilerVersion = NativeCompilerDownloader.DEFAULT_KONAN_VERSION @@ -215,20 +205,15 @@ class NativeDownloadAndPlatformLibsIT : KGPBaseTest() { @DisplayName("Download prebuilt Native bundle with maven") @GradleTest fun shouldDownloadPrebuiltNativeBundleWithMaven(gradleVersion: GradleVersion) { - val maven = mavenUrl() - Assumptions.assumeTrue( - maven != MAVEN_CENTRAL, - "Don't run this test for build that are not yet published to central.\n" + - " We won't public K/N into Maven central until this task is completed: KTI-1067" - ) nativeProject("native-download-maven", gradleVersion = gradleVersion) { - - buildGradleKts.replaceFirst("// ", "maven(\"${maven}\")") - build( "assemble", - buildOptions = defaultBuildOptions.copy(nativeOptions = defaultBuildOptions.nativeOptions.copy(distributionDownloadFromMaven = true)) + buildOptions = defaultBuildOptions.copy( + nativeOptions = defaultBuildOptions.nativeOptions.copy( + version = TestVersions.Kotlin.STABLE_RELEASE, + ) + ) ) { assertOutputContains("Unpack Kotlin/Native compiler to ") assertOutputDoesNotContain("Generate platform libraries for ") @@ -240,22 +225,14 @@ class NativeDownloadAndPlatformLibsIT : KGPBaseTest() { @RequiredXCodeVersion(minSupportedMajor = 14, minSupportedMinor = 1) @GradleTest fun shouldDownloadLightNativeBundleWithMaven(gradleVersion: GradleVersion) { - val maven = mavenUrl() - Assumptions.assumeTrue( - maven != MAVEN_CENTRAL, - "Don't run this test for build that are not yet published to central.\n" + - " We won't public K/N into Maven central until this task is completed: KTI-1067" - ) - nativeProject("native-download-maven", gradleVersion = gradleVersion) { - buildGradleKts.replaceFirst("// ", "maven(\"${maven}\")") val nativeOptions = defaultBuildOptions.nativeOptions.copy( distributionType = "light", - distributionDownloadFromMaven = true + version = TestVersions.Kotlin.STABLE_RELEASE, ) build( "assemble", - buildOptions = defaultBuildOptions.copy(nativeOptions = nativeOptions) + buildOptions = defaultBuildOptions.copy(nativeOptions = nativeOptions), ) { assertOutputContains("Unpack Kotlin/Native compiler to ") assertOutputContains("Generate platform libraries for ") @@ -370,14 +347,4 @@ class NativeDownloadAndPlatformLibsIT : KGPBaseTest() { assertions = assertions ) - private fun mavenUrl(): String { - val kotlinToolingVersion = KotlinToolingVersion(currentCompilerVersion) - val maturity = kotlinToolingVersion.maturity - val buildNumber = kotlinToolingVersion.buildNumber - return when { - maturity == DEV || buildNumber != null -> KOTLIN_SPACE_DEV - else -> MAVEN_CENTRAL - } - } - } 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 f4ed284273d..a6fe8bf3501 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 @@ -86,7 +86,8 @@ data class BuildOptions( val cocoapodsConfiguration: String? = null, val cocoapodsArchs: String? = null, val distributionType: String? = null, - val distributionDownloadFromMaven: Boolean? = null, + // TODO(Dmitrii Krasnov): we can change false on null, when downloading konan from maven local will be possible KT-63198 + val distributionDownloadFromMaven: Boolean? = false, val reinstall: Boolean? = null, val restrictedDistribution: Boolean? = null, val useXcodeMessageStyle: Boolean? = null, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt index f5b7b2ab40b..947268031e9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/TestVersions.kt @@ -34,7 +34,7 @@ interface TestVersions { } object Kotlin { - const val STABLE_RELEASE = "1.8.22" + const val STABLE_RELEASE = "1.9.20" // Copied from KOTLIN_VERSION.kt file val CURRENT diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-download-maven/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-download-maven/build.gradle.kts index 91948d85f7a..98579d984b3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-download-maven/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-download-maven/build.gradle.kts @@ -5,7 +5,6 @@ plugins { } repositories { - // mavenCentral() mavenLocal() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt index 902beaccaf8..56a2a0c7f9a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt @@ -283,7 +283,7 @@ internal class PropertiesProvider private constructor(private val project: Proje * Makes downloader search for bundles in maven repositories specified in the project. */ val nativeDownloadFromMaven: Boolean - get() = this.booleanProperty("kotlin.native.distribution.downloadFromMaven") ?: false + get() = this.booleanProperty("kotlin.native.distribution.downloadFromMaven") ?: true /** * Allows a user to provide a local Kotlin/Native distribution instead of a downloaded one. diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt index de137fe0a64..7eb16a2b472 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt @@ -133,7 +133,7 @@ class NativeCompilerDownloader( mapOf( "group" to KOTLIN_GROUP_ID, "name" to dependencyName, - "version" to compilerVersion.toString(), + "version" to compilerVersion, "classifier" to simpleOsName, "ext" to archiveExtension ) @@ -142,7 +142,7 @@ class NativeCompilerDownloader( project.dependencies.create( mapOf( "name" to "$dependencyName-$simpleOsName", - "version" to compilerVersion.toString(), + "version" to compilerVersion, "ext" to archiveExtension ) ) 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 11112192ddb..652e53b389e 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 @@ -14,8 +14,7 @@ import org.gradle.api.plugins.ExtraPropertiesExtension import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper -import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_INTRANSITIVE_METADATA_CONFIGURATION import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension @@ -32,6 +31,7 @@ fun buildProject( .build() //temporary solution for BuildEventsListenerRegistry .also { addBuildEventsListenerRegistryMock(it) } + .also { disableDownloadingKonanFromMavenCentral(it) } .apply(configureProject) .let { it as ProjectInternal } 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 new file mode 100644 index 00000000000..9dcf98273fc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/propertiesUtils.kt @@ -0,0 +1,14 @@ +/* + * 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 diff --git a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt index a61c6268620..c2268f6dcfd 100644 --- a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt +++ b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt @@ -9,6 +9,7 @@ import org.gradle.api.internal.project.ProjectInternal import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.extraProperties import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader import java.io.File @@ -19,6 +20,9 @@ internal val konanHome: File by lazy { .run { project.plugins.apply("kotlin-multiplatform") + // TODO(Dmitrii Krasnov): remove this, when KT-58303 is done + project.extraProperties.set("kotlin.native.distribution.downloadFromMaven","false") + (project.kotlinExtension as KotlinMultiplatformExtension).apply { macosX64() macosArm64()