From d4953cb51a157cf42e47db630b97d08bbb69f0f9 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 25 Nov 2021 18:52:35 +0300 Subject: [PATCH] [Gradle, JS] Separately add arguments for kotlin npm install ^KT-49902 fixed --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 54 +++++++++++++++++-- .../gradle/targets/js/yarn/YarnBasics.kt | 10 ++-- .../gradle/targets/js/yarn/YarnPlugin.kt | 1 + 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 924b649b55c..5789bb9fb82 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -28,10 +28,7 @@ import org.junit.jupiter.api.condition.DisabledIf import java.nio.file.Files import java.nio.file.Paths import java.util.zip.ZipFile -import kotlin.io.path.appendText -import kotlin.io.path.extension -import kotlin.io.path.name -import kotlin.io.path.readText +import kotlin.io.path.* import kotlin.streams.toList import kotlin.test.assertEquals import kotlin.test.assertFalse @@ -1084,4 +1081,53 @@ class GeneralKotlin2JsGradlePluginIT : KGPBaseTest() { } } } + + @DisplayName("Yarn ignore scripts") + @GradleTest + fun testYarnIgnoreScripts(gradleVersion: GradleVersion) { + project("nodeJsDownload", gradleVersion) { + buildGradleKts.modify { + it + "\n" + + """ + dependencies { + implementation(npm("puppeteer", "11.0.0")) + } + """.trimIndent() + } + build("assemble") { + assert( + projectPath + .resolve("build") + .resolve("js") + .resolve("node_modules") + .resolve("puppeteer") + .resolve(".local-chromium") + .notExists() + ) { + "Chromium should not be installed with --ignore-scripts" + } + } + buildGradleKts.modify { + it + "\n" + + """ + rootProject.plugins.withType { + rootProject.the().ignoreScripts = false + } + """.trimIndent() + } + + build("clean") + + build("assemble") { + assertDirectoryExists( + projectPath + .resolve("build") + .resolve("js") + .resolve("node_modules") + .resolve("puppeteer") + .resolve(".local-chromium") + ) + } + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt index fa3bdae0c0f..daa1d1f73aa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt @@ -35,9 +35,13 @@ abstract class YarnBasics : NpmApi { args: List ) { services.execWithProgress(description) { exec -> - val arguments = args + - if (logger.isDebugEnabled) "--verbose" else "" + - if (yarn.ignoreScripts) "--ignore-scripts" else "" + val arguments = args + .plus( + if (logger.isDebugEnabled) "--verbose" else "" + ) + .plus( + if (yarn.ignoreScripts) "--ignore-scripts" else "" + ).filter { it.isNotEmpty() } val nodeExecutable = nodeJs.nodeExecutable exec.environment( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt index 856a8f5be34..3f9519f7b69 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt @@ -54,6 +54,7 @@ open class YarnPlugin : Plugin { kotlinNpmInstall.configure { it.dependsOn(rootPackageJson) it.dependsOn(setupTask) + it.inputs.property("ignoreScripts", { yarnRootExtension.ignoreScripts }) } tasks.register("yarn" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {