Route builds with runner labels
Send a pipeline to the runners that have the tools it needs, by giving runners labels and listing them in the pipeline.
Send a pipeline’s builds to the runners that can build it, such as the Mac with Xcode 16 or the Mac reserved for release builds. Each runner advertises labels, and a build goes only to a runner that has every label the pipeline asks for.
Label rules, the detected labels, and the disk-space thresholds are listed in Runner settings.
What you need
- At least one runner that is online in Settings > Runners.
- Owner or Admin access to change a runner’s custom labels.
- Project developer, maintainer, instance admin, or instance owner access to edit the pipeline.
1. See the labels a runner has
Open Settings > Runners. The Labels column shows each runner’s labels.
Every runner reports detected labels such as macos, macos-15, xcode-16,
and arm64. They update on the next heartbeat after a macOS or Xcode upgrade.
If the detected labels already tell your runners apart, skip to step 3.
2. Add custom labels
- In Settings > Runners, open the runner’s actions menu and select Edit.
- In Custom labels, enter labels separated by commas, such as
release, gpu. Use lowercase letters, digits,.,_, and-. - Select Save changes.
The dialog lists the runner’s detected labels under the field. Custom labels are added to them, not put in their place.
To label a runner when you register it by hand, pass --label to
oore runner register.
3. Set the labels on the pipeline
- Open the pipeline and select Edit.
- Under Build > Runner, enter the labels in Runner labels (optional),
separated by commas, such as
macos, xcode-16. The field description lists the labels that connected runners report. - Select Save changes.
An empty field means macos.
If the repository has a .oore.yaml with runs_on, set the same labels in
both places. The scheduler reads only the pipeline’s labels. The runner checks
the file’s runs_on after checkout and fails the build before any command
runs when it lacks one of those labels.
Verify the result
- Start a build of the pipeline.
- Open the build. It runs on a runner that has every label you set.
While no online runner has the labels, the build stays queued, and
Settings > Runners counts it under the builds that need labels no online
runner has.
Troubleshooting
The build stays queued
No online runner has every label. Compare the pipeline’s
Runner labels (optional) with the Labels column in
Settings > Runners. A typo, or a detected label that changed after an Xcode
upgrade, such as xcode-16 becoming xcode-26, leaves the build waiting.
The build fails right after checkout
The repository’s .oore.yaml asks for a label that the claiming runner lacks.
Add the label to the pipeline as well, so the scheduler picks a runner that has
it.
Oore rejects the custom labels
A label uses a character outside a–z, 0–9, ., _, and -, is
longer than 64 characters, or the runner has more than 32 labels.
Edit is missing from the runner’s actions
Only Owners and Admins can edit runners.
Next step
Run builds in VMs when builds need a clean machine, or a Flutter version the host does not have.