[Gradle] Declare build services usages for the Kotlin/JS plugin

#KT-52149 In Progress
This commit is contained in:
Alexander.Likhachev
2023-01-12 12:02:57 +01:00
committed by Space Team
parent 02bf10f21a
commit 36a6809d55
7 changed files with 33 additions and 11 deletions
@@ -31,11 +31,10 @@ class BuildServiceDeclarationIT : KGPBaseTest() {
} }
} }
@Disabled @DisplayName("Build services are registered for Kotlin/JS browser projects")
@DisplayName("Build services are registered for Kotlin/JS nodejs projects")
@GradleTest @GradleTest
@JsGradlePluginTests @JsGradlePluginTests
fun testJsNodeJsProject(gradleVersion: GradleVersion) { fun testJsBrowserProject(gradleVersion: GradleVersion) {
project("kotlin-js-browser-project", gradleVersion) { project("kotlin-js-browser-project", gradleVersion) {
enableStableConfigurationCachePreview() enableStableConfigurationCachePreview()
build("build") { build("build") {
@@ -44,11 +43,10 @@ class BuildServiceDeclarationIT : KGPBaseTest() {
} }
} }
@Disabled @DisplayName("Build services are registered for Kotlin/JS nodejs projects")
@DisplayName("Build services are registered for Kotlin/JS browser projects")
@GradleTest @GradleTest
@JsGradlePluginTests @JsGradlePluginTests
fun testJsBrowserProject(gradleVersion: GradleVersion) { fun testJsNodeJsProject(gradleVersion: GradleVersion) {
project("kotlin-js-nodejs-project", gradleVersion) { project("kotlin-js-nodejs-project", gradleVersion) {
enableStableConfigurationCachePreview() enableStableConfigurationCachePreview()
build("build") { build("build") {
@@ -57,7 +55,6 @@ class BuildServiceDeclarationIT : KGPBaseTest() {
} }
} }
@Disabled
@DisplayName("Build services are registered for Kotlin/MPP projects") @DisplayName("Build services are registered for Kotlin/MPP projects")
@GradleTest @GradleTest
@MppGradlePluginTests @MppGradlePluginTests
@@ -43,6 +43,7 @@ open class NodeJsRootPlugin : Plugin<Project> {
val setupFileHasherTask = registerTask<KotlinNpmCachesSetup>(KotlinNpmCachesSetup.NAME) { val setupFileHasherTask = registerTask<KotlinNpmCachesSetup>(KotlinNpmCachesSetup.NAME) {
it.description = "Setup file hasher for caches" it.description = "Setup file hasher for caches"
settings.npmResolutionManager.declareBuildServicesUsage(it)
} }
registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) { registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) {
@@ -50,6 +51,7 @@ open class NodeJsRootPlugin : Plugin<Project> {
it.dependsOn(setupFileHasherTask) it.dependsOn(setupFileHasherTask)
it.group = TASKS_GROUP_NAME it.group = TASKS_GROUP_NAME
it.description = "Find, download and link NPM dependencies and projects" it.description = "Find, download and link NPM dependencies and projects"
settings.npmResolutionManager.declareBuildServicesUsage(it)
} }
registerTask<Task>(PACKAGE_JSON_UMBRELLA_TASK_NAME) registerTask<Task>(PACKAGE_JSON_UMBRELLA_TASK_NAME)
@@ -277,4 +277,9 @@ class KotlinNpmResolutionManager(@Transient private val nodeJsSettings: NodeJsRo
} }
} }
} }
internal fun declareBuildServicesUsage(task: Task) {
task.usesService(stateHolderProvider)
resolver.declareCacheServicesUsage(task)
}
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.internal.service.ServiceRegistry import org.gradle.internal.service.ServiceRegistry
@@ -23,6 +24,8 @@ import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnEnv
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnResolution import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnResolution
import org.jetbrains.kotlin.gradle.targets.js.yarn.toVersionString import org.jetbrains.kotlin.gradle.targets.js.yarn.toVersionString
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.tasks.withType
import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat
import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat
import org.jetbrains.kotlin.gradle.utils.unavailableValueError import org.jetbrains.kotlin.gradle.utils.unavailableValueError
@@ -96,6 +99,12 @@ class KotlinRootNpmResolver internal constructor(
internal val compositeNodeModules: CompositeNodeModulesCache internal val compositeNodeModules: CompositeNodeModulesCache
get() = compositeNodeModulesProvider.get() get() = compositeNodeModulesProvider.get()
internal fun declareCacheServicesUsage(task: Task) {
task.usesService(gradleNodeModulesProvider)
task.usesService(compositeNodeModulesProvider)
task.usesService(resolverStateHolder)
}
@Transient @Transient
private val projectResolvers_: MutableMap<String, KotlinProjectNpmResolver>? = mutableMapOf() private val projectResolvers_: MutableMap<String, KotlinProjectNpmResolver>? = mutableMapOf()
@@ -176,6 +185,9 @@ class KotlinRootNpmResolver internal constructor(
synchronized(projectResolvers) { synchronized(projectResolvers) {
check(state == RootResolverState.CONFIGURING) { alreadyResolvedMessage("add new project: $target") } check(state == RootResolverState.CONFIGURING) { alreadyResolvedMessage("add new project: $target") }
projectResolvers[target.path] = KotlinProjectNpmResolver(target, this) projectResolvers[target.path] = KotlinProjectNpmResolver(target, this)
target.tasks.withType<Kotlin2JsCompile>().configureEach { task ->
nodeJs_.npmResolutionManager.declareBuildServicesUsage(task)
}
} }
} }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.MayBeUpToDatePackageJ
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver
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.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.chainedDisallowChanges
import org.jetbrains.kotlin.gradle.utils.getValue import org.jetbrains.kotlin.gradle.utils.getValue
import java.io.File import java.io.File
@@ -113,13 +114,14 @@ abstract class KotlinPackageJsonTask : DefaultTask() {
task.compilation = compilation task.compilation = compilation
task.description = "Create package.json file for $compilation" task.description = "Create package.json file for $compilation"
task.group = NodeJsRootPlugin.TASKS_GROUP_NAME task.group = NodeJsRootPlugin.TASKS_GROUP_NAME
task.mayBeUpToDateTasksRegistry.apply { val packageJsonStateService = MayBeUpToDatePackageJsonTasksRegistry.registerIfAbsent(project)
set(MayBeUpToDatePackageJsonTasksRegistry.registerIfAbsent(project)) task.mayBeUpToDateTasksRegistry.value(packageJsonStateService).chainedDisallowChanges().also {
disallowChanges() task.usesService(packageJsonStateService)
} }
task.dependsOn(target.project.provider { task.findDependentTasks() }) task.dependsOn(target.project.provider { task.findDependentTasks() })
task.dependsOn(npmCachesSetupTask) task.dependsOn(npmCachesSetupTask)
nodeJs.npmResolutionManager.declareBuildServicesUsage(task)
} }
packageJsonUmbrella.configure { task -> packageJsonUmbrella.configure { task ->
task.inputs.file(packageJsonTask.map { it.packageJson }) task.inputs.file(packageJsonTask.map { it.packageJson })
@@ -46,6 +46,7 @@ open class YarnPlugin : Plugin<Project> {
task.dependsOn(nodeJs.npmCachesSetupTaskProvider) task.dependsOn(nodeJs.npmCachesSetupTaskProvider)
task.group = NodeJsRootPlugin.TASKS_GROUP_NAME task.group = NodeJsRootPlugin.TASKS_GROUP_NAME
task.description = "Create root package.json" task.description = "Create root package.json"
nodeJs.npmResolutionManager.declareBuildServicesUsage(task)
} }
configureRequiresNpmDependencies(project, rootPackageJson) configureRequiresNpmDependencies(project, rootPackageJson)
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.tasks.configuration
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
import org.jetbrains.kotlin.gradle.targets.js.ir.* import org.jetbrains.kotlin.gradle.targets.js.ir.*
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.utils.chainedDisallowChanges
import org.jetbrains.kotlin.gradle.utils.klibModuleName import org.jetbrains.kotlin.gradle.utils.klibModuleName
import java.io.File import java.io.File
@@ -67,7 +68,9 @@ internal open class BaseKotlin2JsCompileConfig<TASK : Kotlin2JsCompile>(
) )
) )
task.libraryCache.set(libraryCacheService).also { task.libraryCache.disallowChanges() } task.libraryCache.value(libraryCacheService).chainedDisallowChanges().also {
task.usesService(libraryCacheService)
}
} }
} }