From 9bcc765408ed0051d297fc7e2742b63dd684298a Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Mon, 31 Aug 2026 08:04:43 +0200 Subject: [PATCH] fix(ci): the builder image has no unzip, so the replay tier had no input Found by CI itself, on run 1437 -- the first run that ever got far enough to try. Everything ahead of it worked: checkout brought both submodules, v2 pulled and passed its own version assert, and the fixtures resolved at the pinned version. Then: scripts/artifacts/pull_artifacts.sh: line 54: unzip: command not found The replay fixtures ship as a zip in the generic package registry and pull_artifacts.sh unpacks them with unzip. Without it the step exits 127 and the T2 tier has no input -- reported as a missing fixture by the verify step below, which is a missing tool wearing the wrong label. Worth naming why the local rehearsal missed this and CI did not: the rehearsal had the dumps staged in the working tree by hand, so it built and ran the tier without ever executing the script that fetches them. The image was checked against the build, not against the job. Tag v2 -> v3, in all three places, in one commit. TRACES: DP-007 | PR-004 --- .gitea/workflows/unit-tests.yml | 6 +++--- Dockerfile.builder-cpu | 5 +++++ scripts/ci/build_builder_image.sh | 9 +++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/unit-tests.yml b/.gitea/workflows/unit-tests.yml index 5ffd1f4..6c18792 100644 --- a/.gitea/workflows/unit-tests.yml +++ b/.gitea/workflows/unit-tests.yml @@ -40,7 +40,7 @@ jobs: # bumping the tag in scripts/ci/build_builder_image.sh AND here, in one # commit -- see that script's header. container: - image: gitea.tourolle.paris/dtourolle/sae-builder-cpu:v2 + image: gitea.tourolle.paris/dtourolle/sae-builder-cpu:v3 steps: - name: Checkout repository @@ -73,8 +73,8 @@ jobs: # line above and the image that actually landed disagree, which is # exactly the drift the pinning exists to prevent -- so it fails the # job rather than building against an unknown toolchain. - [ "$SAE_BUILDER_VERSION" = "v2" ] || { - echo "image reports version '$SAE_BUILDER_VERSION', workflow pins v2" >&2 + [ "$SAE_BUILDER_VERSION" = "v3" ] || { + echo "image reports version '$SAE_BUILDER_VERSION', workflow pins v3" >&2 exit 1 } diff --git a/Dockerfile.builder-cpu b/Dockerfile.builder-cpu index a111b92..1203e46 100644 --- a/Dockerfile.builder-cpu +++ b/Dockerfile.builder-cpu @@ -92,6 +92,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ ca-certificates \ curl \ + # unzip is not optional here: the T2 replay fixtures ship as a zip in the + # generic package registry and scripts/artifacts/pull_artifacts.sh unpacks + # them with it. Without unzip that step exits 127 and the replay tier has no + # input -- which is a missing tool reported as a missing fixture. + unzip \ # Gitea's act_runner executes JS actions (actions/checkout, upload-artifact) # with the `node` found *inside* the container. Without this the job cannot # even check the repository out. Same reason as the kpnpp-builder image. diff --git a/scripts/ci/build_builder_image.sh b/scripts/ci/build_builder_image.sh index 7c59150..f051a10 100644 --- a/scripts/ci/build_builder_image.sh +++ b/scripts/ci/build_builder_image.sh @@ -5,9 +5,9 @@ # TRACES: DP-007 | PR-004 # # Usage: -# scripts/ci/build_builder_image.sh # build only, tag v2 +# scripts/ci/build_builder_image.sh # build only, tag v3 # scripts/ci/build_builder_image.sh --push # build and push -# scripts/ci/build_builder_image.sh --tag v3 --push # bump the pinned tag +# scripts/ci/build_builder_image.sh --tag v4 --push # bump the pinned tag # scripts/ci/build_builder_image.sh --no-cache # force a clean rebuild # # The tag is the contract with CI. .gitea/workflows/unit-tests.yml names an @@ -35,9 +35,10 @@ DOCKERFILE="Dockerfile.builder-cpu" # image it landed in reports this same version, so a drift shows up as a failed # job rather than as a build against the wrong toolchain. # -# v2 adds libfftw3-dev: the learned scene-boundary detector's find_library is +# v2 added libfftw3-dev: the learned scene-boundary detector's find_library is # REQUIRED at configure time, so v1 cannot configure this repository at all. -TAG="v2" +# v3 adds unzip, which pull_artifacts.sh needs to unpack the replay fixtures. +TAG="v3" PUSH=0 EXTRA_ARGS=()