Skip to content

Commit b622f3e

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

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

.github/workflows/debos.yml

Lines changed: 80 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,82 @@ 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+
syft:
138+
name: Run Syft on rootfs
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 -xvf rootfs.tar.gz
162+
163+
# this is the upstream provided script; Syft is not packaged in Debian;
164+
# it's also available as a container image, but with a similar if not
165+
# worse consumption model
166+
- name: Install Syft
167+
run: |
168+
set -ux
169+
apt -y install curl
170+
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh
171+
172+
- name: Generate SBOMs with Syft
173+
run: |
174+
set -ux
175+
# TODO should probably restrict catalogers a bit as the rootfs is
176+
# built entirely from deb packages
177+
bin/syft --version
178+
SYFT_FORMAT_JSON_PRETTY=true bin/syft -v \
179+
-o cyclonedx-json=rootfs-sbom.cyclonedx.json \
180+
-o spdx-json=rootfs-sbom.spdx.json \
181+
-o syft-json=rootfs-sbom.syft.json \
182+
-o syft-text=rootfs-sbom.syft.txt \
183+
-o syft-table \
184+
--parallelism `nproc` \
185+
--source-name qualcomm-linux-debian-rootfs \
186+
--source-version "${BUILD_ID}" \
187+
-v \
188+
scan rootfs
189+
# compress SBOMs
190+
gzip rootfs-sbom*
191+
192+
- name: Upload SBOMs to fileserver space for builds
193+
run: |
194+
set -ux
195+
# curl will be used to talk to fileserver; should be installed by
196+
# default
197+
apt -y install curl
198+
# create a directory for the current run
199+
dir="/fileserver-builds/${BUILD_ID}"
200+
mkdir -vp "${dir}"
201+
# copy SBOMs to fileserver
202+
cp -av rootfs-sbom*.gz "${dir}"
203+
# instruct fileserver to publish this directory
204+
url="${FILESERVER_URL}/${BUILD_ID}/"
205+
curl -X POST -H 'Accept: text/event-stream' "${url}"
206+

0 commit comments

Comments
 (0)