Run CI on the fleet's local runners (Raspberry Pi arm64 pilot) when PM_LOCAL_RUNNER selects them
Pilot for running a small repository's full CI on the fleet's Raspberry Pi 4 runners (arm64), which frees GitHub's shared 20-job pool. This repository's jobs take 2–6 min on GitHub-hosted runners.
-
Routing:
runs-onis an expression on the repository variablePM_LOCAL_RUNNER:arm64(set): Raspberry Pi runners, labelpm-local-arm64;on: the x64 LAN runners, labelpm-local;- anything else:
ubuntu-latest.
The controller sets the variable from live capacity, and to
offwhen no host answers. -
Runners: each is a fresh container that takes one job (
--ephemeral), capped in CPU, memory and pids, with no Docker socket and no host mounts. -
Fork pull requests always use
ubuntu-latest, and workflows from outside contributors' fork PRs need approval. -
Concurrency: a new push cancels that PR's earlier CI run.
Required check names are unchanged. Related: unbraind/pm-memory#73 (x64 pilot).
Summary by Sourcery
Route trusted CI workloads to the selected ephemeral fleet runners while preserving safe fork handling and efficient pull-request concurrency.
New Features:
- Route eligible CI jobs to Raspberry Pi arm64 or x64 fleet runners based on the PM_LOCAL_RUNNER repository variable.
Enhancements:
- Keep fork pull requests on GitHub-hosted runners and preserve the existing fallback when local runners are unavailable.
- Cancel superseded pull-request CI runs while isolating main-branch pushes and manual runs.
Summary by cubic
Lets CI run on the fleet's local runners instead of GitHub's shared pool by choosing the runner from the PM_LOCAL_RUNNER repository variable. With arm64, Linux jobs go to ephemeral Raspberry Pi runners (label pm-local-arm64); with on, to the x64 LAN runners (pm-local); with anything else they stay on ubuntu-latest. Fork pull requests always use GitHub-hosted runners, and a new push to a pull request now cancels that PR's earlier CI run rather than letting both queue. Required check names are unchanged.