ci: stop disk reclaim from deleting a smoke image mid-test
v1.12.2 run 740: build-variant's `docker system prune -af --volumes` untagged pi-devbox:smoke-studio 30 ms after smoke-studio loaded it, so every studio assertion failed and the -studio tags were not published. All jobs share the runner's Docker daemon, and a smoke image is unused between smoke-test.sh's one-shot `docker run`s. - scripts/ci-reclaim-docker.sh: the same reclaim, per object type, but never prunes an image labelled se.jordbo.pi-devbox.ci-smoke-image; labelled orphans are swept after 6h. `assert-protected IMG` is the smoke preflight; `lint WORKFLOW...` rejects raw system/image prunes. - smoke jobs: label their image, assert it, tag it per run (pi-devbox:smoke[-studio]-<run_id>), remove it in an always() step. - all five reclaim sites call the script; lint.yml runs the guard. - Job order unchanged: studio jobs still gate only the -studio tags. Verified on an isolated docker:29-dind (old prune deletes a labelled image; new reclaim keeps it, removes unlabelled + 1970-created labelled images, spares an in-use image, no errors); actionlint, shellcheck, lint-shell, check-workflow-shell, check-doc-drift all clean.
This commit is contained in:
@@ -90,6 +90,14 @@ jobs:
|
||||
# actionlint so the more precise diagnostic surfaces first.
|
||||
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
|
||||
# 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,
|
||||
# which spares labelled smoke images; this keeps it that way.
|
||||
run: bash scripts/ci-reclaim-docker.sh lint .gitea/workflows/*.yml
|
||||
|
||||
- name: link-pi-models.sh contract (two-sided, no docker needed)
|
||||
# The entrypoint links ~/.pi/agent/models.json to a mounted shared file
|
||||
# and must never replace a real file or a user's own link. Tested here
|
||||
|
||||
Reference in New Issue
Block a user