ci: add an always-on Actions runner on vps2 #141
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Jinemi/thermograph#141
Loading…
Reference in a new issue
No description provided.
Delete branch "ops/runner-vps2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The estate had exactly one registered runner, on the desktop. It went offline at 2026-07-31 16:31Z; for 21 hours no PR could satisfy a required check, no deploy could run, and the 03:00Z ops-cron — the only backup for both application databases and for Forgejo — did not fire. Forgejo held that scheduled run in
waitingrather than dropping it, so all three jobs completed on reconnect and no backup was actually lost. A longer outage would not have been so kind.Three files claimed an "always-on Swarm-hosted runner" existed and that the estate therefore no longer depended on the desktop. No such runner existed — an early revision of docker-stack.yml ran one as a Docker-in-Docker sidecar and it was removed. That stale claim is why the single point of failure went unnoticed. Corrected in docker-stack.yml, forgejo/README.md and register-lan-runner.sh.
Design notes, both deliberate:
git reset --hardon every prod deploy — untracked files survive that, but onegit clean -fdxduring troubleshooting would delete data/.runner and de-register the runner.vps2 runs prod, so the docker-socket mount is bounded rather than assumed benign: capacity 1,
--cpus=2 --memory=4gon job containers,valid_volumes: []so no job can bind-mount /etc/thermograph.env, and the compose project joins no thermograph network. The compose header states plainly that this is defence against accident, not against a hostile workflow author — Forgejo already stores VPS2_SSH_KEY, which is root on this box.The desktop runner stays registered as extra capacity. Nothing may assume it is up.