Skip to content

Commit 49ac5d0

Browse files
Generate SBOM with build
1 parent 0f3f568 commit 49ac5d0

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

.circleci/config.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ jobs:
3939
- run: opam exec -- dune build COMMIT
4040
- store_artifacts:
4141
path: ./_build/default/COMMIT
42+
- run: opam exec -- dune build vpnkit.spdx.json
43+
- store_artifacts:
44+
path: ./_build/default/vpnkit.spdx.json
4245
- run: opam exec -- dune build licenses.json
4346
- store_artifacts:
4447
path: ./_build/default/licenses.json

dune

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626
(deps vpnkit.exe (:gen ./scripts/mac_package.exe))
2727
(action (run %{gen} -out %{target} -in %{deps})))
2828

29+
(rule
30+
(alias sbom)
31+
(target vpnkit.spdx.json)
32+
(deps (:gen ./scripts/sbom.sh))
33+
(action (run %{gen} %{target})))
34+
2935
(rule
3036
(alias e2e)
3137
(deps src/hostnet_test/main.exe

scripts/sbom.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env sh
2+
set -e
3+
4+
# echo $OPAM_SWITCH_PREFIX
5+
echo $1
6+
7+
pkg=(
8+
$(opam list -s --installed --required-by=vpnkit --recursive --columns package --nobuild --color=never)
9+
)
10+
11+
dir="sbom_temp"
12+
mkdir "$dir"
13+
14+
cp vpnkit.opam "$dir"
15+
16+
for p in ${pkg[@]}; do
17+
echo $p >> "$1"
18+
cp -r "$OPAM_SWITCH_PREFIX/.opam-switch/packages/$p" "$dir/$p"
19+
done
20+
21+
touch vpnkit.spdx.json
22+
docker run --rm \
23+
-v ./$dir:/vpnkit \
24+
-v ./vpnkit.spdx.json:/out/vpnkit.spdx.json \
25+
-e BUILDKIT_SCAN_SOURCE=/vpnkit \
26+
-e BUILDKIT_SCAN_DESTINATION=/out \
27+
-e BUILDKIT_SCAN_EXTRA_SCANNERS=opam-cataloger \
28+
docker/scout-sbom-indexer:1.15
29+
30+
# Fix the relationships and file to point to the binary
31+
mv vpnkit.spdx.json vpnkit.spdx
32+
jq -c --arg uid "${$(uuidgen)//-/}" '
33+
"SPDXRef-File-\($uid)" as $fileId
34+
| .predicate
35+
| del(.files[])
36+
| .files |= . + [
37+
{
38+
"SPDXID": $fileId,
39+
"fileName": "vpnkit.exe",
40+
"licenseConcluded": "NOASSERTION"
41+
}
42+
]
43+
| .relationships[] |= (
44+
select(.relationshipType == "OTHER").relatedSpdxElement |= $fileId
45+
)
46+
' vpnkit.spdx > vpnkit.spdx.json
47+
48+
rm -rf sbom_temp

0 commit comments

Comments
 (0)