Runners: see them, their jobs and history, and assign them per site, organisation or repository issue #41 open andymccall opened this · 3 comments
andymccall referenced by change b6b7e4cf6b24 on main ·
andymccall referenced by change 74be97962ed8 on main ·
Progress: part 1 (runners in the database, registration with the key bound, the Runners page and history, drain/disable/remove) was already in. Part 2 is now in (ceaf0ed2, deployed): a registration token carries a scope (the whole site, an owner, or owner/repository), the runner gets it, administrators can change it on the Runners page, and a claim returns only jobs of repositories in the runner's scope, filtered in the query. Still to do: Settings → Runners for organisation and repository admins (part 2b), runs-on labels and architecture (part 3, needs oxygenflow), the queue view and the runner API (part 4), and the Plex and VisionFive machines (part 5, Andy's hardware).
andymccall referenced by change b66e70b7b6c7 on main ·
Part 4 is in (c377f263, deployed): the queue on Admin → Runners (running jobs with their runner, then queued ones in claim order) and the runner API for site administrators: GET /api/v1/runners, /runners/{id}/jobs, /runners/queue. Left: Settings → Runners for organisation and repository admins (2b), runs-on labels (3, with oxygenflow), and the machines (5).
referenced by 2 changes on 1 Oct 2026
Parts 2b and 3 are in and deployed. 2b (65d93502): Settings → Runners on repositories (admins) and organisations (owners): the runners that serve them, a registration token for a runner of their own scope, and removing their own runners when idle. 3 (oxygenflow 9fbedc41, hub fa0be8f0): runs-on "LABEL" on a sandbox or job; a claim takes a job only when the runner has all its labels (reported on the claim or at registration); the queue shows which labels a waiting job needs. What remains is part 5: bringing up Plex and a VisionFive 2 Lite, which are Andy's machines (the VisionFive also needs a non-microVM tier).
Runners: see them, their jobs and history, and assign them per site, organisation or repository
Today runners are invisible and global:
hub.toml([flow] runner_tokens). Adding, removing or rotating one means editing the file on the server and restarting the hub.flow_runner_keys, trust on first use), and no page shows that binding.What we want
1. A Runners page (site administrators: Admin → Runners)
microvm, laterwasmandsyscall) and labels;max_jobs, memory, vCPUs) and runner version;2. Registration instead of
hub.tomltokensflow runner register https://hub ... TOKENexchanges it for a runner credential and registers the runner's signing identity at the same time. The key is then bound at registration, not on first use, and the page shows it.runner_tokenskeep working until migrated, then are removed.3. Assignment: site-wide, organisation, repository
runs-on "riscv64"orruns-on "gpu"on a job or sandbox, and claims match them. This is part of the OxygenFlow pipeline spec, so it also needs an oxygenflow change: parseruns-on, include it in the job hash, and have the runner report its labels and architecture inClaimRequest.4. Jobs and queue
5. API
GET /api/v1/runners,/orgs/{org}/runners,/repos/{o}/{n}/runners,GET /api/v1/runners/{id}/jobs.POSTendpoints to create registration tokens and to drain, disable or remove runners, each for the matching admin scope.Test plan with real machines
runs-on "riscv64", per-architecture rootfs images, and a runner that offers no microVM tier.Suggested parts
flow runner registerin oxygenflow).runs-onin the pipeline (oxygenflow) and label matching (hub).