[Gradle, JS] Distribution is copy task, webpack targeting to separate directory

^KT-63040 fixed
This commit is contained in:
Ilya Goncharov
2023-11-13 10:56:04 +00:00
committed by Space Team
parent dd219cb6e6
commit 87e81d8562
5 changed files with 41 additions and 66 deletions
@@ -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")
@@ -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")
}
@@ -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")
}
@@ -187,13 +187,43 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
val mode = binary.mode
val archivesName = project.archivesName
val distributeResourcesTask = registerSubTargetTask<Copy>(
val webpackTask = registerSubTargetTask<KotlinWebpack>(
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<Copy>(
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<KotlinWebpack>(
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<Task>(
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<Task>(
@@ -223,10 +223,10 @@ abstract class KotlinJsIrSubTarget(
val mode = binary.mode
val prepareJsLibrary = registerSubTargetTask<Copy>(
val distributionTask = registerSubTargetTask<Copy>(
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<Task>(
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"
}
}