ci docs: the shared daemon is per runner (runner-a1 runs several jobs at once)
Lint / skill-floor (push) Successful in 11s
Lint / hadolint (push) Successful in 12s
Lint / doc-drift (push) Successful in 13s
Lint / actionlint (push) Successful in 32s

Task logs of run 740: runner-a1 received task 2721 (smoke-studio) at
22:53:02Z and task 2722 (build-variant) at 22:58:38Z while 2721 was still
running. Other runners (runner-1/2/3) have capacity 1. 12e66aa said all
jobs share one daemon; corrected in CHANGELOG, AGENTS.md, the script
header and the lint.yml comment. No behaviour change.
This commit is contained in:
2026-10-23 11:43:48 +02:00
parent 12e66aa52e
commit e0611c787f
4 changed files with 11 additions and 7 deletions
+2 -1
View File
@@ -91,7 +91,8 @@ jobs:
run: bash scripts/check-workflow-shell.sh .gitea/workflows
- name: No raw docker prune in workflows (shared runner daemon)
# Every docker-publish.yml job shares the runner's Docker daemon, and
# Jobs on the same runner share its Docker daemon (runner-a1 runs
# several docker-publish.yml jobs at once), and
# a bare `docker system prune -a` in one job deletes the smoke image
# another job is testing (v1.12.2 run 740 shipped without its -studio
# tags that way). Reclaim goes through scripts/ci-reclaim-docker.sh,
+2 -2
View File
@@ -45,8 +45,8 @@ re-brand of opencode-devbox's `pi-only` variant.
update-description). The `-studio` variant adds independent
`smoke-studio` + `build-variant-studio` jobs that gate only the
`-studio` tags (never the core `:latest` release).
- `scripts/ci-reclaim-docker.sh` — the ONLY way a CI job frees disk. All jobs
share the runner's Docker daemon, so a bare `docker system prune -a` in one
- `scripts/ci-reclaim-docker.sh` — the ONLY way a CI job frees disk. Jobs on
the same runner share its Docker daemon (runner-a1 runs several at once), so a bare `docker system prune -a` in one
job deletes the smoke image another job is mid-test on (v1.12.2 run 740 lost
its `-studio` tags that way). The script spares images labelled
`se.jordbo.pi-devbox.ci-smoke-image`; the smoke jobs apply that label,
+3 -2
View File
@@ -17,8 +17,9 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`).
- **CI: a smoke job's image could be deleted mid-test by another job's disk
reclaim.** This is why v1.12.2's `-studio` tags were not published by its
tag run. All `docker-publish.yml` jobs share the runner's Docker daemon, and
each began with `docker system prune -af --volumes`, which removes every
tag run. Jobs that land on the same runner share its Docker daemon (in run
740, runner-a1 ran `smoke-studio` and `build-variant` at the same time), and
each job began with `docker system prune -af --volumes`, which removes every
image that no container is using at that moment. A smoke image is unused
between `smoke-test.sh`'s one-shot `docker run`s. In run 740, `smoke`
passed and `build-variant` started. Its prune logged
+4 -2
View File
@@ -9,8 +9,10 @@
# bash scripts/ci-reclaim-docker.sh assert-protected IMG # smoke preflight
# bash scripts/ci-reclaim-docker.sh lint WORKFLOW... # lint.yml guard
#
# WHY THIS EXISTS. The jobs share ONE Docker daemon (the runner's socket), and
# each used to start with `docker system prune -af --volumes`. That removes
# WHY THIS EXISTS. Jobs that land on the same runner share its Docker daemon
# (runner-a1 runs several at once: in run 740 it had smoke-studio and
# build-variant going together), and each job used to start with
# `docker system prune -af --volumes`. That removes
# every image no container is using at that instant, and a smoke image is
# exactly that for most of its life: smoke-test.sh runs one `docker run --rm`
# per assertion, so between assertions nothing holds the image. v1.12.2 run 740