airship-, and only those labels are looked up — a job
on ubuntu-latest costs no API calls and is never touched.
airship.yaml
.github/workflows/ci.yml
Always add the run_id suffix
Everything from-- onwards is ignored when matching the file, but the runner
registers with the suffixed label. That is the point: GitHub can then only
hand that machine a job from that workflow run, so two runs cannot steal each
other’s runners.
A machine per matrix job
Add anything you like after--; it only has to be unique.
airship.yaml is needed — one definition serves every leg of the
matrix, and each leg gets its own machine.
The labels a runner registers with
A job is served only when a definition covers every
airship- label it
asks for, and the resulting runner can satisfy the rest. So:
Several definitions, one label
Two definitions sharing a label become a single fallback chain, in file order. That is the idiom for “a big machine if there is one, otherwise a smaller one”:airship.yaml
Migrating a workflow at a time
Because onlyairship- labels are looked up, a repository can run some jobs
on GitHub’s runners and some on yours with no coordination:
The first job in a new repository usually waits a minute or two: GitHub only
queues a job once a runner with matching labels has existed at least once.
Push again and it will be there. Idle
runners remove the wait for good.
Without a config file at all
In an activated repository a label can describe the machine itself, so a one-off experiment needs no commit toairship.yaml. See One-line
runners.