@@ -496,6 +496,37 @@ jobs:
496
496
env :
497
497
CODER_BASE_IMAGE_TAG : ${{ steps.image-base-tag.outputs.tag }}
498
498
499
+ - name : SBOM Generation and Attestation
500
+ if : ${{ !inputs.dry_run }}
501
+ run : |
502
+ set -euxo pipefail
503
+
504
+ # Generate SBOM for multi-arch image
505
+ echo "Generating SBOM for multi-arch image: ${{ steps.build_docker.outputs.multiarch_image }}"
506
+ syft "${{ steps.build_docker.outputs.multiarch_image }}" -o spdx-json > coder_sbom.spdx.json
507
+
508
+ # Attest SBOM to multi-arch image
509
+ echo "Attesting SBOM to multi-arch image: ${{ steps.build_docker.outputs.multiarch_image }}"
510
+ COSIGN_EXPERIMENTAL=1 cosign clean "${{ steps.build_docker.outputs.multiarch_image }}"
511
+ COSIGN_EXPERIMENTAL=1 cosign attest --type spdxjson \
512
+ --predicate coder_sbom.spdx.json \
513
+ --yes \
514
+ "${{ steps.build_docker.outputs.multiarch_image }}"
515
+
516
+ # If latest tag was created, also attest it
517
+ if [[ "${{ steps.build_docker.outputs.created_latest_tag }}" == "true" ]]; then
518
+ latest_tag="$(./scripts/image_tag.sh --version latest)"
519
+ echo "Generating SBOM for latest image: ${latest_tag}"
520
+ syft "${latest_tag}" -o spdx-json > coder_latest_sbom.spdx.json
521
+
522
+ echo "Attesting SBOM to latest image: ${latest_tag}"
523
+ COSIGN_EXPERIMENTAL=1 cosign clean "${latest_tag}"
524
+ COSIGN_EXPERIMENTAL=1 cosign attest --type spdxjson \
525
+ --predicate coder_latest_sbom.spdx.json \
526
+ --yes \
527
+ "${latest_tag}"
528
+ fi
529
+
499
530
- name : GitHub Attestation for Docker image
500
531
id : attest_main
501
532
if : ${{ !inputs.dry_run }}
0 commit comments