Installed 2026-08-30 on bfe-mpc-0640 (QEMU 10.0.11; cpio/curl already present); recorded in flare-deployment deploy-log. End-to-end CI check of the smoke step waits on the account-wide Actions billing stall. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018HUayid7W5w7jBdb9Rrj1K
3.8 KiB
CI/CD
.github/workflows/ci.yml — everything portable runs on GitHub-hosted
ubuntu-latest; only the heavy kernel build uses the self-hosted runner.
Jobs
| Job | Runner | What it does |
|---|---|---|
test |
ubuntu-latest | cargo test (sim + config-lint) + cargo-llvm-cov line coverage on sim; outputs passed/coverage. |
mcdc |
ubuntu-latest | 100% MC/DC enforced on every drivers/*/test (gcc-14 -fcondition-coverage). |
bench |
ubuntu-latest | Smoke-runs the sim micro-benchmarks; emits ns/op trend JSON. |
patches-apply |
ubuntu-latest | Fetches pristine linux-6.18.46 (cached, sha256-verified) and applies patches/* in order. |
kernel-build |
[self-hosted, warden-sdk] | build/build-kernel.sh → zImage + rv1106-warden.dtb, uploaded as an artifact. Dispatch-gated until the runner is fully provisioned (below). |
badges |
ubuntu-latest | Renders loc/tests/coverage shields on push to main ([skip ci] + paths-ignore loop guard). |
The self-hosted runner (bfe-mpc-0640)
A third repo-scoped runner instance on bfe-mpc-0640 (alongside flare and
flare-edge), registered with the label warden-sdk as
bfe-mpc-0640-warden-sdk, in ~/actions-runner-warden-sdk.
INSTALLED + ONLINE (2026-08-25). The runner is a running systemd service (
actions.runner.bfe-noah-warden-sdk.bfe-mpc-0640-warden-sdk.service,enabled, cgroup-cappedCPUQuota=400%/MemoryMax=6G) andkernel-buildhas been verified end-to-end (RV1106 6.18.46 →zImage8.25 MB +rv1106-warden.dtb). Steps 1–2 below are the record of that install (they neededuser's sudo on 0640); steps 3–4 are handled inside the workflow, so the host needs no manual toolchain/python.
- Install as a service (persistence):
cd ~/actions-runner-warden-sdk && sudo ./svc.sh install user && sudo ./svc.sh start. Until then the runner is offline andkernel-buildonly runs when dispatched against an online runner. - Resource cap (protect the shared host): a drop-in at
/etc/systemd/system/actions.runner.bfe-noah-warden-sdk.*.service.d/*.confwithCPUQuota=400%+MemoryMax=6G, thensudo systemctl daemon-reload. The build inherits that cgroup. (The workflow also passesJOBS=4as a belt-and-braces bound.) - Kernel cross toolchain — done in the workflow: the
kernel-buildjob setsCROSS_COMPILE=arm-linux-gnueabihf-(Debiangcc-arm-linux-gnueabihf, already on the runner) andbuild-kernel.shhonors it. The kernel is freestanding, so the generic arm cross compiler links it — no Luckfox SDK toolchain path needed. (To use the SDK uclibc toolchain instead, setSDK_TCto itsbin/and drop the override.) python(not python3) — done in the workflow: thekernel-buildjob symlinkspython→python3into$RUNNER_TEMP/binand prepends it to$GITHUB_PATH. No host-side venv/shim needed.
Host build deps: dtc bc flex bison libssl-dev — already present on 0640.
-
qemu-system-arm(for the boot-smoke step insidekernel-build, added with theqemu/device sim — ADR-0006): one-timesudo apt-get install qemu-system-armon 0640. The step is fail-closed — a missing qemu binary fails the job with a message pointing here; it never silently skips.INSTALLED (2026-08-30). QEMU 10.0.11 via apt as
useron 0640 (reached over the mesh at[mesh-ip]);cpioandcurlwere already present. Recorded in flare-deploymentdocs/deploy-log.md. First dispatchedkernel-buildwill exercise the smoke step end-to-end once the account-wide Actions billing stall is cleared.
Badges
Static shields SVGs are committed by the badges job (private repo can't use
dynamic shields). The GitHub-native ci.yml status badge works live regardless.