[Gradle, JS] No additional checks of setup tasks

This commit is contained in:
Ilya Goncharov
2021-07-01 14:35:21 +03:00
committed by TeamCityServer
parent 54d47de008
commit eb73527b9f
9 changed files with 29 additions and 22 deletions
@@ -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.KotlinNpmResolutionManager
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi 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.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.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.npm.tasks.RootPackageJsonTask
import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn
import org.jetbrains.kotlin.gradle.tasks.internal.CleanableStore import org.jetbrains.kotlin.gradle.tasks.internal.CleanableStore
@@ -116,10 +116,10 @@ open class NodeJsRootExtension(@Transient val rootProject: Project) : Configurat
} }
internal fun executeSetup() { internal fun executeSetup() {
val nodeJsEnv = requireConfigured()
if (download) { if (download) {
if (!nodeJsEnv.nodeBinDir.isDirectory) { val nodeJsSetupTask = nodeJsSetupTaskProvider.get()
nodeJsSetupTaskProvider.get().exec() nodeJsSetupTask.actions.forEach {
it.execute(nodeJsSetupTask)
} }
} }
} }
@@ -67,9 +67,8 @@ abstract class NodeJsSetupTask : DefaultTask() {
} }
init { init {
@Suppress("LeakingThis")
onlyIf { onlyIf {
shouldDownload && !File(env.nodeExecutable).isFile shouldDownload
} }
} }
@@ -27,7 +27,8 @@ interface NpmApi {
rootProjectVersion: String, rootProjectVersion: String,
logger: Logger, logger: Logger,
subProjects: Collection<KotlinCompilationNpmResolution>, subProjects: Collection<KotlinCompilationNpmResolution>,
resolutions: Map<String, String> resolutions: Map<String, String>,
forceFullResolve: Boolean
) )
fun resolveRootProject( fun resolveRootProject(
@@ -200,7 +200,9 @@ internal class KotlinRootNpmResolver internal constructor(
logger, logger,
allNpmPackages, allNpmPackages,
yarn.resolutions yarn.resolutions
.associate { it.path to it.toVersionString() }) .associate { it.path to it.toVersionString() },
forceFullResolve
)
return Installation( return Installation(
projectResolutions projectResolutions
@@ -33,7 +33,8 @@ class Yarn : NpmApi {
rootProjectVersion: String, rootProjectVersion: String,
logger: Logger, logger: Logger,
subProjects: Collection<KotlinCompilationNpmResolution>, subProjects: Collection<KotlinCompilationNpmResolution>,
resolutions: Map<String, String> resolutions: Map<String, String>,
forceFullResolve: Boolean
) = yarnWorkspaces ) = yarnWorkspaces
.prepareRootProject( .prepareRootProject(
rootProject, rootProject,
@@ -42,7 +43,8 @@ class Yarn : NpmApi {
rootProjectVersion, rootProjectVersion,
logger, logger,
subProjects, subProjects,
resolutions resolutions,
forceFullResolve
) )
override fun resolveRootProject( override fun resolveRootProject(
@@ -30,7 +30,7 @@ open class YarnPlugin : Plugin<Project> {
val yarnRootExtension = this.extensions.create(YarnRootExtension.YARN, YarnRootExtension::class.java, this) val yarnRootExtension = this.extensions.create(YarnRootExtension.YARN, YarnRootExtension::class.java, this)
val nodeJs = NodeJsRootPlugin.apply(this) val nodeJs = NodeJsRootPlugin.apply(this)
registerTask<YarnSetupTask>(YarnSetupTask.NAME) { val setupTask = registerTask<YarnSetupTask>(YarnSetupTask.NAME) {
it.dependsOn(nodeJs.nodeJsSetupTaskProvider) it.dependsOn(nodeJs.nodeJsSetupTaskProvider)
it.configuration = provider { it.configuration = provider {
@@ -50,6 +50,7 @@ open class YarnPlugin : Plugin<Project> {
tasks.named(KotlinNpmInstallTask.NAME).configure { tasks.named(KotlinNpmInstallTask.NAME).configure {
it.dependsOn(rootPackageJson) it.dependsOn(rootPackageJson)
it.dependsOn(setupTask)
} }
tasks.register("yarn" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) { tasks.register("yarn" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {
@@ -34,8 +34,10 @@ open class YarnRootExtension(
var downloadBaseUrl by Property("https://github.com/yarnpkg/yarn/releases/download") var downloadBaseUrl by Property("https://github.com/yarnpkg/yarn/releases/download")
var version by Property("1.22.10") var version by Property("1.22.10")
val yarnSetupTask: YarnSetupTask val yarnSetupTaskProvider: TaskProvider<YarnSetupTask>
get() = project.tasks.getByName(YarnSetupTask.NAME) as YarnSetupTask get() = project.tasks
.withType(YarnSetupTask::class.java)
.named(YarnSetupTask.NAME)
val rootPackageJsonTaskProvider: TaskProvider<RootPackageJsonTask> val rootPackageJsonTaskProvider: TaskProvider<RootPackageJsonTask>
get() = project.tasks get() = project.tasks
@@ -85,9 +87,9 @@ open class YarnRootExtension(
internal fun executeSetup() { internal fun executeSetup() {
NodeJsRootPlugin.apply(project).executeSetup() NodeJsRootPlugin.apply(project).executeSetup()
val yarnSetupTask = yarnSetupTaskProvider.get()
if (!finalizeConfiguration().home.isDirectory) { yarnSetupTask.actions.forEach {
yarnSetupTask.setup() it.execute(yarnSetupTask)
} }
} }
@@ -72,7 +72,7 @@ open class YarnSetupTask : DefaultTask() {
@TaskAction @TaskAction
fun setup() { 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 extract(yarnDist, destination.parentFile) // parent because archive contains name already
} }
@@ -5,12 +5,10 @@
package org.jetbrains.kotlin.gradle.targets.js.yarn package org.jetbrains.kotlin.gradle.targets.js.yarn
import com.google.gson.Gson
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import org.gradle.internal.service.ServiceRegistry import org.gradle.internal.service.ServiceRegistry
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension 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.NpmApi
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
@@ -33,10 +31,12 @@ class YarnWorkspaces : YarnBasics() {
rootProjectVersion: String, rootProjectVersion: String,
logger: Logger, logger: Logger,
subProjects: Collection<KotlinCompilationNpmResolution>, subProjects: Collection<KotlinCompilationNpmResolution>,
resolutions: Map<String, String> resolutions: Map<String, String>,
forceFullResolve: Boolean
) { ) {
// check(rootProject == rootProject.rootProject) if (forceFullResolve) {
rootProject?.let { setup(it) } rootProject?.let { setup(it) }
}
return prepareRootPackageJson( return prepareRootPackageJson(
nodeJs, nodeJs,
rootProjectName, rootProjectName,