Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions .agents/delivery/release/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,8 @@ red), and `.agents/RULES.md:15` (the bake graph is the build artifact).
(`.agents/RULES.md:15`, sub-rule d).

7. **Prefer letting CI build the fleet.** `.github/workflows/release-images.yml`
runs bake on every push to `main` (tag: `latest`) and every `v*` tag
(tag: the git tag), setting `GIT_SHA` and `BUILD_DATE`, then
runs bake on every `v*` tag (tag: the git tag) and on `workflow_dispatch`
(tag: the input, or `latest`), setting `GIT_SHA` and `BUILD_DATE`, then
`bake --push`es the result. CI runs on real Docker on Linux, where
the full sweep is clean; local podman-on-macOS chokes the parallel
fleet build on network contention (a documented, non-structural
Expand All @@ -138,6 +138,17 @@ red), and `.agents/RULES.md:15` (the bake graph is the build artifact).
100+ images locally is slow and flaky; CI is the authoritative fleet
builder.

The workflow builds only what changed: every image carries an
`eval.input-hash` label, and a job whose image's inputs are unchanged
from the prior release retags that digest instead of rebuilding
(`.agents/delivery/RULES.md` rules 12–14) — so consecutive releases
share digests for untouched images, and a no-change release builds
nothing. Upstream drift (base images, unpinned packages) is invisible
to the hash: for CVE refreshes dispatch with `force_rebuild: true`
(or `rebuild_bases: true` for the shared bases alone). Audit any
tag's freshness with the **Fleet status** workflow or
`containers/scripts/fleet-status.sh <tag>`.

8. **Commit the fleet report alongside the release tag.** When cutting
the tag, commit the final `.agents/verification/fleet/report.md` so
the release artifact carries its own verification record
Expand Down
5 changes: 4 additions & 1 deletion .agents/verification/verify/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,10 @@ verification record (`tests/run/fleet/RULES.md:8`).
dry verification; this is the live release step.)*
39. **Push the tag + trigger the release workflow:** `git push origin eval-vX.Y.Z`.
40. **Verify images published** — `docker pull ghcr.io/exgentic/<image>:eval-vX.Y.Z`
for each. Pass = every expected tag exists.
for each, then `containers/scripts/fleet-status.sh eval-vX.Y.Z`. Pass = every
expected tag exists **and** reads `fresh` (its recorded `eval.input-hash`
matches the repo at the tag — carried-forward digests included;
`.agents/delivery/RULES.md` rules 12–14).
41. **Verify signatures / attestations** — `cosign verify ghcr.io/exgentic/<image>:eval-vX.Y.Z`.
42. **Smoke test one image from a clean machine** — pull + run from a different
host. Pass = end-to-end works from nothing.
Expand Down