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.

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.