Repository navigation
Add SBOMs, full provenance, cosign signatures and vulnerability scans - #109
Merged
Merged
Conversation
- Every pushed image now carries an SBOM and mode=max provenance as attestations. They survive the per-arch merge and the copies to zoneminderhq and GHCR. - The merge job signs each multi-arch index with cosign, keyless through GitHub's OIDC token, in every repo. The CUDA workflow pushes with build-push-action instead of docker push, so it gets the same attestations. It then signs its image the same way. - The amd64 build jobs scan the smoke-tested zm-es and pyzm-serve images with Grype before any registry login. Fixable findings scoring 7.0 or more go into the job summary, and on master the full results go to the Security tab. Scans never block a push. - New third-party actions are pinned to a commit: anchore/scan-action, sigstore/cosign-installer and github/codeql-action. - The README has a new section on verifying images. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKoPm5qySMSsCYJmCo8r2J
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Users can now check what's in an image, where it came from, and that nobody changed it after CI built it.
SBOM and provenance. Every pushed image carries an SBOM, a list of every package inside it with versions. It also carries a full build provenance record: commit, workflow and build arguments. Both are stored as attestations next to the image, so pulls don't get bigger. Read them with
docker buildx imagetools inspect <image> --format '{{json .SBOM}}'. Docker Scout and Grype use the SBOM directly.Signing. The merge job signs each multi-arch index with cosign, keyless through GitHub's OIDC token, so there's no key to manage. Signatures are stored per repo, so it signs in
zoneminder/zoneminder,zoneminderhq/zoneminderand GHCR. The CUDA workflow now pushes with build-push-action, using the cache from its build step, instead ofdocker push. That gives it the same attestations, and it signs the same way. The README shows how to check a signature:Scanning. The amd64 build jobs scan the smoke-tested
zm-esandpyzm-serveimages with Grype.anchore/scan-actionv7.4.2 andgithub/codeql-actionv4.39.1 (both immutable releases), andsigstore/cosign-installerv4.1.2.What the first scan found, run locally on yesterday's
zm-es:x/crypto,x/netand pion. 1.9.14 is still go2rtc's latest release, from January. A follow-up could build go2rtc from source with a current Go.firebase/php-jwtv5.0.0, which has a critical advisory (GHSA-8xf4-w7qw-pjjw). That's for ZoneMinder upstream to fix.libbrotli1had a Debian fix the image didn't have yet. Rebuild without cache on schedule, verify downloads, use pipefail for CUDA #106's daily no-cache rebuild picks that up.Tested:
zmsmoke:eson warlock, and the summary table against its real SARIF output.test_pushfrom a branch on this repo. Docker Hub may show cosign'ssha256-<digest>signature entries in its tag list, depending on how it stores them.🤖 Generated with Claude Code
https://claude.ai/code/session_01CKoPm5qySMSsCYJmCo8r2J