[Gradle, JS] Fix destinations of js and wasm dists
^KT-57629 fixed
This commit is contained in:
committed by
Space Team
parent
faf212ca04
commit
418132c240
+3
-3
@@ -362,7 +362,7 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
|
||||
fun testKotlinJsPackageModuleName(gradleVersion: GradleVersion) {
|
||||
project("kotlin-js-package-module-name", gradleVersion) {
|
||||
build("assemble") {
|
||||
assertFileInProjectExists("build/${Distribution.JS_DIST}/productionExecutable/kotlin-js-package-module-name.js")
|
||||
assertFileInProjectExists("build/${Distribution.DIST}/js/productionExecutable/kotlin-js-package-module-name.js")
|
||||
assertFileInProjectExists("build/js/packages/@foo/bar/kotlin/@foo/bar.js")
|
||||
}
|
||||
}
|
||||
@@ -1149,7 +1149,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
|
||||
assertDirectoryInProjectExists("build/js/packages/kotlin-js-browser-app")
|
||||
|
||||
if (irBackend) {
|
||||
assertFileInProjectExists("app/build/${Distribution.JS_DIST}/productionExecutable/app.js")
|
||||
assertFileInProjectExists("app/build/${Distribution.DIST}/js/productionExecutable/app.js")
|
||||
} else {
|
||||
assertFileInProjectExists("app/build/distributions/app.js")
|
||||
}
|
||||
@@ -1175,7 +1175,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean)
|
||||
)
|
||||
|
||||
if (irBackend) {
|
||||
assertFileInProjectExists("app/build/${Distribution.JS_DIST}/productionExecutable/index.html")
|
||||
assertFileInProjectExists("app/build/${Distribution.DIST}/js/productionExecutable/index.html")
|
||||
} else {
|
||||
assertFileInProjectExists("app/build/distributions/index.html")
|
||||
}
|
||||
|
||||
+12
-13
@@ -9,10 +9,9 @@ import com.google.gson.Gson
|
||||
import com.google.gson.JsonObject
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.JS_DIST
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.DIST
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import java.util.zip.ZipFile
|
||||
import kotlin.io.path.reader
|
||||
import kotlin.test.assertNotNull
|
||||
|
||||
@@ -32,10 +31,10 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() {
|
||||
fun testSimpleJsBinaryLibrary(gradleVersion: GradleVersion) {
|
||||
project("simple-js-library", gradleVersion) {
|
||||
build("build") {
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js")
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json")
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js")
|
||||
projectPath.resolve("build/$JS_DIST/productionLibrary/package.json").reader()
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/js-library.js")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/package.json")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/main.js")
|
||||
projectPath.resolve("build/$DIST/js/productionLibrary/package.json").reader()
|
||||
.use { Gson().fromJson(it, JsonObject::class.java) }
|
||||
.getAsJsonObject("dependencies")
|
||||
?.entrySet()?.associate { (k, v) -> k to v.asString }
|
||||
@@ -52,9 +51,9 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() {
|
||||
fun testJsBinaryLibraryAndExecutable(gradleVersion: GradleVersion) {
|
||||
project("js-library-with-executable", gradleVersion) {
|
||||
build("build") {
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js")
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json")
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/js-library.js")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/package.json")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/main.js")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,11 +63,11 @@ abstract class KotlinJsIrLibraryGradlePluginITBase : KGPBaseTest() {
|
||||
fun testJsBinaryLibraryAndExecutableForBrowserAndNodejs(gradleVersion: GradleVersion) {
|
||||
project("js-library-with-executable-browser-nodejs", gradleVersion) {
|
||||
build("build") {
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/js-library.js")
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/package.json")
|
||||
assertFileInProjectExists("build/$JS_DIST/productionLibrary/main.js")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/js-library.js")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/package.json")
|
||||
assertFileInProjectExists("build/$DIST/js/productionLibrary/main.js")
|
||||
|
||||
assertFileInProjectExists("build/$JS_DIST/productionExecutable/js-library.js")
|
||||
assertFileInProjectExists("build/$DIST/js/productionExecutable/js-library.js")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ kotlin {
|
||||
sourceSets {
|
||||
main {
|
||||
dependencies {
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-datetime:latest.release")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.3")
|
||||
implementation(npm("kotlin", "*"))
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -21,6 +21,6 @@ interface Distribution {
|
||||
val outputDirectory: DirectoryProperty
|
||||
|
||||
companion object {
|
||||
const val JS_DIST = "js-dist"
|
||||
const val DIST = "dist"
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -32,7 +32,7 @@ sealed class JsIrBinary(
|
||||
override val mode: KotlinJsBinaryMode
|
||||
) : JsBinary {
|
||||
override val distribution: Distribution =
|
||||
createDefaultDistribution(compilation.target.project, name)
|
||||
createDefaultDistribution(compilation.target.project, compilation.target.targetName, name)
|
||||
|
||||
val linkTaskName: String = linkTaskName()
|
||||
|
||||
@@ -95,6 +95,7 @@ class Executable(
|
||||
override val distribution: Distribution =
|
||||
createDefaultDistribution(
|
||||
compilation.target.project,
|
||||
compilation.target.targetName,
|
||||
super.distribution.distributionName
|
||||
)
|
||||
|
||||
|
||||
+1
-1
@@ -114,7 +114,7 @@ constructor(
|
||||
override val compilation: KotlinJsCompilation = jsCompilation
|
||||
override val name: String = name
|
||||
override val mode: KotlinJsBinaryMode = type
|
||||
override val distribution: Distribution = createDefaultDistribution(jsCompilation.target.project)
|
||||
override val distribution: Distribution = createDefaultDistribution(jsCompilation.target.project, jsCompilation.target.targetName)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
+2
-2
@@ -78,10 +78,10 @@ abstract class PublicPackageJsonTask :
|
||||
externalDependencies,
|
||||
packageJsonHandlers
|
||||
).let { packageJson ->
|
||||
packageJson.main = "${npmProjectName}.js"
|
||||
packageJson.main = "${npmProjectName.get()}.js"
|
||||
|
||||
if (jsIrCompilation.get()) {
|
||||
packageJson.types = "${npmProjectName}.d.ts"
|
||||
packageJson.types = "${npmProjectName.get()}.d.ts"
|
||||
}
|
||||
|
||||
packageJson.apply {
|
||||
|
||||
+12
-10
@@ -9,8 +9,8 @@ import org.gradle.api.logging.Logger
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.TasksRequirements
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.PreparedKotlinCompilationNpmResolution
|
||||
import java.io.Serializable
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
|
||||
class KotlinCompilationNpmResolution(
|
||||
var internalDependencies: Collection<InternalDependency>,
|
||||
@@ -88,13 +88,15 @@ class KotlinCompilationNpmResolution(
|
||||
): PreparedKotlinCompilationNpmResolution {
|
||||
val rootResolver = npmResolutionManager.parameters.resolution.get()
|
||||
|
||||
internalDependencies.map {
|
||||
val compilationNpmResolution: KotlinCompilationNpmResolution = rootResolver[it.projectPath][it.compilationName]
|
||||
compilationNpmResolution.getResolutionOrPrepare(
|
||||
npmResolutionManager,
|
||||
logger
|
||||
)
|
||||
}
|
||||
val internalNpmDependencies = internalDependencies
|
||||
.map {
|
||||
val compilationNpmResolution: KotlinCompilationNpmResolution = rootResolver[it.projectPath][it.compilationName]
|
||||
compilationNpmResolution.getResolutionOrPrepare(
|
||||
npmResolutionManager,
|
||||
logger
|
||||
)
|
||||
}
|
||||
.flatMap { it.externalNpmDependencies }
|
||||
val importedExternalGradleDependencies = externalGradleDependencies.mapNotNull {
|
||||
npmResolutionManager.parameters.gradleNodeModulesProvider.get().get(it.dependencyName, it.dependencyVersion, it.file)
|
||||
} + fileCollectionDependencies.flatMap { dependency ->
|
||||
@@ -109,9 +111,9 @@ class KotlinCompilationNpmResolution(
|
||||
)
|
||||
}
|
||||
}.filterNotNull()
|
||||
val transitiveNpmDependencies = importedExternalGradleDependencies.flatMap {
|
||||
val transitiveNpmDependencies = (importedExternalGradleDependencies.flatMap {
|
||||
it.dependencies
|
||||
}.filter { it.scope != NpmDependency.Scope.DEV }
|
||||
} + internalNpmDependencies).filter { it.scope != NpmDependency.Scope.DEV }
|
||||
|
||||
val toolsNpmDependencies = tasksRequirements
|
||||
.getCompilationNpmRequirements(projectPath, compilationDisambiguatedName)
|
||||
|
||||
+16
-6
@@ -8,17 +8,26 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.JS_DIST
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution.Companion.DIST
|
||||
import org.jetbrains.kotlin.gradle.utils.property
|
||||
import java.io.File
|
||||
|
||||
internal fun createDefaultDistribution(project: Project, name: String? = null) =
|
||||
DefaultDistribution(project, project.objects.property(name))
|
||||
internal fun createDefaultDistribution(
|
||||
project: Project,
|
||||
targetName: String,
|
||||
name: String? = null
|
||||
) =
|
||||
DefaultDistribution(project, project.objects.property(targetName), project.objects.property(name))
|
||||
|
||||
internal fun createDefaultDistribution(project: Project, name: Property<String>?) =
|
||||
DefaultDistribution(project, project.objects.property<String>().apply {
|
||||
internal fun createDefaultDistribution(
|
||||
project: Project,
|
||||
targetName: String,
|
||||
name: Property<String>?
|
||||
) =
|
||||
DefaultDistribution(project, project.objects.property(targetName), project.objects.property<String>().apply {
|
||||
if (name != null) {
|
||||
value(name)
|
||||
}
|
||||
@@ -26,6 +35,7 @@ internal fun createDefaultDistribution(project: Project, name: Property<String>?
|
||||
|
||||
class DefaultDistribution(
|
||||
private val project: Project,
|
||||
private val targetName: Property<String>,
|
||||
override val distributionName: Property<String>,
|
||||
) : Distribution {
|
||||
@Deprecated("Use `distributionName` instead", ReplaceWith("distributionName"))
|
||||
@@ -43,6 +53,6 @@ class DefaultDistribution(
|
||||
}
|
||||
|
||||
override val outputDirectory: DirectoryProperty = project.objects.directoryProperty().convention(
|
||||
distributionName.flatMap { project.layout.buildDirectory.dir("$JS_DIST/$it") }.orElse(project.distsDirectory)
|
||||
distributionName.flatMap { project.layout.buildDirectory.dir("$DIST/${targetName.get()}/$it") }.orElse(project.distsDirectory)
|
||||
)
|
||||
}
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ abstract class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
||||
private val webpackTaskConfigurations: MutableList<Action<KotlinWebpack>> = mutableListOf()
|
||||
private val runTaskConfigurations: MutableList<Action<KotlinWebpack>> = mutableListOf()
|
||||
private val dceConfigurations: MutableList<Action<KotlinJsDce>> = mutableListOf()
|
||||
private val distribution: Distribution = createDefaultDistribution(project)
|
||||
private val distribution: Distribution = createDefaultDistribution(project, target.targetName)
|
||||
|
||||
override val testTaskDescription: String
|
||||
get() = "Run all ${target.name} tests inside browser using karma and webpack"
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ internal open class KotlinJsIrLinkConfig(
|
||||
task.destinationDirectory.convention(
|
||||
project.layout.buildDirectory
|
||||
.dir(COMPILE_SYNC)
|
||||
.map { it.dir(if (compilation.platformType == KotlinPlatformType.wasm) "wasm" else "js") }
|
||||
.map { it.dir(compilation.target.targetName) }
|
||||
.map { it.dir(compilation.name) }
|
||||
.map { it.dir(binary.name) }
|
||||
.map { it.dir(NpmProject.DIST_FOLDER) }
|
||||
|
||||
Reference in New Issue
Block a user