From de49cb7921e0cb3df86b0f2d085c94a4a21f5bd1 Mon Sep 17 00:00:00 2001 From: Kevin Codex Date: Mon, 6 Jul 2026 09:10:55 +0800 Subject: [PATCH] fix(release): build aarch64-musl natively on arm64 runners, replace retired macos-13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The aarch64-unknown-linux-musl leg cross-compiled a musl target with the glibc toolchain (CC=aarch64-linux-gnu-gcc), which aws-lc-sys cannot build with — the Build step failed on every release and no aarch64-linux asset has ever shipped. Build it natively on ubuntu-24.04-arm instead (free for public repos), using the same stock musl-tools recipe as the x86_64 leg, and drop the smoke-test skip since the binaries now run on their build runner. The x86_64-apple-darwin leg targeted macos-13, which GitHub has retired; the job queues forever and holds the release concurrency group open. Move it to macos-15-intel. Both failures also skipped the downstream npm-publish, homebrew-bump, and web-sync jobs, so v0.4.0 and v0.5.0 were never published there. Co-Authored-By: Claude Fable 5 --- .github/workflows/release.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e27bfe1b..d47d65e1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -116,10 +116,14 @@ jobs: include: - target: x86_64-unknown-linux-musl os: ubuntu-latest + # Native arm64 runner: cross-compiling this target with the glibc + # toolchain broke aws-lc-sys, and native lets the smoke test run. - target: aarch64-unknown-linux-musl - os: ubuntu-latest + os: ubuntu-24.04-arm + # macos-13 (the last plain Intel image) is retired and queues forever; + # macos-15-intel is GitHub's supported Intel label. - target: x86_64-apple-darwin - os: macos-13 + os: macos-15-intel - target: aarch64-apple-darwin os: macos-14 - target: x86_64-pc-windows-msvc @@ -137,16 +141,13 @@ jobs: toolchain: stable targets: ${{ matrix.target }} + # Both musl targets build natively on a matching-arch runner, so the stock + # musl-gcc wrapper is all that's needed (no cross toolchain). - name: Install musl tools (linux) if: contains(matrix.target, 'linux-musl') run: | sudo apt-get update sudo apt-get install -y musl-tools - if [ "${{ matrix.target }}" = "aarch64-unknown-linux-musl" ]; then - sudo apt-get install -y gcc-aarch64-linux-gnu - echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV" - echo "CC_aarch64_unknown_linux_musl=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV" - fi - name: Cache cargo uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 @@ -171,10 +172,9 @@ jobs: cargo build --release --target ${{ matrix.target }} $args # Run each packaged binary's --version so a broken release artifact fails the - # build instead of shipping. Skipped for cross-compiled targets that can't run - # on the host runner (aarch64 linux on an x86_64 runner). + # build instead of shipping. Every target builds on a matching-arch runner, + # so all of them can execute here. - name: Smoke test binaries - if: ${{ matrix.target != 'aarch64-unknown-linux-musl' }} shell: bash run: | set -euo pipefail