From bbfea71bb9c4fb95c7f5af9d6536df33a35ab12f Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Fri, 20 Mar 2026 10:33:46 -0400 Subject: [PATCH] Add Linux ARM64 (aarch64-unknown-linux-gnu) release target Add aarch64-unknown-linux-gnu as a third release platform using GitHub's native ARM64 runner. Updates the release workflow matrix, install script architecture detection, and CLI upgrade platform detection. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/release.yml | 2 ++ apps/marketing/public/install.sh | 7 ++++--- lib/crates/fabro-cli/src/upgrade.rs | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 28189b941..414806c82 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,6 +25,8 @@ jobs: runner: macos-15 - target: x86_64-unknown-linux-gnu runner: ubuntu-latest + - target: aarch64-unknown-linux-gnu + runner: ubuntu-22.04-arm steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: diff --git a/apps/marketing/public/install.sh b/apps/marketing/public/install.sh index 9315e0ca7..fb36c2a61 100755 --- a/apps/marketing/public/install.sh +++ b/apps/marketing/public/install.sh @@ -53,12 +53,13 @@ case "$OS" in ;; Linux) case "$ARCH" in - x86_64) TARGET="x86_64-unknown-linux-gnu" ;; - *) error "Unsupported Linux architecture: $ARCH. Supported: x86_64" ;; + x86_64) TARGET="x86_64-unknown-linux-gnu" ;; + aarch64) TARGET="aarch64-unknown-linux-gnu" ;; + *) error "Unsupported Linux architecture: $ARCH. Supported: x86_64, aarch64" ;; esac ;; *) - error "Unsupported OS: $OS. Supported platforms: macOS (Apple Silicon), Linux (x86_64)" + error "Unsupported OS: $OS. Supported platforms: macOS (Apple Silicon), Linux (x86_64, aarch64)" ;; esac diff --git a/lib/crates/fabro-cli/src/upgrade.rs b/lib/crates/fabro-cli/src/upgrade.rs index 38abfeb7f..6d492dedd 100644 --- a/lib/crates/fabro-cli/src/upgrade.rs +++ b/lib/crates/fabro-cli/src/upgrade.rs @@ -168,6 +168,7 @@ fn detect_target() -> Result<&'static str> { match (std::env::consts::OS, std::env::consts::ARCH) { ("macos", "aarch64") => Ok("aarch64-apple-darwin"), ("linux", "x86_64") => Ok("x86_64-unknown-linux-gnu"), + ("linux", "aarch64") => Ok("aarch64-unknown-linux-gnu"), (os, arch) => bail!("unsupported platform: {os}/{arch}"), } } @@ -438,6 +439,8 @@ mod tests { assert_eq!(result.unwrap(), "x86_64-unknown-linux-gnu"); } else if cfg!(target_os = "macos") && cfg!(target_arch = "aarch64") { assert_eq!(result.unwrap(), "aarch64-apple-darwin"); + } else if cfg!(target_os = "linux") && cfg!(target_arch = "aarch64") { + assert_eq!(result.unwrap(), "aarch64-unknown-linux-gnu"); } // On other platforms it would return an error, which is fine }