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