Files
computer-playbook/docs/contributing/tools/github/actions/instructions.md
kevinveenbirkenbachandClaude Opus 5 7fd495cdfc feat(ci): replay a role's README instructions on its smallest deploy row
The instructions test held a job of its own that picked one random role per
run, so a README's Production block was proven roughly once per 265 roles.
The replay now rides on a deploy row instead: no extra runner, and every role
the sweep touches gets its documented one-command deploy exercised.

The row is the role's smallest variant -- fewest services enabled -- because
that is the shape the README describes, and it is chosen among the variants
the sweep actually deploys, so a row cut as redundant coverage cannot silently
drop the role from the test. A role qualifies only when its README carries a
Production block and the guide's own mode is one the role runs and tests.

The marked entry carries the guide mode in `instructions` and a 📖 in its job
title, between the variant number and a priority ⭐. The guide mode is
independent of the mode the rotation gave the row: a swarm row still replays
in compose. The step runs last in the deploy job, after the swarm teardown,
because the replay deploys the role a second time and needs the runner's
ports.

call-test-instructions.yml, cli.meta.ci.guide_select and the `instructions`
dispatch input go with it. `redundant()` moves next to the marker so the
chunker, the plan table and the marker share one definition.

The plan table trades its 📊 Weight column for 📖 Instructions; nothing read
the weight any more, so it leaves the matrix entries too.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 16:57:04 +02:00

1.9 KiB

Instructions replay 📖

How CI proves that a role README's ### Production block still deploys the role.

For the workflow catalog see workflows.md.

Where it runs 🏗️

The replay rides along on a deploy row of the sweep instead of holding a job of its own. utils/roles/guide.py marks one row per role:

  • the role's smallest variant, the one whose meta/variants.yml overlay enables the fewest services, because that is the shape the README describes;
  • only when the README carries a ### Production heading;
  • only when the guide's own mode (compose for a role shipping a container stack, host otherwise) is enabled in meta/services.yml and not listed under skip in meta/tests.yml.

The marked row carries instructions: <mode> in the matrix JSON and a 📖 in its job title, between the variant number and the ⭐ of a priority row.

What the row does 🚀

.github/workflows/call-test-deploy.yml runs the replay as the job's last step, after the row's own deploy and after the swarm teardown: the replay deploys the role a second time and needs the runner's ports. It calls scripts/tests/deploy/distros.sh scripts/github/guide/one.sh with GUIDE_ROLE set to the row's app and GUIDE_MODE to the mode the marker carries, which is independent of the deploy mode the rotation gave the row. A swarm row therefore still replays a compose guide.

A red deploy skips the replay: the step carries no always(), so the runner state a failed deploy leaves behind never reaches the guide.

Reading a failure 🔍

The replay writes its rescue snapshots under INFINITO_RESCUE_DIAGNOSTICS_BASE/<distro>/<role>, uploaded as rescue-diagnostics-instructions-<artifact>. The deploy's own snapshots live in rescue-diagnostics-<artifact>.

To reproduce one locally, export GUIDE_ROLE, GUIDE_MODE, INFINITO_DISTRO and run scripts/github/guide/one.sh.