Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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