[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 nodejs projects")
@DisplayName("Build services are registered for Kotlin/JS browser projects")
@GradleTest
@JsGradlePluginTests
fun testJsNodeJsProject(gradleVersion: GradleVersion) {
fun testJsBrowserProject(gradleVersion: GradleVersion) {
project("kotlin-js-browser-project", gradleVersion) {
enableStableConfigurationCachePreview()
build("build") {
@@ -44,11 +43,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
@JsGradlePluginTests
fun testJsBrowserProject(gradleVersion: GradleVersion) {
fun testJsNodeJsProject(gradleVersion: GradleVersion) {
project("kotlin-js-nodejs-project", gradleVersion) {
enableStableConfigurationCachePreview()
build("build") {
@@ -57,7 +55,6 @@ class BuildServiceDeclarationIT : KGPBaseTest() {
}
}
@Disabled
@DisplayName("Build services are registered for Kotlin/MPP projects")
@GradleTest
@MppGradlePluginTests
@@ -43,6 +43,7 @@ open class NodeJsRootPlugin : Plugin<Project> {
val setupFileHasherTask = registerTask<KotlinNpmCachesSetup>(KotlinNpmCachesSetup.NAME) {
it.description = "Setup file hasher for caches"
settings.npmResolutionManager.declareBuildServicesUsage(it)
}
registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) {
@@ -50,6 +51,7 @@ open class NodeJsRootPlugin : Plugin<Project> {
it.dependsOn(setupFileHasherTask)
it.group = TASKS_GROUP_NAME
it.description = "Find, download and link NPM dependencies and projects"
settings.npmResolutionManager.declareBuildServicesUsage(it)
}
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
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.logging.Logger
import org.gradle.api.provider.Provider
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.YarnResolution
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.FileSystemOperationsCompat
import org.jetbrains.kotlin.gradle.utils.unavailableValueError
@@ -96,6 +99,12 @@ class KotlinRootNpmResolver internal constructor(
internal val compositeNodeModules: CompositeNodeModulesCache
get() = compositeNodeModulesProvider.get()
internal fun declareCacheServicesUsage(task: Task) {
task.usesService(gradleNodeModulesProvider)
task.usesService(compositeNodeModulesProvider)
task.usesService(resolverStateHolder)
}
@Transient
private val projectResolvers_: MutableMap<String, KotlinProjectNpmResolver>? = mutableMapOf()
@@ -176,6 +185,9 @@ class KotlinRootNpmResolver internal constructor(
synchronized(projectResolvers) {
check(state == RootResolverState.CONFIGURING) { alreadyResolvedMessage("add new project: $target") }
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.PACKAGE_JSON_UMBRELLA_TASK_NAME
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.chainedDisallowChanges
import org.jetbrains.kotlin.gradle.utils.getValue
import java.io.File
@@ -113,13 +114,14 @@ abstract class KotlinPackageJsonTask : DefaultTask() {
task.compilation = compilation
task.description = "Create package.json file for $compilation"
task.group = NodeJsRootPlugin.TASKS_GROUP_NAME
task.mayBeUpToDateTasksRegistry.apply {
set(MayBeUpToDatePackageJsonTasksRegistry.registerIfAbsent(project))
disallowChanges()
val packageJsonStateService = MayBeUpToDatePackageJsonTasksRegistry.registerIfAbsent(project)
task.mayBeUpToDateTasksRegistry.value(packageJsonStateService).chainedDisallowChanges().also {
task.usesService(packageJsonStateService)
}
task.dependsOn(target.project.provider { task.findDependentTasks() })
task.dependsOn(npmCachesSetupTask)
nodeJs.npmResolutionManager.declareBuildServicesUsage(task)
}
packageJsonUmbrella.configure { task ->
task.inputs.file(packageJsonTask.map { it.packageJson })
@@ -46,6 +46,7 @@ open class YarnPlugin : Plugin<Project> {
task.dependsOn(nodeJs.npmCachesSetupTaskProvider)
task.group = NodeJsRootPlugin.TASKS_GROUP_NAME
task.description = "Create root package.json"
nodeJs.npmResolutionManager.declareBuildServicesUsage(task)
}
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.targets.js.ir.*
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.utils.chainedDisallowChanges
import org.jetbrains.kotlin.gradle.utils.klibModuleName
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)
}
}
}