@@ -99,15 +99,15 @@ jobs:
9999 OCI_DIR : " /tmp/image-oci-dir"
100100 run : |
101101 mkdir -p ${OCI_DIR}/rootfs
102- sudo podman container create --replace --name bluefin-tmp "localhost/${IMAGE}:${STREAM_NAME}"
103- sudo podman export bluefin-tmp | sudo tar -C ${OCI_DIR}/rootfs -xf -
104- sudo podman container rm bluefin-tmp
102+ sudo podman container create --replace --name "${IMAGE}" "localhost/${IMAGE}:${STREAM_NAME}"
103+ sudo podman export "${IMAGE}" | sudo tar -C ${OCI_DIR}/rootfs -xf -
104+ sudo podman container rm "${IMAGE}"
105105
106- OUTPUT_PATH ="$(mktemp -d)/sbom.json"
106+ SBOM ="$(mktemp -d)/sbom.json"
107107 export SYFT_PARALLELISM=$(($(nproc)*2))
108- sudo $SYFT_CMD --source-name "${IMAGE}"-"${STREAM_NAME}" ${OCI_DIR} -o syft-json=${OUTPUT_PATH }
109- du -sh ${OUTPUT_PATH }
110- echo "OUTPUT_PATH =${OUTPUT_PATH }" >> $GITHUB_OUTPUT
108+ sudo $SYFT_CMD --source-name "${IMAGE}"-"${STREAM_NAME}" ${OCI_DIR} -o syft-json=${SBOM }
109+ du -sh ${SBOM }
110+ echo "SBOM =${SBOM }" >> $GITHUB_OUTPUT
111111 sudo rm -rf ${OCI_DIR}
112112
113113 - name : Rechunk Image
@@ -219,20 +219,44 @@ jobs:
219219 COSIGN_EXPERIMENTAL : false
220220 COSIGN_PRIVATE_KEY : ${{ secrets.SIGNING_SECRET }}
221221
222- - name : Add SBOM Attestation
222+ - name : Install ORAS
223223 if : github.event_name != 'pull_request'
224+ uses : oras-project/setup-oras@22ce207df3b08e061f537244349aac6ae1d214f6 # v1.2.4
225+
226+ - name : Login to GitHub Container Registry with ORAS
227+ if : github.event_name != 'pull_request'
228+ run : |
229+ echo ${{ secrets.GITHUB_TOKEN }} | oras login ghcr.io -u ${{ github.actor }} --password-stdin
230+
231+ - name : Upload SBOM
232+ if : github.event_name != 'pull_request'
233+ id : upload-sbom
224234 env :
225235 IMAGE : ${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}
226236 DIGEST : ${{ steps.push.outputs.outputs && fromJSON(steps.push.outputs.outputs).digest }}
237+ SBOM : ${{ steps.generate-sbom.outputs.SBOM }}
238+ run : |
239+ cd "$(dirname "${SBOM}")"
240+ oras attach \
241+ --artifact-type application/vnd.spdx+json \
242+ --annotation filename=$(basename "$SBOM") \
243+ "${IMAGE}@${DIGEST}" \
244+ "$(basename ${SBOM})"
245+
246+ sbom_digest=$(oras discover --format json "${IMAGE}@${DIGEST}" | jq -r '.referrers[] | select(.artifactType == "application/vnd.spdx+json") | .digest')
247+
248+ echo "sbom_digest=${sbom_digest}" >> $GITHUB_OUTPUT
249+
250+ - name : Sign SBOM OCI Artifact
251+ if : github.event_name != 'pull_request'
252+ env :
253+ COSIGN_EXPERIMENTAL : false
227254 COSIGN_PRIVATE_KEY : ${{ secrets.SIGNING_SECRET }}
228- SBOM_OUTPUT : ${{ steps.generate-sbom.outputs.OUTPUT_PATH }}
255+ LOWERCASE : ${{ steps.registry_case.outputs.lowercase }}
256+ IMAGE_NAME : ${{ env.IMAGE_NAME }}
257+ SBOM_DIGEST : ${{ steps.upload-sbom.outputs.sbom_digest }}
229258 run : |
230- cd "$(dirname "$SBOM_OUTPUT")"
231- cosign attest -y \
232- --predicate ./sbom.json \
233- --type spdxjson \
234- --key env://COSIGN_PRIVATE_KEY \
235- "${IMAGE}@${DIGEST}"
259+ cosign sign -y --key env://COSIGN_PRIVATE_KEY ${LOWERCASE}/${IMAGE_NAME}@${SBOM_DIGEST}
236260
237261 check :
238262 name : Check all ${{ matrix.stream_name }} builds successful
0 commit comments