vole
Clone
Read only, no credentials:
https://rodent.software/git/vole.git
Write over SSH with a registered key:
git clone ssh://git@0.0.0.0:2222/vole.git
A free and open-source forge that lives in your Git repo.
Document runners, and check the three files that describe one agree
e21f6c5e26cc49d5a08d337cb1c7b70d373a8cce · Keenan Nemetz · 3d ago · parent d0d4239f
Document runners, and check the three files that describe one agree A runner is a second decision after the forge, not part of its first boot: it executes repository code, it can read every secret a job declares, and the allowlist that lets it take work is per repository. The guide says what the deployment creates, how to set one up on a machine you already have, the one step only an admin can do, what to know before giving it a repository, and how to upgrade it. render.sh now renders either first-boot file, taking its placeholder list from the render line it uses, so the checker reads the same line instead of keeping a second copy. check-deploy.py renders both templates, requires each one's promised files with literal modes, and holds the runner's three descriptions together: the template writes the arguments, the unit reads them, and the package ships the example an operator copies. A name that drifts leaves a machine enabled and idle, which looks exactly like a runner that is working.
docs/deploy/aws.md +9
| @@ -66,11 +66,20 @@ Everything else has a working default. Pass these with `-var` or in a | |||
| 66 | 66 | | `name` | `vole` | Name of the instance, key pair, and security group | | |
| 67 | 67 | | `tls_mode` | `acme` | `proxy` leaves TLS to a proxy you run instead, and serves plain HTTP on loopback | | |
| 68 | 68 | | `instance_name` | `Vole` | What the landing page calls this forge | | |
| 69 | | `runner` | `false` | Create a second machine that runs CI jobs. See [CI runners](runner.md): it needs one more step per repository before it takes work | | ||
| 70 | | `runner_type` | `t3.medium` | Instance type for that machine. Builds want memory, so raise this before the forge's own type | | ||
| 71 | | `runner_disk_gb` | `40` | Its root volume. Container images and caches fill this, not the repositories | | ||
| 72 | | `runner_labels` | `["linux"]` | What the runner advertises; a job with `runs-on` only comes to a machine carrying every label it asks for | | ||
| 73 | | `runner_network` | `bridge` | Whether a job that asks for a network gets one. Jobs that fetch dependencies need it | | ||
| 69 | 74 | | `protect_instance` | `true` | Refuses termination through the API, so `terraform destroy` needs `-var protect_instance=false` | | |
| 70 | 75 | ||
| 71 | 76 | `terraform apply` is safe to run again: it reports no changes. It does not upgrade | |
| 72 | 77 | Vole, and it does not touch the machine's data. | |
| 73 | 78 | ||
| 79 | With `-var runner=true`, `terraform output runner_setup` prints the commands that | ||
| 80 | let the second machine take jobs. It needs one step per repository before it | ||
| 81 | receives any work; see [CI runners](runner.md). | ||
| 82 | |||
| 74 | 83 | The elastic address is not decoration. An EC2 public address changes when an | |
| 75 | 84 | instance is stopped and started, and both the host name in `public_url` and the | |
| 76 | 85 | SSH host key people's Git clients pin depend on the instance keeping its | |