Skip to content

feat: self-hosted GHA runners on aoc-m3l + role-label workflow routing#64

Merged
wavekat-eason merged 3 commits into
mainfrom
feat/gha-runners-aoc-m3l
May 18, 2026
Merged

feat: self-hosted GHA runners on aoc-m3l + role-label workflow routing#64
wavekat-eason merged 3 commits into
mainfrom
feat/gha-runners-aoc-m3l

Conversation

@wavekat-eason
Copy link
Copy Markdown
Contributor

Summary

  • Adds scripts/setup-gha-runners.sh / uninstall-gha-runners.sh to install N self-hosted GitHub Actions runners on a Linux host (defaults to 4 on aoc-m3l, each as its own systemd service). Includes Ubuntu 24.04 gh install guidance.
  • Switches all four workflows (ci, preview, release, star-tracker) from ubuntu-latest to runs-on: [self-hosted, wavekat-ci].
  • Setup script registers runners with wavekat-ci,<hostname> labels — using a role label instead of a host label means future runner pools (AWS, GPU box, …) can join the CI fleet by carrying wavekat-ci, with no repo-wide workflow edits.

Why role labels?

Targeting [self-hosted, AOC-M3L] pins workflows to one host. Targeting [self-hosted, wavekat-ci] pins to a role, so adding capacity later is a runner-registration change, not 4× workflow edits per repo.

Follow-up before merging

The 4 live runners (AOC-M3L-1..4) currently only have the AOC-M3L label. Before merging, add the wavekat-ci label to each via Org → Settings → Actions → Runners (or via gh api -X POST /orgs/wavekat/actions/runners/<id>/labels -f 'labels[]=wavekat-ci' with admin:org scope). Otherwise jobs will queue with no matching runner.

Test plan

  • Add wavekat-ci label to the 4 existing runners
  • Open this PR → confirm CI and Preview Deploy jobs land on aoc-m3l runners (check job logs for Runner name: AOC-M3L-*)
  • Confirm npm ci + npm run cf:build succeed on self-hosted
  • Confirm preview deploy posts the sticky comment with the preview URL
  • After merge, watch the Release and Star Tracker workflows fire on main

🤖 Generated with Claude Code

wavekat-eason and others added 3 commits May 18, 2026 22:26
Adds setup/uninstall shell scripts to install N self-hosted GitHub
Actions runners on a single Linux host and register them with the
wavekat org. Defaults to 4 runners, each as its own systemd service so
jobs run in parallel. Includes Ubuntu 24.04 install guidance for `gh`
when no RUNNER_TOKEN is provided.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Switches all jobs from `ubuntu-latest` to `[self-hosted, AOC-M3L]` so
CI/preview/release/star-tracker run on the new self-hosted runners on
the aoc-m3l host.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Switches workflows from `[self-hosted, AOC-M3L]` to `[self-hosted,
wavekat-ci]` and changes the setup script default to register runners
with a `wavekat-ci` role label alongside the host label. New runner
pools (e.g. AWS) can join the CI fleet by carrying the `wavekat-ci`
label — no repo edits required.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@wavekat-eason wavekat-eason merged commit d2d8415 into main May 18, 2026
3 checks passed
@wavekat-eason wavekat-eason deleted the feat/gha-runners-aoc-m3l branch May 18, 2026 10:36
@github-actions
Copy link
Copy Markdown
Contributor

wavekat-eason added a commit to wavekat/wavekat-lab that referenced this pull request May 18, 2026
## Summary
- Routes static `runs-on: ubuntu-latest` jobs in this repo to the org's
self-hosted runner pool via `runs-on: [self-hosted, wavekat-ci]`.
- Matrix-driven jobs (`${{ matrix.os }}`, `${{ matrix.platform }}`) and
parameterized runners (`${{ inputs.runner }}`) are left untouched.
- Part of an org-wide rollout — see wavekat/wavekat.com#64 for the
runner setup scripts and rationale (role-label routing so future pools
like AWS join by adding `wavekat-ci` to their labels).

## Prerequisite
The 4 runners on `aoc-m3l` must carry the `wavekat-ci` label before this
can be merged. Add it via Org → Settings → Actions → Runners (or set it
on new runners by re-running `setup-gha-runners.sh` with the updated
default).

## Test plan
- [ ] Confirm `wavekat-ci` label is set on `AOC-M3L-1..4`
- [ ] Open this PR → CI lands on a self-hosted runner (job log shows
`Runner name: AOC-M3L-*`)
- [ ] All CI jobs pass — watch for missing system deps on the runner
host

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
wavekat-eason pushed a commit that referenced this pull request May 19, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.0.23](wavekat-com-v0.0.22...wavekat-com-v0.0.23)
(2026-05-19)


### Features

* **gha-runners:** dockerized self-hosted runner setup
([#65](#65))
([120fd7e](120fd7e))
* self-hosted GHA runners on aoc-m3l + role-label workflow routing
([#64](#64))
([d2d8415](d2d8415))


### Bug Fixes

* **gha-runners:** install gh CLI and Rust toolchain in docker image
([#66](#66))
([9b167e7](9b167e7))
* **star-tracker:** de-inflate chart-view counts + per-repo breakdown
([#62](#62))
([954f9d4](954f9d4))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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