From 53ce5c22ca99207a2517e36972751e364adec24c Mon Sep 17 00:00:00 2001 From: Bogdan Mukvich Date: Thu, 15 Jun 2023 16:09:33 +0200 Subject: [PATCH] Add SBOM publishing for kotlin-test libraries ^KTI-1273 --- buildSrc/src/main/kotlin/sbom.kt | 9 ++-- libraries/kotlin.test/build.gradle.kts | 66 ++++++++++++++++++-------- 2 files changed, 49 insertions(+), 26 deletions(-) diff --git a/buildSrc/src/main/kotlin/sbom.kt b/buildSrc/src/main/kotlin/sbom.kt index 137a74ee350..0117270b5c0 100644 --- a/buildSrc/src/main/kotlin/sbom.kt +++ b/buildSrc/src/main/kotlin/sbom.kt @@ -20,8 +20,9 @@ fun Project.configureSbom( target: String? = null, documentName: String? = null, gradleConfigurations: Iterable = setOf("runtimeClasspath"), - publication: NamedDomainObjectProvider? = null + publication: NamedDomainObjectProvider? = null, ): TaskProvider { + assert(target == null && publication != null) { "provided publication will be ignored when target is null" } val project = this val targetName = target ?: "${mainPublicationName}Publication" apply() @@ -69,10 +70,8 @@ fun Project.configureSbom( mainPublication.artifact(sbomArtifact) } } else if (publication != null) { - pluginManager.withPlugin("kotlin-build-publishing") { - publication.configure { - artifact(sbomArtifact) - } + publication.configure { + artifact(sbomArtifact) } } diff --git a/libraries/kotlin.test/build.gradle.kts b/libraries/kotlin.test/build.gradle.kts index c0d16ea7c73..8044c616afe 100644 --- a/libraries/kotlin.test/build.gradle.kts +++ b/libraries/kotlin.test/build.gradle.kts @@ -21,7 +21,7 @@ val componentFactory = objects.newInstance().factory val jvmApi by configurations.creating { isCanBeConsumed = true - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-api")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm) @@ -30,7 +30,7 @@ val jvmApi by configurations.creating { val jvmRuntime by configurations.creating { isCanBeConsumed = true - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-runtime")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm) @@ -40,7 +40,7 @@ val jvmRuntime by configurations.creating { val jsApiVariant by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.js) @@ -48,7 +48,7 @@ val jsApiVariant by configurations.creating { } val jsRuntimeVariant by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.js) @@ -58,7 +58,7 @@ val jsRuntimeVariant by configurations.creating { val wasmApiVariant by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm) @@ -66,7 +66,7 @@ val wasmApiVariant by configurations.creating { } val wasmRuntimeVariant by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm) @@ -76,7 +76,7 @@ val wasmRuntimeVariant by configurations.creating { val nativeApiVariant by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.native) @@ -85,7 +85,7 @@ val nativeApiVariant by configurations.creating { val commonVariant by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) @@ -113,8 +113,8 @@ dependencies { jvmApi(project(":kotlin-stdlib")) jsApiVariant("$group:kotlin-test-js:$version") wasmApiVariant("$group:kotlin-test-wasm:$version") - commonVariant("$group:kotlin-test-common:$version") - commonVariant("$group:kotlin-test-annotations-common:$version") + commonVariant(project(":kotlin-test:kotlin-test-common")) + commonVariant(project(":kotlin-test:kotlin-test-annotations-common")) kotlinTestCommonSources(project(":kotlin-test:kotlin-test-common")) kotlinTestJvmSources(project(":kotlin-test:kotlin-test-jvm")) } @@ -200,7 +200,7 @@ jvmTestFrameworks.forEach { framework -> val (apiElements, runtimeElements) = listOf("api", "runtime").map { usage -> configurations.create("${framework}${usage.capitalize()}") { isCanBeConsumed = true - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-$usage")) } @@ -256,7 +256,7 @@ commonVariant.apply { val (jsApi, jsRuntime) = listOf("api", "runtime").map { usage -> configurations.create("js${usage.capitalize()}") { isCanBeConsumed = true - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.js) @@ -287,7 +287,7 @@ val jsComponent = componentFactory.adhoc("js").apply { val (wasmApi, wasmRuntime) = listOf("api", "runtime").map { usage -> configurations.create("wasm${usage.capitalize()}") { isCanBeConsumed = true - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm) @@ -321,7 +321,7 @@ val wasmComponent = componentFactory.adhoc("wasm").apply { val commonMetadata by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) @@ -329,7 +329,7 @@ val commonMetadata by configurations.creating { } val annotationsMetadata by configurations.creating { isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) @@ -362,7 +362,7 @@ configureDefaultPublishing() publishing { publications { - create("main", MavenPublication::class) { + val mainPublication = register("main", MavenPublication::class) { from(rootComponent) artifact(combinedSourcesJar) // Remove all optional dependencies from the root pom @@ -376,39 +376,63 @@ publishing { configureKotlinPomAttributes(project, "Kotlin Test Multiplatform library") suppressAllPomMetadataWarnings() } + configureSbom( + "Main", "kotlin-test", + setOf(jvmRuntime.name, commonVariant.name), mainPublication + ) jvmTestFrameworks.forEach { framework -> - create(framework, MavenPublication::class) { + val publication = register(framework, MavenPublication::class) { artifactId = "kotlin-test-$framework" from(components[framework]) artifact(tasks.getByPath(":kotlin-test:kotlin-test-$framework:sourcesJar") as Jar) configureKotlinPomAttributes(project, "Kotlin Test Support for $framework") suppressAllPomMetadataWarnings() } + configureSbom( + framework.capitalize(), "kotlin-test-$framework", + setOf("${framework}Api", commonVariant.name), publication + ) } - create("js", MavenPublication::class) { + val kotlinTestJsPublication = register("js", MavenPublication::class) { artifactId = "kotlin-test-js" from(jsComponent) artifact(tasks.getByPath(":kotlin-test:kotlin-test-js:sourcesJar") as Jar) configureKotlinPomAttributes(project, "Kotlin Test for JS") } - create("wasm", MavenPublication::class) { + configureSbom( + "Js", "kotlin-test-js", + setOf(jsRuntime.name, commonVariant.name), kotlinTestJsPublication + ) + val kotlinTestWasmPublication = register("wasm", MavenPublication::class) { artifactId = "kotlin-test-wasm" from(wasmComponent) artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm:sourcesJar") as Jar) configureKotlinPomAttributes(project, "Kotlin Test for WASM", packaging = "klib") } - create("common", MavenPublication::class) { + configureSbom( + "Wasm", "kotlin-test-wasm", + setOf(wasmRuntime.name, commonVariant.name), kotlinTestWasmPublication + ) + val kotlinTestCommonPublication = register("common", MavenPublication::class) { artifactId = "kotlin-test-common" from(commonMetadataComponent) artifact(tasks.getByPath(":kotlin-test:kotlin-test-common:sourcesJar") as Jar) configureKotlinPomAttributes(project, "Kotlin Test Common") } - create("annotationsCommon", MavenPublication::class) { + configureSbom( + "Common", "kotlin-test-common", + setOf(commonMetadata.name), kotlinTestCommonPublication + ) + val annotationsCommonPublication = register("annotationsCommon", MavenPublication::class) { artifactId = "kotlin-test-annotations-common" from(annotationsMetadataComponent) artifact(tasks.getByPath(":kotlin-test:kotlin-test-annotations-common:sourcesJar") as Jar) configureKotlinPomAttributes(project, "Kotlin Test Common") } + configureSbom( + "AnnotationsCommon", "kotlin-test-annotations-common", + setOf(annotationsMetadata.name), annotationsCommonPublication + ) withType { artifact(emptyJavadocJar) }