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).
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:
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:
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
Out of scope
Estimate
ARM64 alone: ~30 min. macOS additions: 2–4 hours (CI matrix + artifact passing + macOS runner setup).