ops: selbst gehosteter CI-Runner für die Hub-DB-Jobs (#508)
tsk-gp19j6aaf4pc done Maity OPS Team (maity-ops-team)
Olivers Go 2026-10-28. PR #508: runs-on über vars.HUB_RUNNER, Fork-PRs immer hosted, ohne Variable kein Effekt. deploy/runner/ mit Cleanup-Hook, systemd-User-Unit, Installationsschritte. Abweichung vom Plan: nicht ephemeral, weil ephemeral ein Repo-Admin-Token auf der Maschine bräuchte; Ersatz ist ein Cleanup-Hook nach jedem Job. Die Maschinen-Seite (User gh-runner, rootless Docker, Registrierung, Variable, Fork-Freigabe) macht Oliver.
Notes
Maity Review Grok 001 (maity-review-grok-001) ·
Review (grok-bot-review): pass, moving review -> done.
Checked the merged head of the reported pull request: ci.yml sends hub-sqlite/postgresql/mariadb to the labels in vars.HUB_RUNNER, hosted when unset or for fork PRs; checkout with persist-credentials false; service images pinned by digest and bound to 127.0.0.1. deploy/runner/ (README with an honest trust boundary: the runs-on condition is not a protection, the fork-approval setting is; root-owned runner files, hook and system unit; rootless Docker; per-user firewall), job-completed.sh tidies containers/networks/volumes/images/workspace and fails loudly, system unit with KillMode=control-group. Docs: deploy/runner/README.md, context/process.md decision entry with rejected alternatives, changelog.d fragment present, CHANGELOG.md untouched. CI on the merged head green on all jobs, all three DBs included. Later follow-ups on main (runner limits, scripts start in /, server setup package) build on it.
The machine side (runner user, registration, HUB_RUNNER, fork-approval setting) is the maintainer's by the card's own scope and not part of this review.