2.8 KiB
hive-ci — Forgejo Actions runner
The hive-ci module adds a Forgejo Actions runner to the hive so
workflows in the hyperhive repo (and any operator-managed repos on
the hive forge) can run on the same host. Disabled by default.
Enabling
services.hyperhive.forge.ci = {
enable = true;
name = "prod-hive"; # shows in Forgejo admin panel; default = hostname
};
Requires services.hyperhive.forge.enable = true (the runner
registers against the hive-forge Forgejo instance). The module
asserts this at eval time.
Options
| option | default | description |
|---|---|---|
forge.ci.enable |
false |
opt-in; off by default |
forge.ci.name |
hostname | runner name in Forgejo admin panel |
forge.ci.concurrency |
2 |
maximum parallel jobs |
forge.ci.labels |
["hive-ci:host"] |
runner labels (<name>:<scheme>) |
forge.ci.package |
pkgs.gitea-actions-runner |
override the runner binary |
The host scheme in labels means jobs run directly inside the
hive-ci container (no docker/podman). Workflow files target this
runner with:
runs-on: [hive-ci]
Container shape
hive-ci is an ephemeral-false nixos-container sharing the host
network namespace (privateNetwork = false) so it reaches the
hive-forge Forgejo instance at localhost:<forge-http-port> without
needing a routed address.
Bind mounts:
/run/hive-ci/core-token←coreTokenPath(host's forge admin token, read-only). Used only on first boot for registration.
The container has git in systemPackages; everything else a
workflow needs (rust tools, nix, etc.) is either pulled in by the
workflow itself via nix flake check or is part of the base NixOS
closure.
Nix sandboxing is disabled in the container (sandbox-fallback = true) because nspawn containers can't create the user namespaces
that the Nix sandbox requires. See docs/gotchas.md for the
general nspawn sandbox note.
Auto-registration
On first boot an ExecStartPre script (hive-ci-autoregister) runs
before the runner service:
- Reads the hive-c0re admin token from
/run/hive-ci/core-token. - Calls
GET /api/v1/admin/runners/registration-tokenon the forge (retrying for up to 30 s while forge starts). - Writes the registration token to
/run/hive-ci/runner-token. - The runner service picks it up and registers, writing credentials
to
/var/lib/gitea-runner/hive/.runner.
On subsequent boots the .runner credentials file already exists;
the script writes a dummy token and exits — the runner ignores it
and reuses its stored credentials.
No manual token handling is needed. The whole flow is automatic on
nixos-container start.
Cross-references
docs/forge.md— hive-forge setup (prerequisite)docs/gotchas.md— nspawn sandbox-fallback note