From 03a200a8676a0f31100bd65804c5fba1e7e621ef Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 14 Nov 2026 14:19:02 +0000 Subject: [PATCH] fix(ci): Build the arm mac release for its own target and let the other builds finish The release's asset matrix gave every build without a variant -C target-cpu=x86-64, the arm mac included. There the compiler ignores the processor ('x86-64' is not a recognized processor for this target) and warns that neon has to be enabled. For v0.4.10 rustc then crashed with SIGSEGV in the link time optimisation of the binary, in the first run and again when its failed jobs were run a second time. The pull request build on the same runner, which sets no flags, passes. The mac build now names apple-m1, which is that target's default processor. The x86-64 builds are unchanged. The matrix also ran fail-fast, so the mac's failure cancelled the three Windows builds and two of the Linux ones within seconds, both times, and v0.4.10 was published with Linux assets only. The builds are independent and now run to their own end. Not run: the release workflow only runs against a tag, so the first release cut after this is what proves the mac build. Co-Authored-By: Claude Fable 5.2 Claude-Session: https://claude.ai/code/session_01EYmME6yiwe8qbHTU6UgM2z --- .github/workflows/release.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0f60d502..f0c68e35 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,6 +58,9 @@ jobs: upload-assets: needs: test strategy: + # one build that fails says nothing about the others, and cancelling + # them leaves a release with whichever assets happened to finish first + fail-fast: false matrix: os: - ubuntu-latest @@ -78,7 +81,11 @@ jobs: # the baseline names its level rather than leaving this empty: an empty # variable has to survive as set to override .cargo/config.toml, and # windows is not reliable about that - RUSTFLAGS: ${{ matrix.cpu && format('-C target-cpu={0}', matrix.cpu) || '-C target-cpu=x86-64' }} + # + # The arm mac names its own target's default. Handed x86-64 it ignored + # the processor and lost neon with it, and rustc then crashed in the + # link time optimisation of v0.4.10 on both tries + RUSTFLAGS: ${{ matrix.os == 'macos-latest' && '-C target-cpu=apple-m1' || matrix.cpu && format('-C target-cpu={0}', matrix.cpu) || '-C target-cpu=x86-64' }} # v2 takes the plain name, being what almost every machine can run and # the faster build. The arm mac has one build and keeps the plain name # too, which is why the baseline suffix asks about the runner.