vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
Ship the runner's unit and let a deployment create a runner machine
d0d4239f3f7236197c87a752d7965de238430f98 · Keenan Nemetz · 3d ago · parent dbae2e01
Ship the runner's unit and let a deployment create a runner machine The package installs one binary that is the forge, the runner, and the CLI, so it now carries a second unit. It is not enabled, and it refuses to start with a message until an operator fills in /etc/vole/runner.env: who runs builds on a machine is that machine owner's decision. The unit runs as a dedicated account, because rootless podman needs a home directory and a range of subordinate ids, and because a job should not find the forge's own account on the same disk. The arguments live in that one file rather than in the unit, split at spaces by systemd, so a single unit serves every machine. Each Terraform configuration takes runner=true and creates that machine beside the forge: its own firewall, no backups (its checkouts and caches are copies), the same key for a shell, and Cloud-init that installs the package, creates the account and its subuids, generates the runner's key, pins the instance's host key once, and enables the unit. The runner_setup output prints the three commands that let it take work, filled in with the addresses this apply created. The first-boot file cannot register the runner: the allowlist is per repository, and at first boot there are no repositories. That step stays with an instance admin, and the docs say so.
packaging/nfpm.yaml +11
| @@ -45,6 +45,17 @@ contents: | |||
| 45 | 45 | dst: /usr/lib/systemd/system/vole.service | |
| 46 | 46 | file_info: | |
| 47 | 47 | mode: 0644 | |
| 48 | # The CI runner is the same binary in another mode, so its unit ships here too. | ||
| 49 | # It is not enabled by the package, and it refuses to start until an operator | ||
| 50 | # fills in /etc/vole/runner.env: who runs builds on a machine is that machine | ||
| 51 | # owner's decision. See docs/deploy/runner.md. | ||
| 52 | - src: packaging/systemd/vole-runner.service | ||
| 53 | dst: /usr/lib/systemd/system/vole-runner.service | ||
| 54 | file_info: | ||
| 55 | mode: 0644 | ||
| 56 | - src: packaging/runner.env | ||
| 57 | dst: /etc/vole/runner.env | ||
| 58 | type: config|noreplace | ||
| 48 | 59 | # An operator's edits survive upgrades: rpm gets %config(noreplace), deb gets a | |
| 49 | 60 | # conffile. Changing this file is how you set public_url, pages_domain, or a | |
| 50 | 61 | # different listen address. | |