Repository navigation
CI: restore the pinned Db2 image from actions/cache, not icr.io per shard (Fixes #5262) - #5265
Conversation
…hard (Fixes #5262) Cache key = the pinned digest; restore everywhere, save from main only (one shard, on a miss). A miss or an image-id mismatch falls back to the existing retried, digest-pinned pull. The harness runs a cache-loaded image by a local alias (a digest cannot be a tag). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No description provided. |
|
No description provided. |
|
PR #5265 @ d39056a: 2 failed check(s) == full-suite part 3/3 (failure) -- real == muninn (failure) -- infra |
…s the .test_durations PEM-header-in-a-test-id gitleaks hit (Part of #5262) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
CI shepherd: the head of this PR (7800c2b) is not the one a maintainer labelled |
|
No description provided. |
|
No description provided. |
Fixes #5262.
What
Every
db2 N/4shard (det-sweep) anddb2-part(evidence-refresh) pulled the multi-GB pinned image from icr.io; outages outlast #5048's 4-attempt retry. Now the image comes fromactions/cache, keyeddb2-image-<pinned digest>.tests/tools/db2_image_cache.py(stdlib only):key,load DIR,save DIR.loaddoeszstd -d | docker load, then checks the loaded image id against the id recorded at save time (taken from the image pulled by the pinned digest), and tags a local alias. A miss, a failed load or an id mismatch exits 1 and the workflow runs the existingci_retry.sh 4 15 -- docker pullof the digest ref.equivalence_db2.py:IMAGE_ALIAS+run_ref().docker loaddrops the digest name (checked with a realdocker save/loadround trip: only "Loaded image ID" comes back, the digest ref no longer resolves; a digest cannot be a local tag), so the harness runs from the alias only when the digest ref is absent.pull_imagetreats the alias as present;_check_container_imagecompares against the same ref. The pin (IMAGE) is unchanged.det-sweep.ymldb2job: name the key,actions/cache/restore, background step isload || ci_retry pull, thendocker save+actions/cache/saveguarded by miss, notpull_request,refs/heads/main, shard1/N(single writer; det-sweep's db2 job runs on PRs and dispatch, so this writer only fires on a dispatch on main).evidence-refresh.ymldb2-part: same restore / load-or-pull; save from part1/4. This job runs on main's nightly schedule, so it is what warms the cache for PRs. PRs restore main's entry (cache scope) and never write their own copy.Workflow edits: owner approval
.github/workflows/det-sweep.ymlandevidence-refresh.ymlare edited on purpose: the workflow change is the fix. Issue #5262 states "Workflow edits approved by the owner (2026-10-16, this request; #5048's 2026-10-14 approval covers this class)", and the worker brief carriedallow_workflowsfor this item. If the night-shift queue item lacks that flag, the owner must confirm before merge; the code half (db2_image_cache.py,equivalence_db2.pyalias) is inert without the workflow half.Class
CI network fetches that fail as infra flakes (#5048 family). Covered: both workflows that start the Db2 container (det-sweep
db2, evidence-refreshdb2-partincl.records). Not covered: Muninn's Docker Hub pulls (see sibling gaps in the report).Measurements
Before (runs 38830516356 / 38823577266, 2026-10-15/16, successful shards): "Wait for the background Db2 start" took 2m50s-3m45s (pull overlapped with setup, plus Db2 start); on the six failing runs the step failed after the 4 pull attempts. After: not yet measurable, the cache is empty until the first main/nightly run saves it; I will add the warm-cache numbers (restore + load seconds, compressed size, "cache: hit" line, no icr.io request) after the first dispatch on this branch. Cache budget caveat: the repo's caches total ~11.2 GB already (over the 10 GB limit, LRU eviction), so a multi-GB entry can evict others or itself be evicted; size is reported by the save step ("saved ..., N MB compressed").
Tests
tests/cobol_mainframe/test_db2_image_cache.py(10): key = digest, restore everywhere / save guarded to main, miss falls back to a pull, id mismatch refused, already-present image needs no cache, alias used by the harness. Also green: test_db2_odbc_pin, test_db2_image_pin, test_ci_retry.pr_gates --fast6/6. No golden change (no parsing code).Cross-repo: none.
🤖 Generated with Claude Code