From 87e81d856285f8d12b8430736b4a0908c79d4953 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 13 Nov 2023 10:56:04 +0000 Subject: [PATCH] [Gradle, JS] Distribution is copy task, webpack targeting to separate directory ^KT-63040 fixed --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 6 +- .../build.gradle.kts | 4 +- .../build.gradle.kts | 3 +- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 76 ++++++++----------- .../targets/js/ir/KotlinJsIrSubTarget.kt | 18 +---- 5 files changed, 41 insertions(+), 66 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index ab2dfec5f97..23588ce4b0d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -617,7 +617,7 @@ class Kotlin2JsIrGradlePluginIT : KGPBaseTest() { } } - build("browserProductionWebpack") { + build("browserDistribution") { assertTasksExecuted(":app:browserProductionWebpack") assertFileExists(subProject("app").projectPath.resolve("build/${Distribution.DIST}/js/productionExecutable/app.js")) } @@ -730,7 +730,7 @@ class Kotlin2JsIrGradlePluginIT : KGPBaseTest() { } } - build("browserProductionWebpack") { + build("browserDistribution") { assertTasksExecuted(":browserProductionWebpack") assertFileExists(projectPath.resolve("build/${Distribution.DIST}/js/productionExecutable/CORRECT_NAME.js")) } @@ -1142,7 +1142,7 @@ class Kotlin2JsIrGradlePluginIT : KGPBaseTest() { build("clean", "browserDistribution") { assertTasksExecuted( ":app:processResources", - ":app:browserProductionExecutableDistributeResources" + ":app:browserDistribution" ) assertFileInProjectExists("app/build/${Distribution.DIST}/js/productionExecutable/index.html") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable-browser-nodejs/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable-browser-nodejs/build.gradle.kts index 399db555d77..f3a817646c5 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable-browser-nodejs/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable-browser-nodejs/build.gradle.kts @@ -22,11 +22,11 @@ kotlin { // We need it for suppress warnings of Gradle 7.0 // We need to think about it, when we will support multiple binaries -tasks.named("nodeProductionLibraryPrepare") { +tasks.named("nodeProductionLibraryDistribution") { mustRunAfter("productionExecutableCompileSync") } -tasks.named("browserProductionLibraryPrepare") { +tasks.named("browserProductionLibraryDistribution") { mustRunAfter("productionExecutableCompileSync") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable/build.gradle.kts index 93aa23cffc3..4e864053a72 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-with-executable/build.gradle.kts @@ -19,9 +19,8 @@ kotlin { } } - // We need it for suppress warnings of Gradle 7.0 // We need to think about it, when we will support multiple binaries -tasks.named("nodeProductionLibraryPrepare") { +tasks.named("nodeProductionLibraryDistribution") { mustRunAfter("productionExecutableCompileSync") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index 7b76f5eb2e4..0eed1f8b3a1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -187,13 +187,43 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : val mode = binary.mode val archivesName = project.archivesName - val distributeResourcesTask = registerSubTargetTask( + val webpackTask = registerSubTargetTask( disambiguateCamelCased( - binary.name, - DISTRIBUTE_RESOURCES_TASK_NAME + binary.executeTaskBaseName, + WEBPACK_TASK_NAME + ), + listOf(compilation) + ) { task -> + task.description = "build webpack ${mode.name.toLowerCaseAsciiOnly()} bundle" + val buildDirectory = project.layout.buildDirectory + val targetName = target.name + task.outputDirectory.convention( + binary.distribution.distributionName.flatMap { + buildDirectory.dir("kotlin-webpack/$targetName/$it") + } + ).finalizeValueOnRead() + + task.dependsOn(binary.linkSyncTask) + + task.commonConfigure( + binary = binary, + mode = mode, + inputFilesDirectory = task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() }, + entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName }, + configurationActions = webpackTaskConfigurations, + nodeJs = nodeJs, + defaultArchivesName = archivesName, + ) + } + + val distributionTask = registerSubTargetTask( + disambiguateCamelCased( + if (binary.mode == KotlinJsBinaryMode.PRODUCTION) "" else binary.name, + DISTRIBUTION_TASK_NAME ) ) { copy -> copy.from(processResourcesTask) + copy.from(webpackTask.flatMap { it.outputDirectory }) if (binary.compilation.platformType == KotlinPlatformType.wasm) { copy.from( @@ -212,46 +242,6 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : copy.into(binary.distribution.directory) } - val webpackTask = registerSubTargetTask( - disambiguateCamelCased( - binary.executeTaskBaseName, - WEBPACK_TASK_NAME - ), - listOf(compilation) - ) { task -> - task.description = "build webpack ${mode.name.toLowerCaseAsciiOnly()} bundle" - task.outputDirectory.fileValue(binary.distribution.directory).finalizeValueOnRead() - - - task.dependsOn( - distributeResourcesTask - ) - - task.dependsOn(binary.linkSyncTask) - - task.commonConfigure( - binary = binary, - mode = mode, - inputFilesDirectory = task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() }, - entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName }, - configurationActions = webpackTaskConfigurations, - nodeJs = nodeJs, - defaultArchivesName = archivesName, - ) - } - - val distributionTask = registerSubTargetTask( - disambiguateCamelCased( - if (binary.mode == KotlinJsBinaryMode.PRODUCTION) "" else binary.name, - DISTRIBUTION_TASK_NAME - ) - ) { - it.dependsOn(webpackTask) - it.dependsOn(distributeResourcesTask) - - it.outputs.dir(project.newFileProperty { binary.distribution.directory }) - } - if (mode == KotlinJsBinaryMode.PRODUCTION) { assembleTaskProvider.dependsOn(distributionTask) registerSubTargetTask( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index 5268b0a287f..420506d2ba0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -223,10 +223,10 @@ abstract class KotlinJsIrSubTarget( val mode = binary.mode - val prepareJsLibrary = registerSubTargetTask( + val distributionTask = registerSubTargetTask( disambiguateCamelCased( binary.name, - PREPARE_JS_LIBRARY_TASK_NAME + DISTRIBUTION_TASK_NAME ) ) { it.from(project.tasks.named(npmProject.publicPackageJsonTaskName)) @@ -235,17 +235,6 @@ abstract class KotlinJsIrSubTarget( it.into(binary.distribution.directory) } - val distributionTask = registerSubTargetTask( - disambiguateCamelCased( - binary.name, - DISTRIBUTION_TASK_NAME - ) - ) { - it.dependsOn(prepareJsLibrary) - - it.outputs.dir(project.newFileProperty { binary.distribution.directory }) - } - if (mode == KotlinJsBinaryMode.PRODUCTION) { assembleTaskProvider.dependsOn(distributionTask) } @@ -265,9 +254,6 @@ abstract class KotlinJsIrSubTarget( companion object { const val RUN_TASK_NAME = "run" - const val DISTRIBUTE_RESOURCES_TASK_NAME = "distributeResources" const val DISTRIBUTION_TASK_NAME = "distribution" - - const val PREPARE_JS_LIBRARY_TASK_NAME = "prepare" } }