Skip to content

[cloud-push] Release: ARM64 Linux + macOS targets for codemux-remote #20

@Zeus-Deus

Description

@Zeus-Deus

Context

PR #15 shipped the push-to-host feature, and the release pipeline bundles `codemux-remote` for Linux x86_64 only. See `.github/workflows/release.yml` "Build codemux-remote binary" step and `scripts/build-codemux-remote.sh`.

Users whose home server is ARM64 Linux (Raspberry Pi, Oracle Ampere VMs, AWS Graviton) or any flavour of macOS can't use the feature today — they get "Codemux build doesn't include codemux-remote for aarch64-unknown-linux-gnu" (or similar) on first push.

The list of intended targets is already in the bootstrap code:

  • `x86_64-unknown-linux-gnu` ✅ (shipping today)
  • `aarch64-unknown-linux-gnu` — needed for ARM64 Linux remotes
  • `x86_64-apple-darwin` — needed for older Intel Mac remotes
  • `aarch64-apple-darwin` — needed for Apple Silicon Mac remotes

See `src-tauri/src/ssh/bootstrap.rs` `target_for_uname` (lines 38–48) and `bundled_binary_path` for the full target list.

What's needed

ARM64 Linux (~10 lines)

In `.github/workflows/release.yml`'s `Build codemux-remote binary` step, add a cross-compile target on the ubuntu-22.04 runner:

```bash
rustup target add aarch64-unknown-linux-gnu
sudo apt-get install -y gcc-aarch64-linux-gnu
cargo build --release --bin codemux-remote --target aarch64-unknown-linux-gnu \
--manifest-path src-tauri/Cargo.toml
cp src-tauri/target/aarch64-unknown-linux-gnu/release/codemux-remote \
src-tauri/binaries/codemux-remote-aarch64-unknown-linux-gnu
```

May need a `.cargo/config.toml` entry for the linker if rustc doesn't pick up `aarch64-linux-gnu-gcc` automatically.

macOS (larger — needs new CI runner)

Add a macOS runner to the `release.yml` matrix (e.g. `macos-latest` for arm64, `macos-13` for x86_64) that builds:

  • `x86_64-apple-darwin`
  • `aarch64-apple-darwin`

Note: the existing matrix is `[ubuntu-22.04, windows-latest]`. Adding macOS doubles the CI runtime and adds macOS runner minutes (more expensive on GitHub's billing). Consider whether to gate behind a separate workflow that runs only on releases (not every PR).

A macOS-built codemux-remote binary still needs to be downloaded by the Linux + Windows runners so it can be bundled into Linux and Windows app installers (a Linux Codemux pushing to a macOS remote needs the darwin binary). Easiest: upload it as a workflow artifact from the macOS job and download it from the Linux/Windows jobs before they run `scripts/build-codemux-remote.sh` / `tauri build`.

Acceptance criteria

  • After a release, the Linux .deb / .rpm / AppImage contains all 4 `binaries/codemux-remote-` files
  • A Codemux on Linux x86_64 can push to: an ARM64 Linux remote, an Intel Mac remote, an Apple Silicon Mac remote — and the bootstrap succeeds (verify with `ssh deus@host 'codemux-remote --version'`)

Out of scope

  • Windows codemux-remote — the daemon is `#[cfg(unix)]`, can't run on Windows
  • Linux musl targets — only glibc for now

Estimate

ARM64 alone: ~30 min. macOS additions: 2–4 hours (CI matrix + artifact passing + macOS runner setup).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions