[Gradle][KT-51583] Ensure jvm-ecosystem plugin is applied when NativeDistributionCommonizerTask is registered in root

^KT-51583 Verification Pending

https://github.com/gradle/gradle/issues/20145
This commit is contained in:
sebastian.sellmair
2022-08-09 10:00:18 +02:00
committed by Space
parent f713782737
commit 8fcbe9902c
2 changed files with 80 additions and 1 deletions
@@ -116,6 +116,15 @@ internal val Project.commonizeNativeDistributionTask: TaskProvider<NativeDistrib
return rootProject.locateOrRegisterTask(
"commonizeNativeDistribution",
invokeWhenRegistered = {
/**
* https://github.com/gradle/gradle/issues/13252
* https://github.com/gradle/gradle/issues/20145
* https://youtrack.jetbrains.com/issue/KT-51583
*/
if (rootProject.plugins.findPlugin("jvm-ecosystem") == null) {
rootProject.plugins.apply("jvm-ecosystem")
}
commonizeTask.dependsOn(this)
rootProject.commonizeTask.dependsOn(this)
cleanNativeDistributionCommonizerTask
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("FunctionName")
@file:Suppress("FunctionName", "DuplicatedCode")
package org.jetbrains.kotlin.gradle
@@ -11,12 +11,18 @@ import org.gradle.api.internal.project.ProjectInternal
import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
import kotlin.test.Test
import kotlin.test.assertNotNull
import kotlin.test.assertNull
class CommonizerTaskTests {
private val rootProject = ProjectBuilder.builder().build() as ProjectInternal
private val subproject = ProjectBuilder.builder().withName("subproject").withParent(rootProject).build() as ProjectInternal
companion object {
const val JVM_ECOSYSTEM_PLUGIN_ID = "jvm-ecosystem"
}
private val kotlin = subproject.applyMultiplatformPlugin().apply {
linuxX64()
linuxArm64()
@@ -58,6 +64,70 @@ class CommonizerTaskTests {
subproject.tasks.getByName("commonize").assertDependsOn(rootProjectCommonizeNativeDistributionTask)
}
/**
* Check if jvm-ecosystem plugin is applied when commonizer task is applied to the root project.
* Context: https://github.com/gradle/gradle/issues/20145
* https://youtrack.jetbrains.com/issue/KT-51583
*/
@Test
fun `test commonizeNativeDistributionTask applied jvm-ecosystem plugin`() {
val rootProject = ProjectBuilder.builder().build() as ProjectInternal
val subproject = ProjectBuilder.builder().withParent(rootProject).build() as ProjectInternal
val jvmEcosystemPluginId = "jvm-ecosystem"
assertNull(rootProject.plugins.findPlugin(jvmEcosystemPluginId))
val kotlin = subproject.applyMultiplatformPlugin()
assertNull(rootProject.plugins.findPlugin(jvmEcosystemPluginId))
kotlin.linuxArm64()
kotlin.linuxX64()
rootProject.evaluate()
subproject.evaluate()
assertNotNull(rootProject.plugins.findPlugin(jvmEcosystemPluginId))
}
@Test
fun `test commonizeNativeDistributionTask applied jvm-ecosystem plugin - jvm-ecosystem plugin is already applied`() {
val rootProject = ProjectBuilder.builder().build() as ProjectInternal
val subproject = ProjectBuilder.builder().withParent(rootProject).build() as ProjectInternal
rootProject.plugins.apply(JVM_ECOSYSTEM_PLUGIN_ID)
assertNotNull(rootProject.plugins.findPlugin(JVM_ECOSYSTEM_PLUGIN_ID))
val kotlin = subproject.applyMultiplatformPlugin()
kotlin.linuxArm64()
kotlin.linuxX64()
rootProject.evaluate()
subproject.evaluate()
assertNotNull(rootProject.plugins.findPlugin(JVM_ECOSYSTEM_PLUGIN_ID))
}
@Test
fun `test commonizeNativeDistributionTask applied jvm-ecosystem plugin - java plugin is already applied`() {
val rootProject = ProjectBuilder.builder().build() as ProjectInternal
val subproject = ProjectBuilder.builder().withParent(rootProject).build() as ProjectInternal
rootProject.plugins.apply("java")
assertNotNull(rootProject.plugins.findPlugin(JVM_ECOSYSTEM_PLUGIN_ID))
val kotlin = subproject.applyMultiplatformPlugin()
kotlin.linuxArm64()
kotlin.linuxX64()
rootProject.evaluate()
subproject.evaluate()
assertNotNull(rootProject.plugins.findPlugin(JVM_ECOSYSTEM_PLUGIN_ID))
}
@Test
fun `test commonizeCInteropTask`() {
val commonizeCInteropTaskName = "commonizeCInterop"