Signed Images
Security Notice
This extension includes AI agent skills that can modify AI assistant behavior. Review the skill files before installing.
Eight workflows composing @dataverket/ko, @dataverket/cosign, @dataverket/flux and @dataverket/crane. @dataverket/ko-signed-images: a signed build, every command of one Go module built into an image by ko and pushed, every image signed by digest with cosign using a key held in a vault, every signature verified. @dataverket/ko-signed-manifests: signed manifests, ko resolve renders them with every ko:// image built, pushed and pinned by digest, each image is signed, the rendered manifests are attested onto it as a custom predicate, and both are verified. @dataverket/verified-manifests: every image a rendered manifest file names verified against a public key, read-only, a gate before a deploy. @dataverket/signed-release: a directory of rendered manifests pushed as one OCI artifact with flux push artifact, tagged with the commit, with a release.json listing every image by digest from this run's resolution record, the artifact signed by digest, the rendered manifests attested onto it, both verified. @dataverket/verify-release: the gate, read-only, the artifact's tag pinned to its digest with crane, its signature and custom attestation verified against a public key, release.json read out of its layer, every image it lists verified by digest. @dataverket/pinned-base-image: an upstream base image resolved to its digest with crane, held in quarantine until that digest has been the tag's for minimumAgeDays, verified keyless against the publisher's identity, copied into our registry by digest, signed with our key and verified, the mirror record then feeding ko-signed-images through baseImageFrom. @dataverket/promote-release: verify-release as a nested workflow, then the channel tag such as current pointed at the verified digest with crane tag and read back, the digest it held before recorded for a rollback. @dataverket/mirror-release-images: verify-release, then every image the release lists copied by digest into another registry with its sha256- signature tag, and verified there. Each run fails unless all of it happened for all of the images.
cosign signs the digests this run's records carry, the image records of a build, the images a resolution built, or the artifact flux pushed, never a value from an input, so what is signed is exactly what was built or pushed. The key and its passphrase are named by vault and key, because workflow inputs are recorded in cleartext in the run history. With tlog false, the default, signatures go to the registry only; with tlog true they are recorded in Rekor. Registry credentials come from the container config of the user running swamp, except where crane writes, a promotion or a mirror, where they are named by vault and key. Built on @dataverket/ko, @dataverket/cosign, @dataverket/flux and @dataverket/crane, all four dependencies.
A signed build: every command of one Go module built into an image by ko and pushed, every image signed by digest with cosign using a key held in a vault, and every signature verified, in one run that fails unless all three happened for all of them. ko's part is @dataverket/ko-images without its assertion: describe, then one build per command, each recorded with its digest. cosign's part takes those digests from this run's image records, never from an input, so what is signed is exactly what was
Signed manifests: ko resolve renders the manifests in files with every ko:// reference built from the Go module in dir, pushed to repo and pinned by digest; cosign signs every image built in that run by digest with a key held in a vault, attests the rendered manifests onto each of them as a custom predicate, and verifies both the signatures and the attestations; the run fails unless all of it happened for every image built. The images come from this run's resolution record, never from an input,
Verify every image a rendered manifest file names: ko resolve over files, pushing nothing, lists every image pinned by digest in them, and cosign verify checks each one against a public key, with the required annotations when any are given; the run fails unless every image is pinned and every one verifies. Read-only: nothing is pushed anywhere. Made to gate a deploy: run it on the manifests a signed build rendered before anything applies them. ko resolve is the image lister, so dir must be a Go
A signed release: a directory of rendered manifests becomes one OCI artifact in the registry, pushed with flux push artifact, tagged with the commit, signed by digest with cosign using a key held in a vault, with the rendered manifests attested onto it, and both verified; the run fails unless all of it happened. ko resolve over the directory, pushing nothing, lists every image pinned by digest in it as this run's resolution record; release.json is built from that record, environment, revision, s
A base image mirrored by digest after a quarantine, verified keyless upstream and signed with our key: the upstream tag in ref is resolved to its digest on the base-image-watch model, whose digest record carries firstSeenAt forward while the digest stays the same, so the daily @dataverket/base-image-watch and this workflow share one watch; an assertion refuses a digest first seen less than minimumAgeDays ago and says when it may be mirrored; cosign verifies the upstream digest keyless, against t
Verify a signed release before anything moves: the artifact's tag is resolved to its digest with crane, and everything after uses that digest; cosign verifies the artifact's signature and its custom attestation against a public key; release.json is read out of the artifact's layer with crane blob; and every image it lists is verified by repository and digest against the same key. The run fails unless the artifact verified, the attestation verified, the release was read, it lists at least one ima
Promote a verified release by retag: @dataverket/verify-release runs first as a nested workflow, with the artifact's tag resolved to its digest, the artifact's signature and attestation verified against a public key, release.json read out of it and every image it lists verified; then crane tag points the channel tag, such as current, at the digest that was verified, and crane digest reads the channel back; the run fails unless the channel now holds exactly that digest. Nothing is rebuilt, copied
Mirror every image a verified release lists into another registry, with its signatures: @dataverket/verify-release runs first as a nested workflow, with the artifact's tag resolved to its digest, its signature and attestation verified against a public key, release.json read out of it and every image it lists verified; then crane copy copies each image by its digest from release.json to <registry>/<namespace>/<source registry>/<path>:<tag>, the source repository kept whole and the tag the release
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Docs keep secrets in a vault1/1earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License2/2earned
- Verified public repository2/2earned
Documentation that puts a secret in plaintext or references a vault with syntax Swamp does not resolve.
- files/README.md:294 — no reason given
- files/README.md:378 — no reason given
- files/README.md:414 — no reason given