From 6548cf93588ae9b855f753b845153801e9a75129 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 17 Sep 2026 07:19:59 -0400 Subject: [PATCH] ci(standards-build): build jouleclaw-rs on linux-arm64 without debuginfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The jouleclaw-rs leg on linux-arm64 has been red on main because its aarch64 test target, with Linux's full DWARF embedded in every test binary, outgrows the ~15 GB left on the shared txarm volume (/var/lib/docker and /ci-cache are both on /dev/vdb1, 87% used). The link fails with "No space left on device" — a capacity failure, not a code failure. Reproduced with the same toolchain, +fp16 rustflags and image: with debuginfo the build runs out of space at link; with CARGO_PROFILE_DEV_DEBUG=0 the target is ~6 GB and the full suite passes. Scoped to this one job via $GITHUB_ENV (a matrix-level env field would give every other job an empty CARGO_PROFILE_DEV_DEBUG). A cache_suffix moves this job to a fresh cache namespace so it cannot restore the old full-debuginfo target alongside the new build; every other job's cache key string is unchanged. Co-Authored-By: Claude Opus 5 --- .github/workflows/standards-build.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/standards-build.yml b/.github/workflows/standards-build.yml index f3ec8bd85..e61c899b1 100644 --- a/.github/workflows/standards-build.yml +++ b/.github/workflows/standards-build.yml @@ -82,7 +82,7 @@ jobs: # failing for no apparent reason, check `df -h /mnt/lima-colima-txarm` # on the txarm VM before suspecting the code: a full cache volume # fails whatever happens to be building, not whatever changed. - - { name: jouleclaw-rs, dir: jouleclaw/jouleclaw-rs, runner: linux-arm64, rustflags: "-C target-feature=+fp16" } + - { name: jouleclaw-rs, dir: jouleclaw/jouleclaw-rs, runner: linux-arm64, rustflags: "-C target-feature=+fp16", cache_suffix: "-nodebug" } steps: - uses: actions/checkout@v5 @@ -124,6 +124,24 @@ jobs: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + # jouleclaw-rs is the CAPACITY entry above. Linux embeds full DWARF in every + # test binary, so with default debuginfo its aarch64 test target outgrows + # the ~15 GB left on the shared txarm volume and the link fails with + # "No space left on device" (reproduced with the same toolchain, flags and + # image). Without debuginfo the same target is ~6 GB and the whole suite + # passes. Panic messages keep their file:line: that comes from the panic + # location, not from DWARF. + # + # Set through $GITHUB_ENV rather than a matrix field on purpose: a matrix + # field would hand every other job CARGO_PROFILE_DEV_DEBUG="", which cargo + # can reject. `cache_suffix` gives this job a fresh cache namespace so it + # cannot restore a full-debuginfo target and hold both builds at once; + # for every other job the suffix is empty and its key string is unchanged. + - name: Trim debuginfo (arm64 jouleclaw) + if: matrix.name == 'jouleclaw-rs' + shell: bash + run: echo "CARGO_PROFILE_DEV_DEBUG=0" >> "$GITHUB_ENV" + - name: Cache cargo registry + target uses: actions/cache@v4 with: @@ -131,9 +149,9 @@ jobs: ~/.cargo/registry ~/.cargo/git ${{ matrix.dir }}/target - key: standards-${{ matrix.name }}-${{ hashFiles(format('{0}/Cargo.lock', matrix.dir), 'rust-toolchain.toml') }} + key: standards-${{ matrix.name }}${{ matrix.cache_suffix }}-${{ hashFiles(format('{0}/Cargo.lock', matrix.dir), 'rust-toolchain.toml') }} restore-keys: | - standards-${{ matrix.name }}- + standards-${{ matrix.name }}${{ matrix.cache_suffix }}- # --all-targets is load-bearing: a plain `cargo check` does not build test # targets, and smart-byte's dev-dependencies drifted independently of its -- 2.54.0 (Apple Git-157)