[Gradle, JS] Remove fail after build option

^KT-53381 fixed
This commit is contained in:
Ilya Goncharov
2022-08-10 14:47:29 +00:00
committed by Space
parent f5634ef7db
commit 032153c673
4 changed files with 15 additions and 116 deletions
@@ -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<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension>().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<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension>().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")
}
}
}
@@ -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<YarnLockMismatchReportService>
@Input
lateinit var yarnLockMismatchReport: Provider<YarnLockMismatchReport>
@@ -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")
}
}
@@ -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<YarnLockMismatchReportService.Params>, 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<Boolean>
val reportNewYarnLock: Property<Boolean>
}
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"
@@ -73,29 +73,12 @@ open class YarnPlugin : Plugin<Project> {
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 }