Skip to content

ci: GitHub's runners for the builds, the fleet for what boots - #215

Merged
aledbf merged 4 commits into
mainfrom
ci/github-runners-and-fleet
Oct 24, 2026
Merged

aledbf merged 4 commits into
mainfrom
ci/github-runners-and-fleet

Conversation

@aledbf

@aledbf aledbf commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

From the org CI audit of 2026-10-24. One hypothesis: nothing here needs a third runner provider. Builds go to GitHub's free standard runners (public repository, 4 vCPU), what boots goes to spin-stack/ci's fleets.

Baseline (2026-10-03..24, blacksmith-8vcpu): CI Gate 36 s p50 (n=27); changed 13 s (n=63); QEMU/Kernel/Image build 39 s p50, 5m48 max (n=60); Release 2m46 (n=6). compat/report/lab ran on construct's self-hosted runners, gone since 2026-10-23.

Changes

  • CI, QEMU, Kernel, Base image, Release: ubuntu-latest; docker/setup-buildx-action (v4.4.1, pinned) in place of Blacksmith's builder. The cache stays GitHub's (type=gha, scopes in Taskfile.yml); what Blacksmith's sticky disk added is gone, so a cold QEMU or kernel build pays its full compile once per cache miss.
  • compat: runs-on/fleet=kvm/env=production, reading main's lanes' scopes (CACHE_BACKEND=gha CACHE_EXPORT=false), modprobe vhost_vsock as spin's fleet-setup does.
  • report, lab: runs-on/fleet=bench/env=production (one instance type, c8i.4xlarge; spin-stack/ci#5 adds it). Prose in AGENTS.md, docs/releasing.md and docs/memory-and-disk.md says where measurements are taken now; the recorded numbers stay construct's.

Expected impact: Blacksmith minutes to 0 (≥190/month here); Gate and changed within ±20 s; a warm build within ±1 min; cold kernel/QEMU builds ~2× longer on 4 vCPU (180-minute ceiling holds). compat/report/lab runnable again.

Depends on: spin-stack/ci#5 applied, for the bench fleet (compat uses the existing kvm fleet).

Validation: this PR's own CI runs the builds on GitHub (qemu/kernel/image are path-triggered by their workflow files); gh workflow run compat.yml --ref ci/github-runners-and-fleet once merged; report on the next release.

Revert: revert the commit.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

aledbf and others added 4 commits October 24, 2026 17:03
spin-machine is public: GitHub's standard runners are free there and
have 4 vCPU, which QEMU_JOBS=4 and KERNEL_NPROC=4 were sized for. The
builds that ran on Blacksmith's 8 (CI, QEMU, Kernel, Base image,
Release) move there, with Docker's own buildx action for the builder;
the cache was GitHub's already (CACHE_BACKEND=gha).

What boots moves to spin-stack/ci's fleets: compat to kvm, where it
reads the lanes' cache rather than a disk the runner kept; report and
lab to bench, one instance type, since a boot time compares only with
one taken on the same kind of host.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The two measurements, where compat went in the commit before: one
instance type, since a boot time compares only with one taken on the
same kind of host.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A step is one task (taskgate), and `task vsock` loads the module and
makes the node this user's, where a bare modprobe only loaded it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
GitHub's runner has the static /dev/vhost-vsock before the module is
loaded: the task saw the node, skipped the modprobe and chmod'ed it;
QEMU's open then loaded the module, udev set the node back to root's,
and verify:args read "Permission denied" (2026-10-24).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@aledbf
aledbf merged commit 97a6de1 into main Oct 24, 2026
7 of 9 checks passed
@aledbf
aledbf deleted the ci/github-runners-and-fleet branch October 24, 2026 20:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant