From d50d94f89b82093eabec2ddc0dc13d0f939202ed Mon Sep 17 00:00:00 2001 From: Ragnor Comerford Date: Mon, 29 Jun 2026 22:55:44 +0200 Subject: [PATCH] ci: add linux-arm64 (aarch64) prebuilt release target (#316) * ci: add linux-arm64 (aarch64) prebuilt release target Build an omnigraph-linux-arm64 archive in both the tagged-release and edge-release matrices on the ubuntu-24.04-arm runner, and teach the install script to map Linux/aarch64 to the new asset. Update the install and CI docs to list the new platform. Previously aarch64 Linux hit the install-script arch guard ("no prebuilt binary is available for Linux/aarch64") and could only build from source; it is now a first-class prebuilt target. * ci: emit a linux-arm64 bottle in the Homebrew formula The formula generator only resolved macos-arm64 and linux-x86_64 and emitted `on_linux { on_intel }`, so `brew install` on Linux/aarch64 had no URL/sha and failed even though the release now ships an omnigraph-linux-arm64 archive. Resolve that asset's digest and add an `on_arm` block under `on_linux` so the documented Homebrew path matches the new prebuilt target. --- .github/workflows/release-edge.yml | 2 ++ .github/workflows/release.yml | 2 ++ docs/dev/ci.md | 4 ++-- docs/user/install.md | 1 + scripts/install.sh | 3 +++ scripts/update-homebrew-formula.sh | 8 +++++++- 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-edge.yml b/.github/workflows/release-edge.yml index 3996e65c..37537ae7 100644 --- a/.github/workflows/release-edge.yml +++ b/.github/workflows/release-edge.yml @@ -41,6 +41,8 @@ jobs: include: - runner: ubuntu-latest asset_name: omnigraph-linux-x86_64 + - runner: ubuntu-24.04-arm + asset_name: omnigraph-linux-arm64 - runner: macos-14 asset_name: omnigraph-macos-arm64 - runner: windows-latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4b9456a3..186c2fb4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,6 +35,8 @@ jobs: include: - runner: ubuntu-latest asset_name: omnigraph-linux-x86_64 + - runner: ubuntu-24.04-arm + asset_name: omnigraph-linux-arm64 - runner: macos-14 asset_name: omnigraph-macos-arm64 - runner: windows-latest diff --git a/docs/dev/ci.md b/docs/dev/ci.md index 6cc4e1f0..a287481e 100644 --- a/docs/dev/ci.md +++ b/docs/dev/ci.md @@ -9,6 +9,6 @@ - **AWS feature build job**: `cargo build/test -p omnigraph-server --features aws` on ubuntu-latest. - **Windows binary build job**: `cargo build --release --locked -p omnigraph-cli -p omnigraph-server` on windows-latest with smoke checks for `omnigraph.exe version`, `omnigraph-server.exe --help`, and PowerShell installer syntax. - **RustFS S3 integration**: spins up RustFS in Docker, runs `s3_storage`, `server_opens_s3_graph_directly_and_serves_snapshot_and_read`, and `local_cli_s3_end_to_end_init_load_read_flow`. -- **release-edge.yml**: on every push to main, retags `edge`, builds Linux x86_64 / macOS arm64 archives and Windows x86_64 zip + sha256, publishes a rolling prerelease, then smoke-tests the Windows PowerShell installer against `edge`. -- **release.yml**: on `v*` tags, builds the Linux x86_64 / macOS arm64 archives and Windows x86_64 zip release matrix, updates the Homebrew tap (`scripts/update-homebrew-formula.sh`) by pushing the regenerated formula to `ModernRelay/homebrew-tap`, and smoke-tests the Windows PowerShell installer against the tag. +- **release-edge.yml**: on every push to main, retags `edge`, builds Linux x86_64 / Linux arm64 / macOS arm64 archives and Windows x86_64 zip + sha256, publishes a rolling prerelease, then smoke-tests the Windows PowerShell installer against `edge`. +- **release.yml**: on `v*` tags, builds the Linux x86_64 / Linux arm64 / macOS arm64 archives and Windows x86_64 zip release matrix, updates the Homebrew tap (`scripts/update-homebrew-formula.sh`) by pushing the regenerated formula to `ModernRelay/homebrew-tap`, and smoke-tests the Windows PowerShell installer against the tag. - **package.yml**: manual ECR image build; emits two image tags per commit (``, `-aws`) via CodeBuild. diff --git a/docs/user/install.md b/docs/user/install.md index 4a11372c..1bfb91da 100644 --- a/docs/user/install.md +++ b/docs/user/install.md @@ -121,6 +121,7 @@ Copy-Item target\release\omnigraph-server.exe "$env:USERPROFILE\.local\bin\omnig Tagged releases are expected to publish: - `omnigraph-linux-x86_64.tar.gz` +- `omnigraph-linux-arm64.tar.gz` - `omnigraph-macos-arm64.tar.gz` - `omnigraph-windows-x86_64.zip` diff --git a/scripts/install.sh b/scripts/install.sh index d1f8bf90..17dcf5ce 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -35,6 +35,9 @@ platform_asset_name() { Linux/x86_64) printf 'omnigraph-linux-x86_64.tar.gz\n' ;; + Linux/aarch64) + printf 'omnigraph-linux-arm64.tar.gz\n' + ;; Darwin/arm64) printf 'omnigraph-macos-arm64.tar.gz\n' ;; diff --git a/scripts/update-homebrew-formula.sh b/scripts/update-homebrew-formula.sh index f2f0df96..54739d00 100755 --- a/scripts/update-homebrew-formula.sh +++ b/scripts/update-homebrew-formula.sh @@ -47,11 +47,13 @@ RELEASE_JSON="$(gh release view "$TAG" --repo "$REPO_SLUG" --json assets)" MACOS_ARM_URL="https://github.com/${REPO_SLUG}/releases/download/${TAG}/omnigraph-macos-arm64.tar.gz" LINUX_X86_URL="https://github.com/${REPO_SLUG}/releases/download/${TAG}/omnigraph-linux-x86_64.tar.gz" +LINUX_ARM_URL="https://github.com/${REPO_SLUG}/releases/download/${TAG}/omnigraph-linux-arm64.tar.gz" MACOS_ARM_SHA="$(asset_digest "$RELEASE_JSON" "omnigraph-macos-arm64.tar.gz")" LINUX_X86_SHA="$(asset_digest "$RELEASE_JSON" "omnigraph-linux-x86_64.tar.gz")" +LINUX_ARM_SHA="$(asset_digest "$RELEASE_JSON" "omnigraph-linux-arm64.tar.gz")" -for value in "$MACOS_ARM_SHA" "$LINUX_X86_SHA"; do +for value in "$MACOS_ARM_SHA" "$LINUX_X86_SHA" "$LINUX_ARM_SHA"; do if [[ -z "$value" ]]; then printf 'error: failed to resolve one or more release asset digests for %s\n' "$TAG" >&2 exit 1 @@ -86,6 +88,10 @@ class Omnigraph < Formula url "${LINUX_X86_URL}" sha256 "${LINUX_X86_SHA}" end + on_arm do + url "${LINUX_ARM_URL}" + sha256 "${LINUX_ARM_SHA}" + end end def install