Skip to content

Commit ca35897

Browse files
committed
build: generate spdx.json, not "tag value" format
Generates .spdx.json files in SPDX-json format instead of tag/value. This appears to be more machine friendly. Use jq with "null" input and \(env.<environment-variable-name>) string interpolation in templates. Move all this to a new ./sbom/ subdirectory.
1 parent c4dd27c commit ca35897

File tree

4 files changed

+68
-70
lines changed

4 files changed

+68
-70
lines changed

Makefile

+8-66
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ ifndef FDIST_VERSION
9292
FDIST_VERSION := $(DIST_VERSION)
9393
endif
9494

95+
export REL_VERSION FDIST_VERSION
96+
9597
all: module tools
9698

9799
.PHONY: all tools module
@@ -189,76 +191,15 @@ drbd/.drbd_git_revision: FORCE
189191
@echo >&2 "Need a git checkout to regenerate $@"; test -s $@
190192
endif
191193

192-
export define SPDX_TEMPLATE
193-
SPDXVersion: SPDX-2.3
194-
DataLicense: CC0-1.0
195-
SPDXID: SPDXRef-DOCUMENT
196-
DocumentName: drbd kernel module SBOM (software bill of materials)
197-
DocumentNamespace: https://linbit.org/spdx-docs/drbd-kmod-$(SPDX_VERSION)-$(SPDX_UUID)
198-
Creator: Person: Philipp Reisner ([email protected])
199-
Created: $(SPDX_DATE)
200-
201-
PackageName: $(SPDX_PKG_NAME)
202-
SPDXID: SPDXRef-Package-$(SPDX_PKG_NAME)
203-
PackageVersion: $(SPDX_VERSION)
204-
PackageSupplier: Organization: LINBIT HA-Solutions GmbH
205-
PackageDownloadLocation: https://github.com/LINBIT/drbd
206-
FilesAnalyzed: false
207-
PackageLicenseDeclared: GPL-2.0-only
208-
PackageCopyrightText: <text>2001-2008, LINBIT Information Technologies GmbH
209-
2008-$(SPDX_YEAR), LINBIT HA-Solutions GmbH</text>
210-
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-$(SPDX_PKG_NAME)
211-
endef
212-
213-
# only call this wrapper from drbd-kmod_{sles,rhel}.spdx
214-
.PHONY: spdx-file
215-
spdx-file:
216-
@echo "$$SPDX_TEMPLATE" > $(SPDX_FILE_TMP)
217-
218-
.PHONY: drbd-kmod_rhel.spdx drbd-kmod_sles.spdx
219-
drbd-kmod_rhel.spdx drbd-kmod_sles.spdx:
220-
@set -e; ( truncate -s0 $@.tmp; \
221-
SPDX_DATE="$$(date --utc +%FT%TZ)"; \
222-
SPDX_UUID="$$(cat /proc/sys/kernel/random/uuid)"; \
223-
SPDX_VERSION="$(REL_VERSION)"; \
224-
SPDX_YEAR="$$(date --utc +%Y)"; \
225-
case "$@" in \
226-
drbd-kmod_rhel.spdx) SPDX_PKG_NAME=kmod-drbd;; \
227-
drbd-kmod_sles.spdx) SPDX_PKG_NAME=drbd-kmp-default;; \
228-
*) false;; \
229-
esac; \
230-
test -n "$$SPDX_TEMPLATE"; \
231-
test -n "$$SPDX_DATE"; \
232-
test -n "$$SPDX_UUID"; \
233-
test -n "$$SPDX_VERSION"; \
234-
test -n "$$SPDX_YEAR"; \
235-
$(MAKE) spdx-file SPDX_UUID="$$SPDX_UUID" \
236-
SPDX_DATE="$$SPDX_DATE" \
237-
SPDX_FILE_TMP="$@.tmp" \
238-
SPDX_PKG_NAME="$$SPDX_PKG_NAME" \
239-
SPDX_VERSION="$$SPDX_VERSION" \
240-
SPDX_YEAR="$$SPDX_YEAR"; \
241-
mv $@.tmp $@; )
242-
243-
# only call this wrapper from drbd-kmod.cdx.json
244-
.PHONY: cdx-sub
245-
cdx-sub:
246-
cat $(CDX_FILE).in | jq --args '.metadata.timestamp = "$(CDX_DATE)" | .metadata.component.version = "$(FDIST_VERSION)" | .metadata.component."bom-ref" = "$(PURL)" | .metadata.component.purl = "$(PURL)"' > $(CDX_FILE)
247-
248-
.PHONY: drbd-kmod.cdx.json
249-
drbd-kmod.cdx.json:
250-
$(MAKE) -s cdx-sub CDX_DATE="$$(date --utc +%FT%TZ)" PURL="pkg:github/LINBIT/drbd@drbd-$(FDIST_VERSION)" CDX_FILE="$@"
251-
! grep -q __PLACEHOLDER__ $@
252-
253194
# update of .filelist is forced:
254195
.fdist_version: FORCE
255196
@test -s $@ && test "$$(cat $@)" = "$(FDIST_VERSION)" || echo "$(FDIST_VERSION)" > $@
256197

257198
.filelist: .fdist_version FORCE
258199
@$(GIT) ls-files --recurse -- ':!:.git*' $(if $(PRESERVE_DEBIAN),,':!:debian') > $@.new
200+
@test -s $@.new # assert there is something in .filelist.new now
259201
@mkdir -p drbd/drbd-kernel-compat/cocci_cache/
260202
@find drbd/drbd-kernel-compat/cocci_cache/ -type f -not -path '*/\.*' >> $@.new
261-
@test -s $@.new # assert there is something in .filelist.new now
262203
@mv $@.new $@
263204
@echo "./.filelist updated."
264205

@@ -273,9 +214,10 @@ drbd-kmod.cdx.json:
273214
comma := ,
274215
backslash_comma := \,
275216
escape_comma = $(subst $(comma),$(backslash_comma),$(1))
276-
tgz-extra-files := \
277-
.fdist_version drbd/.drbd_git_revision .filelist \
278-
drbd-kmod_rhel.spdx drbd-kmod_sles.spdx drbd-kmod.cdx.json
217+
tgz-extra-files := .fdist_version drbd/.drbd_git_revision .filelist
218+
tgz-extra-files += sbom/drbd-kmod_rhel.spdx.json
219+
tgz-extra-files += sbom/drbd-kmod_sles.spdx.json
220+
tgz-extra-files += sbom/drbd-kmod.cdx.json
279221
tgz:
280222
test -s .filelist # .filelist must be present
281223
test -n "$(FDIST_VERSION)" # FDIST_VERSION must be known
@@ -318,7 +260,7 @@ debrelease:
318260
tarball:
319261
$(MAKE) distclean
320262
$(MAKE) check-submods check_all_committed drbd/.drbd_git_revision
321-
$(MAKE) drbd-kmod_rhel.spdx drbd-kmod_sles.spdx drbd-kmod.cdx.json
263+
$(MAKE) -C sbom drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json drbd-kmod.cdx.json
322264
$(MAKE) .filelist
323265
$(MAKE) tgz
324266

sbom/Makefile

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
2+
# we inherit some variables from our "parent" Makefile
3+
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
4+
$(foreach v,REL_VERSION FDIST_VERSION,$(if $($(v)),,$(error "Do not use this Makefile ($(THIS_MAKEFILE)) directly! ($(v) missing))))
5+
6+
all: drbd-kmod.cdx.json drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json
7+
8+
export SPDX_VERSION SPDX_DATE SPDX_YEAR SPDX_UUID SPDX_PKG_NAME
9+
SPDX_VERSION:=$(REL_VERSION)
10+
SPDX_DATE:=$(shell date --utc +%FT%TZ)
11+
SPDX_YEAR:=$(firstword $(subst -, ,$(SPDX_DATE)))
12+
drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json: SPDX_UUID:=$(shell cat /proc/sys/kernel/random/uuid)
13+
drbd-kmod_rhel.spdx.json: SPDX_PKG_NAME:=kmod-drbd
14+
drbd-kmod_sles.spdx.json: SPDX_PKG_NAME:=drbd-kmp-default
15+
drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json: FORCE
16+
@rm -f $@; jq -n -f drbd-kmod.spdx.json.in > $@.tmp && mv $@.tmp $@
17+
18+
# uses:
19+
# SPDX_DATE from above and FDIST_VERSION from parent Makefile
20+
drbd-kmod.cdx.json: FORCE
21+
@rm -f $@; jq -n -f drbd-kmod.cdx.json.in > $@.tmp && mv $@.tmp $@
22+
23+
.PHONY: FORCE
24+
FORCE:

drbd-kmod.cdx.json.in sbom/drbd-kmod.cdx.json.in

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"bomFormat": "CycloneDX",
33
"specVersion": "1.5",
44
"metadata": {
5-
"timestamp": "__PLACEHOLDER__",
5+
"timestamp": "\(env.SPDX_DATE)",
66
"authors": [
77
{
88
"name": "Philipp Reisner",
@@ -16,9 +16,9 @@
1616
"component": {
1717
"type": "application",
1818
"name": "kmod-drbd",
19-
"version": "__PLACEHOLDER__",
20-
"bom-ref": "__PLACEHOLDER__",
21-
"purl": "__PLACEHOLDER__",
19+
"version": "\(env.FDIST_VERSION)",
20+
"bom-ref": "pkg:github/LINBIT/drbd@drbd-\(env.FDIST_VERSION)",
21+
"purl": "pkg:github/LINBIT/drbd@drbd-\(env.FDIST_VERSION)",
2222
"licenses": [
2323
{
2424
"licenses": {

sbom/drbd-kmod.spdx.json.in

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"SPDXID": "SPDXRef-DOCUMENT",
3+
"spdxVersion": "SPDX-2.3",
4+
"creationInfo": {
5+
"created": "\(env.SPDX_DATE)",
6+
"creators": [
7+
"Person: Philipp Reisner ([email protected])"
8+
]
9+
},
10+
"name": "drbd kernel module SBOM (software bill of materials)",
11+
"dataLicense": "CC0-1.0",
12+
"documentNamespace": "https://linbit.org/spdx-docs/drbd-kmod-\(env.SPDX_VERSION)-\(env.SPDX_UUID)",
13+
"packages": [
14+
{
15+
"SPDXID": "SPDXRef-Package-\(env.SPDX_PKG_NAME)",
16+
"copyrightText": "2001-2008, LINBIT Information Technologies GmbH\n2008-\(env.SPDX_YEAR), LINBIT HA-Solutions GmbH",
17+
"downloadLocation": "https://github.com/LINBIT/drbd",
18+
"filesAnalyzed": false,
19+
"licenseDeclared": "GPL-2.0-only",
20+
"name": "\(env.SPDX_PKG_NAME)",
21+
"supplier": "Organization: LINBIT HA-Solutions GmbH",
22+
"versionInfo": "\(env.SPDX_VERSION)"
23+
}
24+
],
25+
"relationships": [
26+
{
27+
"spdxElementId": "SPDXRef-DOCUMENT",
28+
"relationshipType": "DESCRIBES",
29+
"relatedSpdxElement": "SPDXRef-Package-\(env.SPDX_PKG_NAME)"
30+
}
31+
]
32+
}

0 commit comments

Comments
 (0)