Skip to main content

Signed Images

@dataverket/signed-imagesv2026.10.29.2· AGPL-3.0-only· 2d agoWORKFLOWSSKILLSACCEPTED WARNINGS
01README

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.

02Workflows8
@dataverket/ko-signed-imagesc0ab6bef-ac1a-4169-9a0f-426cecde87be

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

base
1.base-image-record— With baseImageFrom set, exactly one mirror record of that model matches baseImageRecord, or is the model's only one when baseImageRecord is empty; the build never guesses between records.
describe
1.module— What ko works with, as evidence beside the images. Read-only.
build
1.images— One ko build per command, pushed; one image record each with its digest, and one build record.
sign
1.signatures— cosign sign of every image this run built, by repository and digest from its image records.
verify
1.verifications— cosign verify of the same images against the key's public half.
2.every-image-built-signed-verified— This run built at least one image, as many as the build record counts, and recorded one signature and one verification per image, every verification verified.
@dataverket/ko-signed-manifests67950888-67dc-4aa8-8bd3-e88389aeecce

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,

resolve
1.manifests— ko resolve over the files, images pushed; the rendered manifests become the manifests file, every pinned image in them the resolution record.
sign
1.signatures— cosign sign of every image this run built, by repository and digest from its resolution record.
attest
1.attestations— cosign attest of the rendered manifests file onto each of the same images, as a custom predicate.
verify
1.verifications— cosign verify of the same images against the key's public half.
2.attestation-verifications— cosign verify-attestation of the custom attestations on the same images against the key's public half.
3.every-image-built-signed-attested-verified— This run wrote the resolution record, built at least one image, and recorded one signature, one attestation, one verified verification and one verified attestation verification per image built.
@dataverket/verified-manifests97de917b-4596-4ab1-931e-ae60d8536323

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

resolve
1.images— ko resolve over the files, pushing nothing; every image pinned by digest in them becomes the resolution record.
verify
1.verifications— One cosign verify per image pinned in the manifests, built here or not; one verification record each, verified or not.
2.every-image-pinned-and-verified— This run wrote the resolution record, every image in the manifests is pinned by digest, there is at least one, and this run recorded one verification per image, every one verified.
@dataverket/signed-releaseef303fe3-2ace-42b2-b3f6-7f4d64ae50c4

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

resolve
1.images— ko resolve over the directory, pushing nothing; every image pinned by digest in it becomes the resolution record, the rendered manifests the manifests file.
2.every-image-pinned-none-built— Every image in the directory is pinned by digest, there is at least one, and ko built nothing here, so what the release lists exists in a registry as its producer pushed it; checked before anything is pushed.
push
1.artifact— flux push artifact of the directory, with release.json built from this run's resolution record written into the pushed copy; the artifact record holds the digest flux printed.
sign
1.signature— cosign sign of the artifact this run pushed, by repository and digest from its artifact record.
2.attestation— cosign attest of the rendered manifests this run's resolve wrote onto the artifact, as a custom predicate.
verify
1.verification— cosign verify of the artifact against the key's public half.
2.attestation-verification— cosign verify-attestation of the custom attestation on the artifact against the key's public half.
3.release-pushed-signed-attested-verified— This run wrote the resolution record, every image in the directory is pinned by digest, there is at least one, none was built here, and this run recorded exactly one artifact, one signature, one attestation, one verified verification and one verified attestation verification.
@dataverket/pinned-base-image13a8ffbe-d0c2-451f-ad52-13aa2b39d0dc

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

resolve
1.digest— The upstream tag resolved to its digest on the watch model; the record carries firstSeenAt forward from the last time the tag held this digest. Read-only, no credential, as @dataverket/base-image-watch.
quarantine
1.seen-unchanged-long-enough— The digest this run resolved has been the tag's digest for at least minimumAgeDays, measured from the record's firstSeenAt to this run's start; minimumAgeDays 0 passes anything.
verify-upstream
1.keyless— cosign verify of the upstream digest, keyless: the signing certificate's identity must match certificateIdentityRegexp and come from oidcIssuer, and the signature must be in the public log.
2.upstream-verified— This run recorded one verification of the upstream digest, and it verified.
copy
1.mirror— crane copy of the verified digest to <registry>/<namespace>/<source registry>/<path>:<tag>, unchanged when already there with that digest; one mirror record with target and digest.
sign
1.signature— cosign sign of the mirror, by repository and digest from this run's mirror record, with our key.
verify
1.verification— cosign verify of the mirror against our key's public half.
2.resolved-verified-mirrored-signed-verified— This run resolved one digest, verified it keyless, mirrored exactly that digest, signed the mirror and verified the signature.
@dataverket/verify-release721d7910-1e2b-45c6-9935-5a6201623258

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

pin
1.tag-or-digest-given— The artifact is named by tag or by digest; checked before anything runs.
2.digest— crane digest of the artifact; the digest record pins it for every step after. Read-only.
artifact
1.verification— cosign verify of the artifact by the digest this run resolved, against the public key.
2.attestation-verification— cosign verify-attestation of the custom attestation on the artifact against the public key.
3.artifact-verified— The artifact's signature and attestation verified, checked before release.json is read out of it, so an artifact nobody signed fails here by its signature and not by what it holds.
4.release— crane blob reads release.json out of the artifact's layer, by the same digest; the blob record holds it as JSON. Read-only.
images
1.verifications— One cosign verify per image release.json lists, by repository and digest, against the same public key; one verification record each, verified or not.
2.release-verified— This run resolved exactly one artifact digest, recorded one verified verification and one verified attestation verification of it, read one release.json out of it listing at least one image, and recorded a verified verification for every image listed, with none failed.
@dataverket/promote-releasef890223b-2998-4e64-a00e-99666c471a5d

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

verify
1.release— @dataverket/verify-release over the artifact: digest pinned, signature, attestation and every listed image verified, in a nested run.
promote
1.channel— crane tag points the channel at the digest the nested run verified; the tagging record keeps the digest the channel held before.
2.channel-digest— crane digest reads the channel tag back after the retag; one digest record of what it holds now. Read-only.
3.channel-at-verified-digest— The nested run verified the artifact in this repository and pinned its digest, this run recorded one tagging of the channel at that digest, and the channel read back after the retag holds it.
@dataverket/mirror-release-images00999cd6-0187-4b5a-a1cd-646160f1c6c1

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

verify
1.release— @dataverket/verify-release over the artifact: digest pinned, signature, attestation and every listed image verified, in a nested run.
copy
1.images— crane copy of every image release.json lists, by its digest, to <registry>/<namespace>/<source registry>/<path>:<tag>; one mirror record each, copied or unchanged.
2.signature-digests— crane digest of each image's sha256-<hex> signature tag at its source; one digest record each, pinning the index of signatures to copy. Skipped with signatureTags false.
3.signatures— crane copy of every signature tag this run pinned, beside its image under the same name and tag; one mirror record each. Skipped with signatureTags false.
verify-mirror
1.verifications— One cosign verify per image this run mirrored, at its new location by repository and digest from the mirror record, against the same public key; one verification record each, verified or not.
2.every-image-mirrored-and-verified— The release lists at least one image; this run recorded one mirror per listed image, each by the listed digest, one mirror per signature tag when asked, and one verified verification per mirrored image at its new location, with none failed.
03Skills1
signed-images1 file
04Previous Versions1
2026.10.29.1AGPL-3.0-only
05Stats
A
100 / 100
Downloads
0
Archive size
35.3 KB
  • 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

07Platforms
08Labels