[Gradle, JS] Move distributions tasks into abstract subtarget class

^KT-41566 fixed
This commit is contained in:
Ilya Goncharov
2020-08-20 16:24:45 +03:00
parent cae29a5d1c
commit cc25660d7d
5 changed files with 74 additions and 32 deletions
@@ -73,6 +73,16 @@ interface KotlinJsTargetDsl : KotlinTarget {
} }
interface KotlinJsSubTargetDsl { interface KotlinJsSubTargetDsl {
@ExperimentalDistributionDsl
fun distribution(body: Distribution.() -> Unit)
@ExperimentalDistributionDsl
fun distribution(fn: Closure<*>) {
distribution {
ConfigureUtil.configure(fn, this)
}
}
fun testTask(body: KotlinJsTest.() -> Unit) fun testTask(body: KotlinJsTest.() -> Unit)
fun testTask(fn: Closure<*>) { fun testTask(fn: Closure<*>) {
testTask { testTask {
@@ -98,16 +108,6 @@ interface KotlinJsBrowserDsl : KotlinJsSubTargetDsl {
} }
} }
@ExperimentalDistributionDsl
fun distribution(body: Distribution.() -> Unit)
@ExperimentalDistributionDsl
fun distribution(fn: Closure<*>) {
distribution {
ConfigureUtil.configure(fn, this)
}
}
fun webpackTask(body: KotlinWebpack.() -> Unit) fun webpackTask(body: KotlinWebpack.() -> Unit)
fun webpackTask(fn: Closure<*>) { fun webpackTask(fn: Closure<*>) {
webpackTask { webpackTask {
@@ -63,6 +63,23 @@ class Executable(
) )
} }
class Library(
compilation: KotlinJsCompilation,
name: String,
mode: KotlinJsBinaryMode
) : JsIrBinary(
compilation,
name,
mode
) {
val executeTaskBaseName: String =
generateBinaryName(
compilation,
mode,
null
)
}
// Hack for legacy // Hack for legacy
internal val JsBinary.executeTaskBaseName: String internal val JsBinary.executeTaskBaseName: String
get() = generateBinaryName( get() = generateBinaryName(
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.Sync import org.gradle.api.tasks.Sync
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.language.base.plugins.LifecycleBasePlugin
@@ -17,7 +16,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.dsl.*
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.nodejs.NodeJsRootPlugin
import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
@@ -36,7 +34,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
private val webpackTaskConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf() private val webpackTaskConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf()
private val runTaskConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf() private val runTaskConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf()
private val distribution: Distribution = BrowserDistribution(project)
override val testTaskDescription: String override val testTaskDescription: String
get() = "Run all ${target.name} tests inside browser using karma and webpack" get() = "Run all ${target.name} tests inside browser using karma and webpack"
@@ -67,11 +64,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
runTaskConfigurations.add(body) runTaskConfigurations.add(body)
} }
@ExperimentalDistributionDsl
override fun distribution(body: Distribution.() -> Unit) {
distribution.body()
}
override fun webpackTask(body: KotlinWebpack.() -> Unit) { override fun webpackTask(body: KotlinWebpack.() -> Unit) {
webpackTaskConfigurations.add(body) webpackTaskConfigurations.add(body)
} }
@@ -146,19 +138,8 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
val project = compilation.target.project val project = compilation.target.project
val nodeJs = NodeJsRootPlugin.apply(project.rootProject) val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName) val distributeResourcesTask = configureDistributeTasks(compilation)
val distributeResourcesTask = registerSubTargetTask<Copy>(
disambiguateCamelCased(
DISTRIBUTE_RESOURCES_TASK_NAME
)
) {
it.from(processResourcesTask)
it.into(distribution.directory)
}
val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
assembleTaskProvider.dependsOn(distributeResourcesTask)
compilation.binaries compilation.binaries
.matching { it is Executable } .matching { it is Executable }
@@ -281,8 +262,6 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
companion object { companion object {
private const val WEBPACK_TASK_NAME = "webpack" private const val WEBPACK_TASK_NAME = "webpack"
private const val DISTRIBUTE_RESOURCES_TASK_NAME = "distributeResources"
private const val DISTRIBUTION_TASK_NAME = "distribution"
private const val RUN_COMPILE_COPY = "runCompileSync" private const val RUN_COMPILE_COPY = "runCompileSync"
} }
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.plugins.ExtensionAware import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
@@ -16,12 +17,16 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDistributionDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
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.subtargets.BrowserDistribution
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
@@ -42,6 +47,13 @@ abstract class KotlinJsIrSubTarget(
protected val taskGroupName = "Kotlin $disambiguationClassifier" protected val taskGroupName = "Kotlin $disambiguationClassifier"
protected val distribution: Distribution = BrowserDistribution(project)
@ExperimentalDistributionDsl
override fun distribution(body: Distribution.() -> Unit) {
distribution.body()
}
internal fun configure() { internal fun configure() {
NpmResolverPlugin.apply(project) NpmResolverPlugin.apply(project)
@@ -170,6 +182,30 @@ abstract class KotlinJsIrSubTarget(
protected abstract fun configureBuild(compilation: KotlinJsIrCompilation) protected abstract fun configureBuild(compilation: KotlinJsIrCompilation)
protected fun configureLibrary(compilation: KotlinJsIrCompilation) {
}
protected fun configureDistributeTasks(compilation: KotlinJsIrCompilation): TaskProvider<out Copy> {
val project = compilation.target.project
val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName)
val distributeResourcesTask = registerSubTargetTask<Copy>(
disambiguateCamelCased(
DISTRIBUTE_RESOURCES_TASK_NAME
)
) {
it.from(processResourcesTask)
it.into(distribution.directory)
}
val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME)
assembleTaskProvider.dependsOn(distributeResourcesTask)
return distributeResourcesTask
}
internal inline fun <reified T : Task> registerSubTargetTask( internal inline fun <reified T : Task> registerSubTargetTask(
name: String, name: String,
args: List<Any> = emptyList(), args: List<Any> = emptyList(),
@@ -182,5 +218,8 @@ abstract class KotlinJsIrSubTarget(
companion object { companion object {
const val RUN_TASK_NAME = "run" const val RUN_TASK_NAME = "run"
const val DISTRIBUTE_RESOURCES_TASK_NAME = "distributeResources"
const val DISTRIBUTION_TASK_NAME = "distribution"
} }
} }
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDistributionDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
@@ -25,6 +27,11 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) :
project.tasks.withType<NodeJsExec>().named(runTaskName).configure(body) project.tasks.withType<NodeJsExec>().named(runTaskName).configure(body)
} }
@ExperimentalDistributionDsl
override fun distribution(body: Distribution.() -> Unit) {
TODO("Not yet implemented")
}
override fun testTask(body: KotlinJsTest.() -> Unit) { override fun testTask(body: KotlinJsTest.() -> Unit) {
super<KotlinJsSubTarget>.testTask(body) super<KotlinJsSubTarget>.testTask(body)
} }