From eb73527b9f05c97a978b14ef4efcb2768aeb4c26 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 1 Jul 2021 14:35:21 +0300 Subject: [PATCH] [Gradle, JS] No additional checks of setup tasks --- .../gradle/targets/js/nodejs/NodeJsRootExtension.kt | 8 ++++---- .../gradle/targets/js/nodejs/NodeJsSetupTask.kt | 3 +-- .../jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt | 3 ++- .../targets/js/npm/resolver/KotlinRootNpmResolver.kt | 4 +++- .../jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt | 6 ++++-- .../kotlin/gradle/targets/js/yarn/YarnPlugin.kt | 3 ++- .../gradle/targets/js/yarn/YarnRootExtension.kt | 12 +++++++----- .../kotlin/gradle/targets/js/yarn/YarnSetupTask.kt | 2 +- .../kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt | 10 +++++----- 9 files changed, 29 insertions(+), 22 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt index 81d636a0b69..f9b63b140e3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt @@ -15,8 +15,8 @@ import org.jetbrains.kotlin.gradle.targets.js.NpmVersions import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME -import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmCachesSetup +import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn import org.jetbrains.kotlin.gradle.tasks.internal.CleanableStore @@ -116,10 +116,10 @@ open class NodeJsRootExtension(@Transient val rootProject: Project) : Configurat } internal fun executeSetup() { - val nodeJsEnv = requireConfigured() if (download) { - if (!nodeJsEnv.nodeBinDir.isDirectory) { - nodeJsSetupTaskProvider.get().exec() + val nodeJsSetupTask = nodeJsSetupTaskProvider.get() + nodeJsSetupTask.actions.forEach { + it.execute(nodeJsSetupTask) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt index 8a6ce95f5b4..896c8dc559a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt @@ -67,9 +67,8 @@ abstract class NodeJsSetupTask : DefaultTask() { } init { - @Suppress("LeakingThis") onlyIf { - shouldDownload && !File(env.nodeExecutable).isFile + shouldDownload } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt index 9b7e644679e..ce3becba4a3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmApi.kt @@ -27,7 +27,8 @@ interface NpmApi { rootProjectVersion: String, logger: Logger, subProjects: Collection, - resolutions: Map + resolutions: Map, + forceFullResolve: Boolean ) fun resolveRootProject( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt index a0fcfaa2476..a15b4e8ff13 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt @@ -200,7 +200,9 @@ internal class KotlinRootNpmResolver internal constructor( logger, allNpmPackages, yarn.resolutions - .associate { it.path to it.toVersionString() }) + .associate { it.path to it.toVersionString() }, + forceFullResolve + ) return Installation( projectResolutions diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt index c7a52a7994f..32fc38ff3ac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt @@ -33,7 +33,8 @@ class Yarn : NpmApi { rootProjectVersion: String, logger: Logger, subProjects: Collection, - resolutions: Map + resolutions: Map, + forceFullResolve: Boolean ) = yarnWorkspaces .prepareRootProject( rootProject, @@ -42,7 +43,8 @@ class Yarn : NpmApi { rootProjectVersion, logger, subProjects, - resolutions + resolutions, + forceFullResolve ) override fun resolveRootProject( 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 7c812abd0c2..8ae6895fac4 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 @@ -30,7 +30,7 @@ open class YarnPlugin : Plugin { val yarnRootExtension = this.extensions.create(YarnRootExtension.YARN, YarnRootExtension::class.java, this) val nodeJs = NodeJsRootPlugin.apply(this) - registerTask(YarnSetupTask.NAME) { + val setupTask = registerTask(YarnSetupTask.NAME) { it.dependsOn(nodeJs.nodeJsSetupTaskProvider) it.configuration = provider { @@ -50,6 +50,7 @@ open class YarnPlugin : Plugin { tasks.named(KotlinNpmInstallTask.NAME).configure { it.dependsOn(rootPackageJson) + it.dependsOn(setupTask) } tasks.register("yarn" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt index 9a3901d0ff0..19be814604d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt @@ -34,8 +34,10 @@ open class YarnRootExtension( var downloadBaseUrl by Property("https://github.com/yarnpkg/yarn/releases/download") var version by Property("1.22.10") - val yarnSetupTask: YarnSetupTask - get() = project.tasks.getByName(YarnSetupTask.NAME) as YarnSetupTask + val yarnSetupTaskProvider: TaskProvider + get() = project.tasks + .withType(YarnSetupTask::class.java) + .named(YarnSetupTask.NAME) val rootPackageJsonTaskProvider: TaskProvider get() = project.tasks @@ -85,9 +87,9 @@ open class YarnRootExtension( internal fun executeSetup() { NodeJsRootPlugin.apply(project).executeSetup() - - if (!finalizeConfiguration().home.isDirectory) { - yarnSetupTask.setup() + val yarnSetupTask = yarnSetupTaskProvider.get() + yarnSetupTask.actions.forEach { + it.execute(yarnSetupTask) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt index 5989cf5a8ff..3857ba5348f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnSetupTask.kt @@ -72,7 +72,7 @@ open class YarnSetupTask : DefaultTask() { @TaskAction fun setup() { - logger.kotlinInfo("Using node distribution from '$yarnDist'") + logger.kotlinInfo("Using yarn distribution from '$yarnDist'") extract(yarnDist, destination.parentFile) // parent because archive contains name already } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt index d26053b96d2..e90b410abc0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt @@ -5,12 +5,10 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn -import com.google.gson.Gson import org.gradle.api.Project import org.gradle.api.logging.Logger import org.gradle.internal.service.ServiceRegistry import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension -import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson @@ -33,10 +31,12 @@ class YarnWorkspaces : YarnBasics() { rootProjectVersion: String, logger: Logger, subProjects: Collection, - resolutions: Map + resolutions: Map, + forceFullResolve: Boolean ) { -// check(rootProject == rootProject.rootProject) - rootProject?.let { setup(it) } + if (forceFullResolve) { + rootProject?.let { setup(it) } + } return prepareRootPackageJson( nodeJs, rootProjectName,