Add SBOM publishing for kotlin-test libraries

^KTI-1273
This commit is contained in:
Bogdan Mukvich
2023-06-15 16:09:33 +02:00
committed by Space Team
parent 9cfc66ae77
commit 53ce5c22ca
2 changed files with 49 additions and 26 deletions
+4 -5
View File
@@ -20,8 +20,9 @@ fun Project.configureSbom(
target: String? = null, target: String? = null,
documentName: String? = null, documentName: String? = null,
gradleConfigurations: Iterable<String> = setOf("runtimeClasspath"), gradleConfigurations: Iterable<String> = setOf("runtimeClasspath"),
publication: NamedDomainObjectProvider<MavenPublication>? = null publication: NamedDomainObjectProvider<MavenPublication>? = null,
): TaskProvider<SpdxSbomTask> { ): TaskProvider<SpdxSbomTask> {
assert(target == null && publication != null) { "provided publication will be ignored when target is null" }
val project = this val project = this
val targetName = target ?: "${mainPublicationName}Publication" val targetName = target ?: "${mainPublicationName}Publication"
apply<SpdxSbomPlugin>() apply<SpdxSbomPlugin>()
@@ -69,10 +70,8 @@ fun Project.configureSbom(
mainPublication.artifact(sbomArtifact) mainPublication.artifact(sbomArtifact)
} }
} else if (publication != null) { } else if (publication != null) {
pluginManager.withPlugin("kotlin-build-publishing") { publication.configure {
publication.configure { artifact(sbomArtifact)
artifact(sbomArtifact)
}
} }
} }
+45 -21
View File
@@ -21,7 +21,7 @@ val componentFactory = objects.newInstance<ComponentsFactoryAccess>().factory
val jvmApi by configurations.creating { val jvmApi by configurations.creating {
isCanBeConsumed = true isCanBeConsumed = true
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-api")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm) attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm)
@@ -30,7 +30,7 @@ val jvmApi by configurations.creating {
val jvmRuntime by configurations.creating { val jvmRuntime by configurations.creating {
isCanBeConsumed = true isCanBeConsumed = true
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-runtime")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-runtime"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm) attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm)
@@ -40,7 +40,7 @@ val jvmRuntime by configurations.creating {
val jsApiVariant by configurations.creating { val jsApiVariant by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js) attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
@@ -48,7 +48,7 @@ val jsApiVariant by configurations.creating {
} }
val jsRuntimeVariant by configurations.creating { val jsRuntimeVariant by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js) attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
@@ -58,7 +58,7 @@ val jsRuntimeVariant by configurations.creating {
val wasmApiVariant by configurations.creating { val wasmApiVariant by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm) attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
@@ -66,7 +66,7 @@ val wasmApiVariant by configurations.creating {
} }
val wasmRuntimeVariant by configurations.creating { val wasmRuntimeVariant by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-runtime"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm) attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
@@ -76,7 +76,7 @@ val wasmRuntimeVariant by configurations.creating {
val nativeApiVariant by configurations.creating { val nativeApiVariant by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.native) attribute(KotlinPlatformType.attribute, KotlinPlatformType.native)
@@ -85,7 +85,7 @@ val nativeApiVariant by configurations.creating {
val commonVariant by configurations.creating { val commonVariant by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
@@ -113,8 +113,8 @@ dependencies {
jvmApi(project(":kotlin-stdlib")) jvmApi(project(":kotlin-stdlib"))
jsApiVariant("$group:kotlin-test-js:$version") jsApiVariant("$group:kotlin-test-js:$version")
wasmApiVariant("$group:kotlin-test-wasm:$version") wasmApiVariant("$group:kotlin-test-wasm:$version")
commonVariant("$group:kotlin-test-common:$version") commonVariant(project(":kotlin-test:kotlin-test-common"))
commonVariant("$group:kotlin-test-annotations-common:$version") commonVariant(project(":kotlin-test:kotlin-test-annotations-common"))
kotlinTestCommonSources(project(":kotlin-test:kotlin-test-common")) kotlinTestCommonSources(project(":kotlin-test:kotlin-test-common"))
kotlinTestJvmSources(project(":kotlin-test:kotlin-test-jvm")) kotlinTestJvmSources(project(":kotlin-test:kotlin-test-jvm"))
} }
@@ -200,7 +200,7 @@ jvmTestFrameworks.forEach { framework ->
val (apiElements, runtimeElements) = listOf("api", "runtime").map { usage -> val (apiElements, runtimeElements) = listOf("api", "runtime").map { usage ->
configurations.create("${framework}${usage.capitalize()}") { configurations.create("${framework}${usage.capitalize()}") {
isCanBeConsumed = true isCanBeConsumed = true
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-$usage")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("java-$usage"))
} }
@@ -256,7 +256,7 @@ commonVariant.apply {
val (jsApi, jsRuntime) = listOf("api", "runtime").map { usage -> val (jsApi, jsRuntime) = listOf("api", "runtime").map { usage ->
configurations.create("js${usage.capitalize()}") { configurations.create("js${usage.capitalize()}") {
isCanBeConsumed = true isCanBeConsumed = true
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js) attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
@@ -287,7 +287,7 @@ val jsComponent = componentFactory.adhoc("js").apply {
val (wasmApi, wasmRuntime) = listOf("api", "runtime").map { usage -> val (wasmApi, wasmRuntime) = listOf("api", "runtime").map { usage ->
configurations.create("wasm${usage.capitalize()}") { configurations.create("wasm${usage.capitalize()}") {
isCanBeConsumed = true isCanBeConsumed = true
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-$usage"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm) attribute(KotlinPlatformType.attribute, KotlinPlatformType.wasm)
@@ -321,7 +321,7 @@ val wasmComponent = componentFactory.adhoc("wasm").apply {
val commonMetadata by configurations.creating { val commonMetadata by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
@@ -329,7 +329,7 @@ val commonMetadata by configurations.creating {
} }
val annotationsMetadata by configurations.creating { val annotationsMetadata by configurations.creating {
isCanBeConsumed = false isCanBeConsumed = false
isCanBeResolved = false isCanBeResolved = true
attributes { attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api")) attribute(Usage.USAGE_ATTRIBUTE, objects.named("kotlin-api"))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
@@ -362,7 +362,7 @@ configureDefaultPublishing()
publishing { publishing {
publications { publications {
create("main", MavenPublication::class) { val mainPublication = register("main", MavenPublication::class) {
from(rootComponent) from(rootComponent)
artifact(combinedSourcesJar) artifact(combinedSourcesJar)
// Remove all optional dependencies from the root pom // Remove all optional dependencies from the root pom
@@ -376,39 +376,63 @@ publishing {
configureKotlinPomAttributes(project, "Kotlin Test Multiplatform library") configureKotlinPomAttributes(project, "Kotlin Test Multiplatform library")
suppressAllPomMetadataWarnings() suppressAllPomMetadataWarnings()
} }
configureSbom(
"Main", "kotlin-test",
setOf(jvmRuntime.name, commonVariant.name), mainPublication
)
jvmTestFrameworks.forEach { framework -> jvmTestFrameworks.forEach { framework ->
create(framework, MavenPublication::class) { val publication = register(framework, MavenPublication::class) {
artifactId = "kotlin-test-$framework" artifactId = "kotlin-test-$framework"
from(components[framework]) from(components[framework])
artifact(tasks.getByPath(":kotlin-test:kotlin-test-$framework:sourcesJar") as Jar) artifact(tasks.getByPath(":kotlin-test:kotlin-test-$framework:sourcesJar") as Jar)
configureKotlinPomAttributes(project, "Kotlin Test Support for $framework") configureKotlinPomAttributes(project, "Kotlin Test Support for $framework")
suppressAllPomMetadataWarnings() 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" artifactId = "kotlin-test-js"
from(jsComponent) from(jsComponent)
artifact(tasks.getByPath(":kotlin-test:kotlin-test-js:sourcesJar") as Jar) artifact(tasks.getByPath(":kotlin-test:kotlin-test-js:sourcesJar") as Jar)
configureKotlinPomAttributes(project, "Kotlin Test for JS") 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" artifactId = "kotlin-test-wasm"
from(wasmComponent) from(wasmComponent)
artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm:sourcesJar") as Jar) artifact(tasks.getByPath(":kotlin-test:kotlin-test-wasm:sourcesJar") as Jar)
configureKotlinPomAttributes(project, "Kotlin Test for WASM", packaging = "klib") 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" artifactId = "kotlin-test-common"
from(commonMetadataComponent) from(commonMetadataComponent)
artifact(tasks.getByPath(":kotlin-test:kotlin-test-common:sourcesJar") as Jar) artifact(tasks.getByPath(":kotlin-test:kotlin-test-common:sourcesJar") as Jar)
configureKotlinPomAttributes(project, "Kotlin Test Common") 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" artifactId = "kotlin-test-annotations-common"
from(annotationsMetadataComponent) from(annotationsMetadataComponent)
artifact(tasks.getByPath(":kotlin-test:kotlin-test-annotations-common:sourcesJar") as Jar) artifact(tasks.getByPath(":kotlin-test:kotlin-test-annotations-common:sourcesJar") as Jar)
configureKotlinPomAttributes(project, "Kotlin Test Common") configureKotlinPomAttributes(project, "Kotlin Test Common")
} }
configureSbom(
"AnnotationsCommon", "kotlin-test-annotations-common",
setOf(annotationsMetadata.name), annotationsCommonPublication
)
withType<MavenPublication> { withType<MavenPublication> {
artifact(emptyJavadocJar) artifact(emptyJavadocJar)
} }