Skip to content

fix(release): build aarch64-musl natively on arm64 runners, replace retired macos-13#155

Merged
kevincodex1 merged 1 commit into
mainfrom
fix/release-runners
Jul 6, 2026
Merged

fix(release): build aarch64-musl natively on arm64 runners, replace retired macos-13#155
kevincodex1 merged 1 commit into
mainfrom
fix/release-runners

Conversation

@kevincodex1

@kevincodex1 kevincodex1 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the two release-pipeline failures that have blocked binary publishing since v0.4.0: the aarch64-unknown-linux-musl build always fails, and the x86_64-apple-darwin job queues forever because GitHub retired macos-13 runners.

Motivation & context

Release runs for v0.4.0 (#28446773996) and v0.5.0 (#28740238410) both failed the same way:

  • aarch64-linux-musl Build step fails. The job cross-compiled a musl target with the glibc cross toolchain (CC=aarch64-linux-gnu-gcc), which aws-lc-sys (pulled in via rustls by the AWS SDK, libp2p-tls, and reqwest) can't build with. No aarch64-linux asset has ever shipped.
  • x86_64-apple-darwin never starts. macos-13 was GitHub's last plain Intel image and has been retired — the job sits queued indefinitely, holding the run (and the release-main concurrency group) open.

Because release-binaries fails, the downstream npm-publish, homebrew-bump, and web-sync jobs were skipped for both releases — nothing has been published to npm or the Homebrew tap.

Kind of change

  • Tests / CI

What changed

.github/workflows/release.yml only (no crate changes):

  • aarch64-unknown-linux-musl now builds on ubuntu-24.04-arm (GitHub's native arm64 runners, free for public repos). The build is native, so the glibc cross-toolchain hack is deleted and the stock musl-tools recipe matches the x86_64 leg exactly.
  • The aarch64 smoke-test skip is removed — the binaries can now execute on their build runner, so arm64 Linux artifacts get the same --version gate as every other target.
  • x86_64-apple-darwin moves from retired macos-13 to macos-15-intel, GitHub's supported Intel label.

How a reviewer can verify

Reproduced the previously-failing target natively on arm64 with the exact workflow recipe (rustup target + musl-tools, no cross env):

docker run --rm --platform linux/arm64 -v "$PWD:/src" rust:1-bookworm bash -c '
  apt-get update -qq && apt-get install -y -qq musl-tools cmake
  rustup target add aarch64-unknown-linux-musl
  cd /src && cargo build --release --target aarch64-unknown-linux-musl \
    -p gl -p git-remote-gitlawb -p gitlawb-node
  target/aarch64-unknown-linux-musl/release/gl --version'

Local repro ran until the machine's disk filled: cc-rs picked up aarch64-linux-musl-gcc from stock musl-tools and compiled deep into aws-lc-sys's C sources (the exact crate that broke the cross build) with no errors — the recipe is also identical to the x86_64-musl leg that already passes in CI. Runner labels ubuntu-24.04-arm and macos-15-intel are documented GitHub-hosted labels for public repos; actionlint is clean on the edited workflow. Final proof is the v0.5.1 release run this PR unlocks.

Merging this lands a fix(release) commit, so release-please will cut v0.5.1 with the repaired pipeline — that release should attach all five targets and un-skip npm/Homebrew/web-sync for the first time.

Before you request review

  • Scope is one logical change; no unrelated churn
  • cargo test --workspace passes locally (N/A — workflow-only change, no Rust code touched)
  • New behavior is covered by tests (N/A — CI config)
  • cargo fmt --all and cargo clippy --workspace --all-targets -- -D warnings are clean (N/A — no Rust changes)
  • Commit titles use Conventional Commits (feat(...), fix(...), docs(...))
  • Docs / .env.example updated if behavior or config changed (or N/A)
  • Checked existing PRs so this isn't a duplicate

Notes for reviewers

  • The stuck v0.5.0 run needs a manual Cancel in the Actions UI — its queued macos-13 job holds the release-main concurrency group.
  • v0.5.0 itself stays asset-incomplete (no aarch64-linux or Intel-mac archives, not on npm/Homebrew); v0.5.1 supersedes it immediately, so no backfill is attempted here.
  • Windows stays continue-on-error best-effort, unchanged.

Summary by CodeRabbit

  • Chores
    • Improved release binary build coverage by running certain builds on matching-architecture runners.
    • Updated smoke tests so all release targets are checked consistently.
    • Simplified Linux musl build setup by removing extra cross-compilation handling.

…etired macos-13

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 <noreply@anthropic.com>
@kevincodex1 kevincodex1 requested a review from beardthelion as a code owner July 6, 2026 01:59
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7d516417-1e0b-4bcc-a49b-1b2dbe930142

📥 Commits

Reviewing files that changed from the base of the PR and between 5f63f28 and de49cb7.

📒 Files selected for processing (1)
  • .github/workflows/release.yml

📝 Walkthrough

Walkthrough

The release workflow's build matrix is updated so aarch64-unknown-linux-musl and x86_64-apple-darwin builds run on native arm64 and macOS Intel runners respectively. Cross-compilation toolchain setup for musl is simplified, and the smoke test step now runs unconditionally for all targets.

Changes

Release Workflow Update

Layer / File(s) Summary
Matrix runner assignments
.github/workflows/release.yml
Switches aarch64-unknown-linux-musl to an arm64 Ubuntu runner and x86_64-apple-darwin to macos-15-intel, with updated explanatory comments replacing prior cross-build runner assignments.
Musl toolchain simplification and smoke test coverage
.github/workflows/release.yml
Simplifies musl builds to only install musl-tools, removing cross GCC toolchain installation and linker/CC env vars; removes the conditional skip so smoke tests run on all targets including aarch64-unknown-linux-musl.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • Gitlawb/node#59: Modifies the same "Smoke test binaries" logic in release.yml, removing the aarch64-unknown-linux-musl skip and switching to a native arm64 runner.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the release workflow fix for native arm64 builds and the macOS runner replacement.
Description check ✅ Passed The description follows the template with summary, context, change details, verification, and reviewer notes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/release-runners

Comment @coderabbitai help to get the list of available commands.

@beardthelion beardthelion added the kind:bug Defect fix — wrong or unsafe behavior label Jul 6, 2026
@kevincodex1 kevincodex1 merged commit 6cff528 into main Jul 6, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind:bug Defect fix — wrong or unsafe behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants