[Gradle, JS] Move distributions tasks into abstract subtarget class
^KT-41566 fixed
This commit is contained in:
+10
-10
@@ -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 {
|
||||||
|
|||||||
+17
@@ -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(
|
||||||
|
|||||||
+1
-22
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
+39
@@ -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
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user