[Gradle, JS] Only if with reasons

This commit is contained in:
Ilya Goncharov
2023-03-13 14:00:01 +01:00
committed by Space Team
parent 9d8e7991a8
commit 7d2ba28911
3 changed files with 17 additions and 2 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.tasks.withType
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject
import org.jetbrains.kotlin.gradle.utils.castIsolatedKotlinPluginClassLoaderAware
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
@@ -80,7 +81,7 @@ open class NodeJsRootPlugin : Plugin<Project> {
it.group = TASKS_GROUP_NAME
it.description = "Find, download and link NPM dependencies and projects"
it.onlyIf { task ->
it.onlyIfCompat("No package.json files for install") { task ->
task as KotlinNpmInstallTask
task.preparedFiles.all { file ->
file.exists()
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.ST
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.UPGRADE_YARN_LOCK
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.onlyIfCompat
open class YarnPlugin : Plugin<Project> {
override fun apply(project: Project): Unit = project.run {
@@ -58,7 +59,7 @@ open class YarnPlugin : Plugin<Project> {
task.npmResolutionManager.value(kotlinNpmResolutionManager)
.disallowChanges()
task.onlyIf {
task.onlyIfCompat("Prepare NPM project only in configuring state") {
it as RootPackageJsonTask
it.npmResolutionManager.get().isConfiguringState()
}
@@ -28,6 +28,7 @@ import org.gradle.api.file.FileTree
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.internal.tasks.testing.TestDescriptorInternal
import org.gradle.api.provider.Provider
import org.gradle.api.specs.Spec
import org.gradle.api.tasks.WorkResult
import org.gradle.api.tasks.bundling.AbstractArchiveTask
import org.gradle.api.tasks.testing.TestDescriptor
@@ -78,6 +79,18 @@ internal fun Task.doNotTrackStateCompat(because: String) {
}
}
/**
* According to [Gradle 7.6 release notes](https://docs.gradle.org/7.6/release-notes.html#introduced-ability-to-explain-why-a-task-was-skipped-with-a-message)
* [Task.onlyIf] has reason message`
*/
internal fun Task.onlyIfCompat(onlyIfReason: String, onlyIfSpec: Spec<in Task>) {
if (GradleVersion.current() < GradleVersion.version("7.6")) {
onlyIf(onlyIfSpec)
} else {
onlyIf(onlyIfReason, onlyIfSpec)
}
}
/**
* [ArtifactCollection.getResolvedArtifacts] is available after 7.4 (inclusive)
*/