@@ -31,6 +31,7 @@ concurrency:
3131
3232jobs :
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