Skip to content

[Feature] CI: Multi-arch native binaries (macOS + linux/arm64) #75

Description

@alxsuv

Current state

README.md:317 — "Pre-built server binaries are Linux x86_64 only. macOS and ARM targets are planned."

Targets

  • linux-x86_64 (existing)
  • linux-aarch64
  • darwin-x86_64
  • darwin-aarch64

Approach

GitHub Actions matrix — one job per (os, arch). GraalVM native-image cross-compilation is unreliable; build natively on each runner.

Target Runner
linux-x86_64 ubuntu-latest
linux-aarch64 ubuntu-24.04-arm
darwin-x86_64 macos-13
darwin-aarch64 macos-latest (Apple Si)

Implementation

  1. .github/workflows/release.yml — matrix job:
    • setup-javadistribution: graalvm-community, java-version: 25.
    • ./gradlew :hensu-server:build -Dquarkus.package.type=native -Dquarkus.native.container-build=false.
    • Artifact name: hensu-server-${version}-${os}-${arch}.
    • actions/upload-artifact per leg.
  2. Release job (needs: all matrix legs) — download artifacts, gh release upload to tag.
  3. shasum -a 256 per binary → publish SHA256SUMS.
  4. README.md:317 — replace Linux-only note with a download table for the four targets.

Native-image gotchas

  • aarch64 musl static linking unsupported → dynamic libc on Linux ARM.
  • reflect-config.json validated per target (missing entries surface only at target runtime).
  • macOS Xcode CLT preinstalled on GH runners — no extra setup.

Out of scope

  • Windows binaries.
  • Homebrew / apt / Docker manifest list.
  • macOS code signing + notarization (Gatekeeper warning remains until addressed).

Acceptance

  • Tagging vX.Y.Z produces 4 binaries + SHA256SUMS on the GH release.
  • README.md install section links each target.
  • CI time per leg < 25 min.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: serverQuarkus backend, REST endpoints, and SSE communicationtype: featureNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions