diff --git a/libraries/kotlin.test/build.gradle.kts b/libraries/kotlin.test/build.gradle.kts index 3aa47c27fdf..7f905263a04 100644 --- a/libraries/kotlin.test/build.gradle.kts +++ b/libraries/kotlin.test/build.gradle.kts @@ -1,10 +1,13 @@ @file:Suppress("UNUSED_VARIABLE") +import org.gradle.api.publish.internal.PublicationInternal import org.gradle.jvm.tasks.Jar import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl - +import plugins.configureDefaultPublishing +import plugins.configureKotlinPomAttributes +import plugins.publishing.* plugins { kotlin("multiplatform") @@ -398,3 +401,118 @@ configurations { } } } + + +configureDefaultPublishing() + +fun emptyJavadocJar(appendix: String? = null): TaskProvider = + tasks.register("emptyJavadocJar${appendix.orEmpty().capitalize()}") { + archiveAppendix = appendix + archiveClassifier = "javadoc" + } + +publishing { + val artifactBaseName = base.archivesName.get() + configureMultiModuleMavenPublishing { + val rootModule = module("rootModule") { + mavenPublication { + artifactId = artifactBaseName + configureKotlinPomAttributes(project, "Kotlin Test Multiplatform library") + artifact(emptyJavadocJar()) + } + variant("metadataApiElements") { suppressPomMetadataWarnings() } + variant("jvmApiElements") + variant("jvmRuntimeElements") { + configureVariantDetails { mapToMavenScope("runtime") } + } + variant("jvmSourcesElements") + variant("nativeApiElements") { + attributes { + attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY)) + attribute(TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE, objects.named("non-jvm")) + attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API)) + attribute(KotlinPlatformType.attribute, KotlinPlatformType.native) + } + } + } + val frameworkModules = jvmTestFrameworks.map { framework -> + module("${framework.lowercase()}Module") { + mavenPublication { + artifactId = "$artifactBaseName-${framework.lowercase()}" + configureKotlinPomAttributes(project, "Kotlin Test library support for ${framework}") + artifact(emptyJavadocJar(framework.lowercase())) + } + variant("jvm${framework}ApiElements") { suppressPomMetadataWarnings() } + variant("jvm${framework}RuntimeElements") { + suppressPomMetadataWarnings() + configureVariantDetails { mapToMavenScope("runtime") } + } + variant("jvm${framework}SourcesElements") { suppressPomMetadataWarnings() } + } + } + + val js = module("jsModule") { + mavenPublication { + artifactId = "$artifactBaseName-js" + configureKotlinPomAttributes(project, "Kotlin Test library for JS", packaging = "klib") + } + variant("jsApiElements") + variant("jsRuntimeElements") + variant("jsSourcesElements") + } + + val wasmJs = module("wasmJsModule") { + mavenPublication { + artifactId = "$artifactBaseName-wasm-js" + configureKotlinPomAttributes(project, "Kotlin Test library for experimental WebAssembly JS platform", packaging = "klib") + } + variant("wasmJsApiElements") + variant("wasmJsRuntimeElements") + variant("wasmJsSourcesElements") + } + val wasmWasi = module("wasmWasiModule") { + mavenPublication { + artifactId = "$artifactBaseName-wasm-wasi" + configureKotlinPomAttributes(project, "Kotlin Test library for experimental WebAssembly WASI platform", packaging = "klib") + } + variant("wasmWasiApiElements") + variant("wasmWasiRuntimeElements") + variant("wasmWasiSourcesElements") + } + + module("testCommonModule") { + mavenPublication { + artifactId = "$artifactBaseName-common" + configureKotlinPomAttributes(project, "Legacy artifact of Kotlin Test library. Use kotlin-test instead", packaging = "pom") + (this as PublicationInternal<*>).isAlias = true + } + variant("kotlinTestCommonElements") + } + module("testAnnotationsCommonModule") { + mavenPublication { + artifactId = "$artifactBaseName-annotations-common" + configureKotlinPomAttributes(project, "Legacy artifact of Kotlin Test library. Use kotlin-test instead", packaging = "pom") + (this as PublicationInternal<*>).isAlias = true + } + variant("kotlinTestAnnotationsCommonElements") + } + + // Makes all variants from accompanying artifacts visible through `available-at` + rootModule.include(js, *frameworkModules.toTypedArray(), wasmJs, wasmWasi) + } + + publications { + (listOf( + listOf("rootModule", "Main", "kotlin-test", "jvmRuntimeClasspath"), + listOf("jsModule", "Js", "kotlin-test-js", "jsRuntimeClasspath"), + listOf("wasmJsModule", "Wasm-Js", "kotlin-test-wasm-js", "wasmJsRuntimeClasspath"), + listOf("wasmWasiModule", "Wasm-Wasi", "kotlin-test-wasm-wasi", "wasmWasiRuntimeClasspath"), + listOf("testCommonModule", "Common", "kotlin-test-common", "kotlinTestCommonDependencies"), + listOf("testAnnotationsCommonModule", "AnnotationsCommon", "kotlin-test-annotations-common", "kotlinTestAnnotationsCommonDependencies"), + ) + jvmTestFrameworks.map { framework -> + listOf("${framework.lowercase()}Module", "$framework", "kotlin-test-${framework.lowercase()}", "jvm${framework}RuntimeDependencies") + }).forEach { (module, sbomTarget, sbomDocument, classpath) -> + configureSbom(sbomTarget, sbomDocument, setOf(classpath), named(module)) + } + } +} diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-annotations-common/kotlin-test-annotations-common.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-annotations-common/kotlin-test-annotations-common.pom index b54d2fa1bca..c6d66d82920 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-annotations-common/kotlin-test-annotations-common.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-annotations-common/kotlin-test-annotations-common.pom @@ -1,12 +1,18 @@ + + + + + 4.0.0 org.jetbrains.kotlin kotlin-test-annotations-common ArtifactsTest.version + pom Kotlin Test Annotations Common - Kotlin Test Common + Legacy artifact of Kotlin Test library. Use kotlin-test instead https://kotlinlang.org/ @@ -29,7 +35,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-test ArtifactsTest.version compile diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-common/kotlin-test-common.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-common/kotlin-test-common.pom index 2a5fcf574b0..4fa2e5d4b09 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-common/kotlin-test-common.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-common/kotlin-test-common.pom @@ -1,12 +1,18 @@ + + + + + 4.0.0 org.jetbrains.kotlin kotlin-test-common ArtifactsTest.version + pom Kotlin Test Common - Kotlin Test Common + Legacy artifact of Kotlin Test library. Use kotlin-test instead https://kotlinlang.org/ @@ -29,7 +35,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-test ArtifactsTest.version compile diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-js/kotlin-test-js.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-js/kotlin-test-js.pom index 428a0b66230..43164814393 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-js/kotlin-test-js.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-js/kotlin-test-js.pom @@ -12,7 +12,7 @@ ArtifactsTest.version klib Kotlin Test Js - Kotlin Test for JS + Kotlin Test library for JS https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit/kotlin-test-junit.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit/kotlin-test-junit.pom index d934cc96671..e102a014721 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit/kotlin-test-junit.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit/kotlin-test-junit.pom @@ -11,7 +11,7 @@ kotlin-test-junit ArtifactsTest.version Kotlin Test Junit - Kotlin Test Support for junit + Kotlin Test library support for JUnit https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit5/kotlin-test-junit5.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit5/kotlin-test-junit5.pom index dea82b3589e..6dd4b79630e 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit5/kotlin-test-junit5.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-junit5/kotlin-test-junit5.pom @@ -11,7 +11,7 @@ kotlin-test-junit5 ArtifactsTest.version Kotlin Test Junit5 - Kotlin Test Support for junit5 + Kotlin Test library support for JUnit5 https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-testng/kotlin-test-testng.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-testng/kotlin-test-testng.pom index 878fccf9ea1..26b59738f54 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-testng/kotlin-test-testng.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-testng/kotlin-test-testng.pom @@ -11,7 +11,7 @@ kotlin-test-testng ArtifactsTest.version Kotlin Test Testng - Kotlin Test Support for testng + Kotlin Test library support for TestNG https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-js/kotlin-test-wasm-js.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-js/kotlin-test-wasm-js.pom index 1460aa2485c..62c79a024e7 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-js/kotlin-test-wasm-js.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-js/kotlin-test-wasm-js.pom @@ -12,7 +12,7 @@ ArtifactsTest.version klib Kotlin Test Wasm Js - Kotlin Test for Wasm JS + Kotlin Test library for experimental WebAssembly JS platform https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-wasi/kotlin-test-wasm-wasi.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-wasi/kotlin-test-wasm-wasi.pom index 21618b78391..7cc473fc80b 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-wasi/kotlin-test-wasm-wasi.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test-wasm-wasi/kotlin-test-wasm-wasi.pom @@ -12,7 +12,7 @@ ArtifactsTest.version klib Kotlin Test Wasm Wasi - Kotlin Test for Wasm WASI + Kotlin Test library for experimental WebAssembly WASI platform https://kotlinlang.org/ diff --git a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test/kotlin-test.pom b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test/kotlin-test.pom index 21b07290e6f..7465268ac25 100644 --- a/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test/kotlin-test.pom +++ b/repo/artifacts-tests/src/test/resources/org/jetbrains/kotlin/kotlin-test/kotlin-test.pom @@ -1,5 +1,6 @@ - + @@ -30,6 +31,20 @@ scm:git:https://github.com/JetBrains/kotlin.git https://github.com/JetBrains/kotlin + + + + org.jetbrains.kotlin + kotlin-test-common + ArtifactsTest.version + + + org.jetbrains.kotlin + kotlin-test-annotations-common + ArtifactsTest.version + + + org.jetbrains.kotlin diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/CustomVariantPublishingDsl.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/CustomVariantPublishingDsl.kt index 07192c7cb56..0dcc66f9860 100644 --- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/CustomVariantPublishingDsl.kt +++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/plugins/CustomVariantPublishingDsl.kt @@ -71,6 +71,9 @@ class MultiModuleMavenPublishingConfiguration() { fun configureVariantDetails(code: ConfigurationVariantDetails.() -> Unit) { variantDetailsConfigurations += code } + + var suppressPomMetadataWarnings: Boolean = false + fun suppressPomMetadataWarnings() { suppressPomMetadataWarnings = true } } val mavenPublicationConfigurations = mutableListOf Unit>() @@ -124,6 +127,9 @@ fun Project.configureMultiModuleMavenPublishing(code: MultiModuleMavenPublishing from(component) val module = publishingConfiguration.modules[componentName]!! module.mavenPublicationConfigurations.forEach { configure -> configure() } + module.variants.values.filter { it.suppressPomMetadataWarnings }.forEach { + suppressPomMetadataWarningsFor(it.name) + } } } } @@ -145,7 +151,6 @@ fun Project.addVariant(component: AdhocComponentWithVariants, variant: MultiModu val configuration = configurations.getOrCreate(variant.configurationName) configuration.apply { isCanBeResolved = false - isCanBeConsumed = true variant.attributesConfigurations.forEach { configure -> attributes.configure() } }