diff --git a/.github/workflows/release-binaries.yml b/.github/workflows/release-binaries.yml index c000985b..a0eb3072 100644 --- a/.github/workflows/release-binaries.yml +++ b/.github/workflows/release-binaries.yml @@ -87,8 +87,21 @@ jobs: # ── Stage 2: Build one binary per target ──────────────────────────── # - # 4-way matrix — 2 musl-linux (native amd64 + arm64) + 2 macOS - # (Apple Silicon + last Intel runner tier). Windows is deferred. + # 3-way matrix — 2 musl-linux (native amd64 + arm64) + macOS Apple + # Silicon. Windows and Intel macOS are deferred: + # + # * Intel macOS (`x86_64-apple-darwin` / macos-13 runner) — dropped + # 2026-08-29. Apple is phasing out Intel Macs from GitHub's hosted + # runners; the `macos-13` tier is scheduled for deprecation and + # queues stretched past 1 h during v0.9.0-rc1 build. Intel Mac + # users have three fallbacks: (1) `cargo install oxicloud + # --locked --features bundled-assets` from source, (2) `docker + # pull --platform linux/amd64 ghcr.io/atalayalabs/oxicloud`, + # (3) any of the two Linux musl tarballs via a Linux VM. The + # Intel-Mac install base is small and shrinking (Apple Silicon + # >90% of new sales) so first-class shipping isn't worth the + # CI-availability tax. + # * Windows — separate work when demand appears. # # All targets run natively on GitHub-hosted runners with the host's # glibc + rustup, then cross-compile to their target triple via @@ -128,9 +141,6 @@ jobs: - triple: aarch64-apple-darwin runner: macos-latest rustflags: "-C target-cpu=apple-m1" - - triple: x86_64-apple-darwin - runner: macos-13 - rustflags: "-C target-cpu=x86-64-v2" steps: - uses: actions/checkout@v4 with: diff --git a/docs/install/binary.md b/docs/install/binary.md index f62c6fb3..9d29b139 100644 --- a/docs/install/binary.md +++ b/docs/install/binary.md @@ -11,21 +11,27 @@ oxicloud` picks the right archive for your host automatically. ## Which tarball do I want? -Every release attaches four tarballs plus a `SHA256SUMS` manifest. Pick -by your host's architecture and OS: +Every release attaches three tarballs plus a `SHA256SUMS` manifest. +Pick by your host's architecture and OS: | Host | Tarball | |---|---| | Linux x86-64 (Intel / AMD servers, most VPS, WSL) | `oxicloud--x86_64-unknown-linux-musl.tar.gz` | | Linux ARM64 (Raspberry Pi 4/5, Ampere, Graviton, ARM servers) | `oxicloud--aarch64-unknown-linux-musl.tar.gz` | | macOS Apple Silicon (M-series) | `oxicloud--aarch64-apple-darwin.tar.gz` | -| macOS Intel | `oxicloud--x86_64-apple-darwin.tar.gz` | The Linux tarballs link against musl, so they run on ANY glibc version — Alpine, Debian, Ubuntu, Fedora, Arch, Rocky, and every version in between. You never need to worry about `GLIBC_x.yy not found`. -Windows and 32-bit ARM are not currently shipped. +**Intel macOS, Windows, and 32-bit ARM are not currently shipped as +prebuilt tarballs.** Intel Mac users have three fallbacks: + +1. `cargo install oxicloud --locked --features bundled-assets` from + source (needs the Rust toolchain). +2. Docker: `docker pull --platform linux/amd64 ghcr.io/atalayalabs/oxicloud`. +3. Run one of the two Linux musl tarballs inside a Linux VM + (Multipass, Lima, UTM, etc.). ## Hardware notes diff --git a/docs/plan/bundled-binary.md b/docs/plan/bundled-binary.md index 0283c038..d72f790a 100644 --- a/docs/plan/bundled-binary.md +++ b/docs/plan/bundled-binary.md @@ -433,14 +433,28 @@ its cache). ### 3. Target matrix — musl-only Linux -Four triples cover the practical need: +Three triples cover the practical need: | Triple | Runner + toolchain | Notes | |---|---|---| -| `x86_64-unknown-linux-musl` | `ubuntu-22.04` running `rust:1.96-alpine3.24` container | Static, no glibc dep, runs on ANY Linux distro from Alpine to CentOS 7 to Debian 10 to Ubuntu 25.04. Parity with existing Docker image. | -| `aarch64-unknown-linux-musl` | `ubuntu-22.04-arm` running `rust:1.96-alpine3.24` container | Native ARM64 runner (no QEMU), same container as amd64 for byte-for-byte parity. Pi 4/5, ARM servers, Graviton. | +| `x86_64-unknown-linux-musl` | `ubuntu-22.04` + `musl-tools` + `rustup target add` | Static, no glibc dep, runs on ANY Linux distro from Alpine to CentOS 7 to Debian 10 to Ubuntu 25.04. Cross-compiled natively with glibc host + musl target; produces same output as the alpine-container path we originally planned. | +| `aarch64-unknown-linux-musl` | `ubuntu-22.04-arm` + `musl-tools` + `rustup target add` | Same shape as the amd64 twin. Native ARM64 runner (no QEMU). Pi 4/5, ARM servers, Graviton. | | `aarch64-apple-darwin` | `macos-latest` | Apple Silicon, native | -| `x86_64-apple-darwin` | `macos-13` | last Intel-runner tier | + +**Historical note — Intel macOS dropped 2026-08-29** (Apple phasing +out `macos-13`; runner-availability tax exceeded value). Intel Mac +users fall back to `cargo install`, Docker `--platform linux/amd64`, +or one of the Linux musl tarballs inside a Linux VM. + +**Historical note — Alpine-container approach abandoned 2026-08-29** +in favour of native cross-compile. Original plan built inside the +Dockerfile's `rust:1.96-alpine3.24` for byte-for-byte parity with +Docker; broke on `ubuntu-22.04-arm` because JS-based GitHub Actions +(checkout, artifact steps, setup-node) can't run inside Alpine on +ARM64 (Node.js binary requires glibc; the x64-Alpine workaround +doesn't extend to arm64). Native `ubuntu-22.04` + `musl-tools` + +`rustup target add` produces the same `--target *-musl` output +without the container gymnastics. **Rationale for musl-only Linux**: @@ -524,7 +538,6 @@ Per-target baseline for `release-binaries.yml`: | `x86_64-unknown-linux-musl` | `-C target-cpu=x86-64-v2` | | `aarch64-unknown-linux-musl` | `-C target-cpu=generic` (safe ARMv8-A baseline) | | `aarch64-apple-darwin` | `-C target-cpu=apple-m1` | -| `x86_64-apple-darwin` | `-C target-cpu=x86-64-v2` | `x86-64-v2` covers ~2010+ processors (Nehalem, Bulldozer). Widest realistic install base for a "runs everywhere" tarball. Notably