@@ -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,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