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 a09b7b62d5a..00eb884ddff 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 @@ -17,9 +17,9 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProjectModules import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson import org.jetbrains.kotlin.gradle.targets.js.npm.fromSrcPackageJson -import org.jetbrains.kotlin.gradle.targets.js.yarn.YARN_LOCK_MISMATCH_MESSAGE import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.STORE_YARN_LOCK_NAME import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.UPGRADE_YARN_LOCK +import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.YARN_LOCK_MISMATCH_MESSAGE import org.jetbrains.kotlin.gradle.tasks.USING_JS_INCREMENTAL_COMPILATION_MESSAGE import org.jetbrains.kotlin.gradle.tasks.USING_JS_IR_BACKEND_MESSAGE import org.jetbrains.kotlin.gradle.testbase.* @@ -1420,26 +1420,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) } buildGradleKts.modify { - val replaced = it.replace("implementation(npm(\"decamelize\", \"6.0.0\"))", "") - replaced + "\n" + - """ - rootProject.plugins.withType(org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin::class.java) { - rootProject.the().yarnLockMismatchReport = - org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport.FAIL_AFTER_BUILD - } - """.trimIndent() - } - - buildAndFail("compileKotlinJs") { - assertTasksExecuted(":$STORE_YARN_LOCK_NAME") - - assertOutputContains(YARN_LOCK_MISMATCH_MESSAGE) - } - - buildAndFail("compileKotlinJs") { - assertTasksUpToDate(":$STORE_YARN_LOCK_NAME") - - assertOutputContains(YARN_LOCK_MISMATCH_MESSAGE) + it.replace("implementation(npm(\"decamelize\", \"6.0.0\"))", "") } projectPath.resolve("kotlin-js-store").deleteRecursively() @@ -1488,25 +1469,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) } buildGradleKts.modify { - val replaced = it.replace("implementation(npm(\"decamelize\", \"6.0.0\"))", "") - replaced + "\n" + - """ - rootProject.plugins.withType(org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin::class.java) { - rootProject.the().yarnLockMismatchReport = - org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport.FAIL_AFTER_BUILD - } - """.trimIndent() - } - - buildAndFail("compileKotlinJs") { - assertTasksExecuted(":$STORE_YARN_LOCK_NAME") - - assertOutputContains(YARN_LOCK_MISMATCH_MESSAGE) - } - - //yarn.lock was updated - build("compileKotlinJs") { - assertTasksUpToDate(":$STORE_YARN_LOCK_NAME") + it.replace("implementation(npm(\"decamelize\", \"6.0.0\"))", "") } // check if everything ok without build/js/yarn.lock @@ -1517,6 +1480,17 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) build("clean") { assertTasksUpToDate(":clean") } + + buildAndFail("compileKotlinJs") { + assertTasksFailed(":$STORE_YARN_LOCK_NAME") + } + + projectPath.resolve("kotlin-js-store").deleteRecursively() + + //check if independent tasks can be executed + build("help") { + assertTasksExecuted(":help") + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLockCopyTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLockCopyTask.kt index 872f16bc34b..5ef519696a6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLockCopyTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLockCopyTask.kt @@ -50,13 +50,11 @@ abstract class YarnLockCopyTask : DefaultTask() { val STORE_YARN_LOCK_NAME = "kotlinStoreYarnLock" val RESTORE_YARN_LOCK_NAME = "kotlinRestoreYarnLock" val UPGRADE_YARN_LOCK = "kotlinUpgradeYarnLock" + val YARN_LOCK_MISMATCH_MESSAGE = "yarn.lock was changed. Run the `${YarnLockCopyTask.UPGRADE_YARN_LOCK}` task to actualize yarn.lock file" } } abstract class YarnLockStoreTask : YarnLockCopyTask() { - @get:Internal - abstract val yarnLockMismatchReportService: Property - @Input lateinit var yarnLockMismatchReport: Provider @@ -86,9 +84,6 @@ abstract class YarnLockStoreTask : YarnLockCopyTask() { logger.warn(YARN_LOCK_MISMATCH_MESSAGE) } YarnLockMismatchReport.FAIL -> throw GradleException(YARN_LOCK_MISMATCH_MESSAGE) - YarnLockMismatchReport.FAIL_AFTER_BUILD -> { - yarnLockMismatchReportService.get().failOnClose() - } else -> error("Unknown yarn.lock mismatch report kind") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLockMismatchReportService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLockMismatchReportService.kt deleted file mode 100644 index a1df18c9642..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnLockMismatchReportService.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2010-2022 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.targets.js.yarn - -import org.gradle.api.GradleException -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.Property -import org.gradle.api.services.BuildService -import org.gradle.api.services.BuildServiceParameters -import org.gradle.tooling.events.FinishEvent -import org.gradle.tooling.events.OperationCompletionListener -import org.jetbrains.kotlin.gradle.utils.contentEquals - -abstract class YarnLockMismatchReportService : BuildService, AutoCloseable, - OperationCompletionListener { - @Volatile - private var shouldFailOnClose: Boolean = false - - // Some parameters for the web server - internal interface Params : BuildServiceParameters { - val inputFile: RegularFileProperty - val outputFile: RegularFileProperty - val shouldFailOnClose: Property - val reportNewYarnLock: Property - } - - fun failOnClose() { - shouldFailOnClose = true - } - - override fun onFinish(event: FinishEvent?) { - // noop - } - - override fun close() { - if (!parameters.inputFile.get().asFile.exists()) { - return - } - - if (parameters.reportNewYarnLock.get() && !parameters.outputFile.get().asFile.exists()) { - throw GradleException(YARN_LOCK_MISMATCH_MESSAGE) - } - - if (shouldFailOnClose || parameters.shouldFailOnClose.get() && !contentEquals(parameters.inputFile.get().asFile, parameters.outputFile.get().asFile)) { - throw GradleException(YARN_LOCK_MISMATCH_MESSAGE) - } - } -} - -val YARN_LOCK_MISMATCH_MESSAGE = "yarn.lock was changed. Run the `${YarnLockCopyTask.UPGRADE_YARN_LOCK}` task to actualize yarn.lock file" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt index d5fe980c97c..916ed0f1171 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt @@ -73,29 +73,12 @@ open class YarnPlugin : Plugin { it.dependsOn(packageJsonUmbrella) } - val service = project.gradle.sharedServices - .registerIfAbsent("kotlin-store-yarn-lock-mismatch-reporter", YarnLockMismatchReportService::class.java) { - it.parameters.inputFile.set(nodeJs.rootPackageDir.resolve("yarn.lock")) - it.parameters.outputFile.set(yarnRootExtension.lockFileDirectory.resolve(yarnRootExtension.lockFileName)) - it.parameters.shouldFailOnClose.set( - provider { yarnRootExtension.requireConfigured().yarnLockMismatchReport == YarnLockMismatchReport.FAIL_AFTER_BUILD } - ) - it.parameters.reportNewYarnLock.set( - provider { yarnRootExtension.requireConfigured().reportNewYarnLock } - ) - } - - BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry - .onTaskCompletion(service) - val storeYarnLock = tasks.register(STORE_YARN_LOCK_NAME, YarnLockStoreTask::class.java) { task -> task.dependsOn(kotlinNpmInstall) task.inputFile.set(nodeJs.rootPackageDir.resolve("yarn.lock")) task.outputDirectory.set(yarnRootExtension.lockFileDirectory) task.fileName.set(yarnRootExtension.lockFileName) - task.yarnLockMismatchReportService.set(service) - task.yarnLockMismatchReport = provider { yarnRootExtension.requireConfigured().yarnLockMismatchReport } task.reportNewYarnLock = provider { yarnRootExtension.requireConfigured().reportNewYarnLock } task.yarnLockAutoReplace = provider { yarnRootExtension.requireConfigured().yarnLockAutoReplace }