release: publish aarch64/arm64 client packages alongside x86_64/amd64 - #4329
ayushsingh82 wants to merge 1 commit into
Conversation
We publish apt/yum repositories but no ARM64 artifacts, so the client cannot be installed from a package on aarch64 hosts (Graviton, Ampere). Every published artifact is x86_64 (rpm) / amd64 (deb) only. doublezerod (CGO_ENABLED=0) cross-compiles to arm64 with no extra toolchain. The Rust doublezero CLI needs cargo-zigbuild rather than a musl-gcc cross toolchain: aws-lc-sys's hand-written arm assembly build script feeds raw --target=<rust-triple> flags straight to the C compiler, which a plain aarch64-linux-musl-gcc (or a bare `zig cc` CC shim) does not accept as-is; cargo-zigbuild rewrites that invocation for zig's own target syntax. New doublezero-cli-arm64 / doublezero-cli-mainnet-beta-arm64 goreleaser build entries (separate ids, so the existing x86_64 entries and their musl-gcc toolchain are untouched), wired into the existing archives/ nfpm ids lists. CI installs zig + cargo-zigbuild for the client build only (release.daily.yml is shared by several pure-Go components that don't need it). Verified locally: `cargo zigbuild --release --package=doublezero --bin=doublezero --target aarch64-unknown-linux-musl` produces a statically-linked ARM64 ELF binary, and `GOOS=linux GOARCH=arm64 go build` on doublezerod does the same. Closes malbeclabs#4176.
|
@armcconnell could you take a look when you have a chance? |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 8a53fee. Configure here.
| - id: doublezero | ||
| package_name: doublezero | ||
| ids: [doublezerod, doublezero-cli] | ||
| ids: [doublezerod, doublezero-cli, doublezero-cli-arm64] |
There was a problem hiding this comment.
Arm64 packages need missing solana dep
High Severity
The new arm64 doublezero deb and rpm packages still declare a hard dependency on doublezero-solana, which is only built and published for x86_64/amd64. On aarch64 hosts, apt/yum cannot satisfy that dependency, so the packages this change adds are not installable from the repo.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 8a53fee. Configure here.


Problem
Closes #4176.
We publish apt and yum repositories but no ARM64 artifacts, so the client cannot be installed from a package on aarch64 hosts. Every published artifact is
x86_64(rpm) /amd64(deb) — since packages publish asany-distro/any-version, architecture is the only real constraint. Verified on the issue itself: the client and daemon both build clean and run correctly on Graviton with no source changes needed — this is packaging only, not a port.Fix
doublezerod(CGO_ENABLED=0, pure Go): addarm64to itsgoarchmatrix — cross-compiles natively, no extra toolchain.doublezeroCLI: newdoublezero-cli-arm64/doublezero-cli-mainnet-beta-arm64build entries targetingaarch64-unknown-linux-musl, usingcargo-zigbuildinstead of a musl-gcc cross toolchain. Reason:aws-lc-sys's hand-written arm assembly build script feeds raw--target=<rust-triple>flags straight to the C compiler, which a plainaarch64-linux-musl-gcc(or a barezig ccCC-shim) does not accept as-is —cargo-zigbuildrewrites that invocation for zig's own target syntax. The existing x86_64 build entries and their musl-gcc setup are untouched (separate build ids).archives/nfpmsids:lists so both the tarball and deb/rpm packages carry the arm64 binaries.release.client.ymland the sharedrelease.daily.yml) installs zig (pinned tarball from ziglang.org) +cargo-zigbuild, and adds theaarch64-unknown-linux-muslrustup target. Inrelease.daily.yml— shared by several pure-Go daily-release components — this is gated oninputs.component == 'client'so unrelated components don't pay the cost.client/INSTALL.md: one-line note that packages now support both architectures.Testing Verification
cargo zigbuild --release --package=doublezero --bin=doublezero --target aarch64-unknown-linux-musl(run locally): produces a statically-linked ARM64 ELF binary (fileconfirmsELF 64-bit LSB executable, ARM aarch64 ... statically linked).CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ./client/doublezerod/cmd/doublezerod/main.go: produces a statically-linked ARM64 ELF binary.--snapshotdry run (or a real tag push to a test channel) to confirm the packaging/publish steps before this goes out on a real release.