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.
Bound and reclaim the runner's saved checkouts
f594f1a16f6f8a8a3ee2867a44249b72a2c76c96 · Keenan Nemetz · 5d ago · parent de84c32b
Bound and reclaim the runner's saved checkouts The runner already downloaded each repository once into --dir and cloned every job from that copy, but nothing kept the copies bounded: they grew with every tag, every branch, and every commit a job pinned by id, and a force-push left the old history reachable through the remote-tracking reflogs. A long-lived runner filled its disk and then could not check anything out at all. Repack a copy that is most of the cap, dropping the objects no branch or tag can reach and the temporary refs a killed runner leaves behind; then delete the least recently used copy when the cap is still reached. --git-cache-size sets the cap (10G by default, 0 keeps every copy). The repository this runner is about to build is never the one deleted, and a copy another process holds is passed over. Reading and writing a saved checkout now takes a per-repository lock, so a repack or a deletion in one runner process cannot run underneath another's clone, or underneath the site and release pushes that are written from the same cache. The first clone skips the working-tree checkout, which nothing ever read.
docs/cli.md +5−2
| @@ -268,7 +268,7 @@ vole runner --remote <ssh-url> [--once] [--dir <path>] [--repos <name>]... [--la | |||
| 268 | 268 | [--container-runtime <name>] [--container-network none|bridge] | |
| 269 | 269 | [--container-pull missing|always|never] [--container-user <uid:gid>] [--container-userns <mode>] | |
| 270 | 270 | [--container-memory <size>] [--container-cpus <n>] [--container-pids <n>] | |
| 271 | [--cache-size <size>] [--no-cache] | ||
| 271 | [--cache-size <size>] [--git-cache-size <size>] [--no-cache] | ||
| 272 | 272 | vole run cancel <id> [--remote <name|url>] | |
| 273 | 273 | vole run rerun <id> [--remote <name|url>] | |
| 274 | 274 | vole workflow check [--dir <path>] | |
| @@ -287,7 +287,10 @@ runner, but it does read the secrets its jobs declare from the instance the | |||
| 287 | 287 | checkout's `origin` names, using your key; a value it cannot read is left unset with | |
| 288 | 288 | a note, and the values it did read are masked in the output. It needs a container | |
| 289 | 289 | runtime; there is no host mode. Both it and | |
| 290 | `vole runner` reuse a job cache (see [Runners § Caching](runner.md#caching)). See | ||
| 290 | `vole runner` reuse a job cache (see [Runners § Caching](runner.md#caching)). A | ||
| 291 | runner also keeps a copy of every repository it builds and clones each job from it, | ||
| 292 | so the history crosses the network once rather than once per run (see | ||
| 293 | [Runners § Saved checkouts](runner.md#saved-checkouts)). See | ||
| 291 | 294 | [Workflows § Check and run a workflow locally](workflows.md#check-and-run-a-workflow-locally). | |
| 292 | 295 | ||
| 293 | 296 | `workflow dispatch` queues a manual run on the instance instead. The workflow must | |