Publish fleet images on demand — a benchmark, an agent's combos, single tasks, or the whole fleet — by dispatching the release workflow with the right scope, then confirm what landed and under which hash tag. Use when something merged to main is needed before tonight's nightly channel run, or to preview what a change would build. For a versioned vX.Y.Z release use the `release` skill; to build an image locally, `build`.
Install
npx skillscat add exgentic/eval-containers/publish Install via the SkillsCat registry.
Publish on demand
The latest channel is nightly (.agents/delivery/RULES.md:16). Between
nights, the same workflow publishes any subset on request: every run
publishes only images whose inputs changed, under their hash tag first andlatest after (.agents/delivery/RULES.md:18–:20), so a dispatch is
idempotent and safe to repeat.
Serves: .agents/delivery/RULES.md:5 (SemVer only by tag or explicit
dispatch), :16 (nightly channel), :18–:20 (hash tag, immutability,latest alias).
Confirm the change is on
main, and dispatch frommain. A dispatch
from a branch publishes under the same:latestnames the nightly uses.
Why:latestis a snapshot of amaintip (rule 20); a branch preview
under hash tags only is a planned follow-up, not something to improvise.Name the scope. Leaf targets are the first column of
containers/scripts/fleet-hash.sh graph. Chooseonly(leaf targets),combo_agents(agents whoseevals/<benchmark>--<agent>combos to build
over the benchmarks in scope; blank = none),tasks(task ids of a
per-task benchmark named inonly), and whether to keepinclude_per_task/include_standaloneon. Why: the enumerate job
intersects every matrix withonly, so an unnamed leaf is not built,
and combos are opt-in.Preview with
dry_run=truewhen unsure. It printsbake --printper
target and pushes nothing.Dispatch and watch.
gh workflow run release-images.yml --ref main -f only="benchmark-gsm8k agent-claude-code" -f combo_agents=claude-code -f include_per_task=false gh run watch "$(gh run list --workflow=release-images.yml --limit 1 --json databaseId --jq '.[0].databaseId')"The run starts immediately in its own lane; it never waits for the
nightly or another dispatch. Never passtag: that publishes a versioned
release (rule 5), not a preview.Read the result. The
reportjob's summary lists the leaf images in
scope with build time and size; each build job's log saysfresh
(already published at its hash, nothing to do),carried forward, or
shows the build. Why: "nothing built" is the correct outcome for an
unchanged input, not a failure.Record the hash tag for anyone who will pin the result:
containers/scripts/fleet-status.sh hash ghcr.io/exgentic/benchmarks/gsm8k:latestused as
EVAL_BENCHMARK_TAG=<hash>(EVAL_AGENT_TAG,EVAL_GATEWAY_TAG
likewise). Why:latestmoves tonight; a hash tag never does (rule 19).