Multi-repo runs
A spec lists the [repo labels](glossary.md#repo-label) it touches:
A spec lists the repo labels it touches:
repos: [web, api]With one repository in the factory, that list can be omitted. With several, the spec has to name the ones this run uses. At most eight.
Verification
Under ## Verification, a ### repo: <label> heading scopes the commands under it. When the spec names more than one repository, every command sits under one of those headings. A command is a backtick list item.
## Verification
### repo: web
- `go test ./...`
### repo: api
- `go test ./...`
- `test -f gate`Build runs the first command for each repository. Verify runs every command. A failure marks that repository failed and leaves the others free to continue.
Delivery
Each repository that passed gets one squashed commit on a shared branch, factory/<task>-<seq>. The commits share one change-set id. The message carries these trailers:
Factory-Change-SetFactory-RunFactory-RepoFactory-Change-Set-Repos
SUMMARY.md in the run directory is the one delivery note for the set. The factory does not push.
If some repositories were delivered and some were not, the run ends needs_attention with reason partially_delivered. Delivered commits stay.
Resume and restart
kusaw resume <run> --failed-only reruns the failed repositories in the worktrees that were kept. The run id, branch, and change-set id stay the same. kusaw resume with no run id still unpauses the queue.
kusaw restart <run> reruns every repository from its base commit. Without a terminal it exits 2 and asks for --yes. Each repository keeps the previous tip at refs/factory/backup/<run>/<n>, where n starts at 1.
A requeue of a partially delivered run is refused. Use resume or restart.