Skip to content

Commit 62791cf

Browse files
committed
workflows: debos: Generate SBOM of rootfs with syft
Signed-off-by: Loïc Minier <[email protected]>
1 parent 5bda5c1 commit 62791cf

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

.github/workflows/debos.yml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ concurrency:
3131

3232
jobs:
3333
build-debos:
34+
name: Build and upload debos recipes
3435
runs-on: [self-hosted, arm64, debbuilder]
3536
container:
3637
image: debian:trixie
@@ -124,3 +125,81 @@ jobs:
124125
url="${FILESERVER_URL}/${BUILD_ID}/"
125126
curl -X POST -H 'Accept: text/event-stream' "${url}"
126127
128+
- name: Upload artifacts to fileserver space for downloads
129+
run: |
130+
set -ux
131+
# create a directory for the current run
132+
dir="/fileserver-downloads/${BUILD_ID}"
133+
mkdir -vp "${dir}"
134+
# copy output files
135+
cp -av rootfs.tar.gz "${dir}"
136+
137+
rootfs-sbom:
138+
name: Generate SBOM for rootfs with Syft
139+
# nowadays also available on arm64; set x86 for predictability
140+
runs-on: [self-hosted, x86]
141+
needs: build-debos
142+
container:
143+
image: debian:trixie
144+
volumes:
145+
- /srv/gh-runners/quic-yocto/builds:/fileserver-builds
146+
- /srv/gh-runners/quic-yocto/downloads:/fileserver-downloads
147+
steps:
148+
# make sure we have latest packages first, to get latest fixes and to
149+
# avoid an automated update while we're building
150+
- name: Update OS packages
151+
run: |
152+
set -ux
153+
apt update
154+
apt -y upgrade
155+
apt -y full-upgrade
156+
157+
- name: Retrieve rootfs from fileserver
158+
run: cp -av /fileserver-downloads/${BUILD_ID}/rootfs.tar.gz .
159+
160+
- name: Unpack rootfs
161+
run: mkdir -v rootfs && tar -C rootfs -xf rootfs.tar.gz
162+
163+
# Syft is not packaged in Debian; it's available as a binary tarball or
164+
# as container image from upstream
165+
- name: Install Syft
166+
run: |
167+
set -ux
168+
apt -y install curl
169+
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh
170+
171+
- name: Generate SBOMs with Syft
172+
run: |
173+
set -ux
174+
# TODO should probably restrict catalogers a bit as the rootfs is
175+
# built entirely from deb packages
176+
bin/syft --version
177+
SYFT_FORMAT_PRETTY=true bin/syft \
178+
-o cyclonedx-json=rootfs-sbom.cyclonedx.json \
179+
-o spdx-json=rootfs-sbom.spdx.json \
180+
-o syft-json=rootfs-sbom.syft.json \
181+
-o syft-text=rootfs-sbom.syft.txt \
182+
-o syft-table \
183+
--parallelism `nproc` \
184+
--source-name qualcomm-linux-debian-rootfs \
185+
--source-version "${BUILD_ID}" \
186+
-v \
187+
scan rootfs
188+
# compress SBOMs
189+
gzip rootfs-sbom*
190+
191+
- name: Upload SBOMs to fileserver space for builds
192+
run: |
193+
set -ux
194+
# curl will be used to talk to fileserver; should be installed by
195+
# default
196+
apt -y install curl
197+
# create a directory for the current run
198+
dir="/fileserver-builds/${BUILD_ID}"
199+
mkdir -vp "${dir}"
200+
# copy SBOMs to fileserver
201+
cp -av rootfs-sbom*.gz "${dir}"
202+
# instruct fileserver to publish this directory
203+
url="${FILESERVER_URL}/${BUILD_ID}/"
204+
curl -X POST -H 'Accept: text/event-stream' "${url}"
205+

0 commit comments

Comments
 (0)