Skip to content

Commit 6ad9e70

Browse files
committed
Generate an SBOM for the javaagent artifact
We have been asked to generate SBOMs for published assets that are either natively compiled, or have vendored/embedded dependencies. In java, this mainly applies to the javaagent.
1 parent 2bad781 commit 6ad9e70

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

.github/workflows/build-common.yml

+12
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,18 @@ jobs:
172172
path: javaagent/build/libs/opentelemetry-javaagent-*-SNAPSHOT.jar
173173
if-no-files-found: ignore
174174

175+
- shell: bash
176+
name: Collect SBOM's
177+
run: |
178+
mkdir sboms
179+
find . -path ./sboms -prune -o -name "*.spdx.json" -exec mv {} ./sboms/ \;
180+
181+
- uses: actions/upload-artifact@v4
182+
name: Save SBOM's to build
183+
with:
184+
name: opentelemetry-java-instrumentation-SBOM-${{ matrix.os }}-${{ matrix.test-java-version }}.zip
185+
path: "sboms/*.json"
186+
175187
test:
176188
name: test${{ matrix.test-partition }} (${{ matrix.test-java-version }}, ${{ matrix.vm }})
177189
runs-on: ubuntu-latest

.github/workflows/release.yml

+14
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,19 @@ jobs:
109109
arguments: build publishPlugins publishPluginMavenPublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository
110110
build-root-directory: gradle-plugins
111111

112+
- shell: bash
113+
name: Collect SBOM's
114+
run: |
115+
mkdir sboms
116+
find . -path ./sboms -prune -o -name "*.spdx.json" -exec mv {} ./sboms/ \;
117+
zip opentelemetry-java-instrumentation-SBOM.zip sboms/*
118+
119+
- uses: actions/upload-artifact@v4
120+
name: Save SBOM's to build
121+
with:
122+
name: opentelemetry-java-instrumentation-SBOM.zip
123+
path: "sboms/*.json"
124+
112125
- name: Generate release notes
113126
env:
114127
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -162,6 +175,7 @@ jobs:
162175
--title "Version $VERSION" \
163176
--notes-file /tmp/release-notes.txt \
164177
v$VERSION \
178+
opentelemetry-java-instrumentation-SBOM.zip \
165179
opentelemetry-javaagent.jar
166180
167181
echo "version=$VERSION" >> $GITHUB_OUTPUT

conventions/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ dependencies {
6262
implementation("com.gradle.enterprise:com.gradle.enterprise.gradle.plugin:3.17")
6363
implementation("org.owasp:dependency-check-gradle:9.1.0")
6464
implementation("ru.vyarus:gradle-animalsniffer-plugin:1.7.1")
65+
implementation("org.spdx:spdx-gradle-plugin:0.5.0")
6566
// When updating, also update dependencyManagement/build.gradle.kts
6667
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.14.13")
6768
implementation("gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.9.0")

javaagent/build.gradle.kts

+38
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
22
import com.github.jk1.license.filter.LicenseBundleNormalizer
33
import com.github.jk1.license.render.InventoryMarkdownReportRenderer
4+
import java.util.*
45

56
plugins {
67
id("com.github.jk1.dependency-license-report")
78

89
id("otel.java-conventions")
910
id("otel.publish-conventions")
1011
id("io.opentelemetry.instrumentation.javaagent-shadowing")
12+
id("org.spdx.sbom")
1113
}
1214

1315
description = "OpenTelemetry Javaagent"
@@ -271,6 +273,42 @@ with(components["java"] as AdhocComponentWithVariants) {
271273
}
272274
}
273275

276+
spdxSbom {
277+
targets {
278+
// Create a target to match the published jar name.
279+
// This is used for the task name (spdxSbomFor<SbomName>)
280+
// and output file (<sbomName>.spdx.json).
281+
create("opentelemetry-java_opentelemetry-javaagent") {
282+
configurations.set(listOf("baseJavaagentLibs"))
283+
scm {
284+
uri.set("https://github.com/" + System.getenv("GITHUB_REPOSITORY"))
285+
revision.set(System.getenv("GITHUB_SHA"))
286+
}
287+
document {
288+
name.set("opentelemetry-java_opentelemetry-javaagent")
289+
namespace.set("https://opentelemetry.io/spdx/" + UUID.randomUUID())
290+
}
291+
}
292+
}
293+
}
294+
tasks.named("check") {
295+
dependsOn("spdxSbom")
296+
}
297+
tasks.named("assemble") {
298+
dependsOn("spdxSbom")
299+
}
300+
tasks.withType<AbstractPublishToMaven> {
301+
dependsOn("spdxSbom")
302+
}
303+
project.afterEvaluate {
304+
tasks.withType<PublishToMavenLocal>().configureEach {
305+
this.getPublication().artifact("${layout.buildDirectory.get()}/spdx/opentelemetry-java_opentelemetry-javaagent.spdx.json") {
306+
classifier = "spdx"
307+
extension = "json"
308+
}
309+
}
310+
}
311+
274312
licenseReport {
275313
outputDir = rootProject.file("licenses").absolutePath
276314

0 commit comments

Comments
 (0)