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.
Build one image-file digest once per runner process
77056ba834ba243104726b91e7ff19498d4e8337 · Keenan Nemetz · 2d ago · parent 18c559ea
Build one image-file digest once per runner process Two slots leased jobs that name the same image-file and both built it: the same bytes, the same tag, twice the CPU and twice the disk, with two runtimes racing to tag the result. The first slot now builds it and the others wait on the same answer, which is shared by the process rather than by the session, because that is what --jobs is. Waiting is not free: a build can run for half an hour, and a runner that stops heartbeating loses the run it is holding. So a waiter heartbeats on the same beat its own build would have, and stops if the lease goes away or a maintainer cancels the run. A failed build fails the jobs waiting on it, since the same definition would fail the same way. Two runner processes sharing a --dir can still both build the digest. That is waste, not damage: the definition is pinned by digest, so both builds produce the same image under the same tag, and serialising that too would mean a lock file per digest beside the caches. Refs: 01M6SCWCSX39QXS38QAHQSMVGX (#216)
docs/runner.md +5
| @@ -196,6 +196,11 @@ was queued. It renders the definition to a Dockerfile, builds it with the | |||
| 196 | 196 | configured OCI runtime, and tags the result by the definition digest. A later job | |
| 197 | 197 | with the same definition reuses that tag. | |
| 198 | 198 | ||
| 199 | With `--jobs`, jobs that name the same definition build it once: a job whose image | ||
| 200 | another job is already building waits for that build, saying so at the top of its | ||
| 201 | log, and keeps its lease alive while it waits. If the build fails, the jobs waiting | ||
| 202 | on it fail with the same reason. | ||
| 203 | |||
| 199 | 204 | The image build uses the runtime's own default network, so a base image and its | |
| 200 | 205 | `run:` commands can fetch packages. The job's own network request applies to the job | |
| 201 | 206 | container, not to the build. | |