WIP: ci: native arm64 runner + multi-arch images and packages (#49) #56

Closed
robocub wants to merge 1 commit from ci/arm64-runner-multiarch into master
Collaborator

Closes #49 (once the runner is live).

Adds the arm64 leg of CI as native builds on an Oracle Ampere Forgejo runner instead of the QEMU emulation that was dropped for being too slow.

What's in here

  • docker.yml: image split into image-amd64 (label docker) / image-arm64 (label docker-arm64), each pushing an arch-suffixed tag over the tailnet registry; new manifest job stitches them into the public multi-arch tags (:vX.Y.Z / :latest / :edge); packages loops both arches → 7 release assets (2 deb, 2 rpm, 2 tarballs, SHA256SUMS). Still exactly one compile per (tag, arch), binaries byte-identical to the images (#29 preserved).
  • scripts/setup-arm64-runner.sh: idempotent bootstrap for the Oracle VM — Docker Engine, insecure-registries for 100.64.0.13:3000, tailscale join, pinned forgejo-runner v12.12.0, registration (docker_host: automount), systemd unit.
  • docs/arm64-runner-setup.md: full runbook — Oracle provisioning, registration token, bootstrap, verification, troubleshooting.
  • nfpm.yaml arch parametrized (NVB_ARCH); build-packages.sh auto-detects host arch; README/docker-usage/packaging updated.

Feasibility (verified before writing)

  • ghcr.io/catthehacker/ubuntu:act-22.04 is multi-arch (arm64/v8 ) — same job image as the amd64 runner.
  • Pinned webrtc-sys-build tag webrtc-51ef663 ships webrtc-linux-arm64-release.zip — no libwebrtc source build needed.
  • Dockerfile base images (rust:1-bookworm, debian:bookworm-slim) are multi-arch .

Do NOT merge until

  1. The Oracle VM is provisioned and registered (runbook §1–3) — a tag push on master with this merged would otherwise queue forever on docker-arm64.
  2. A workflow_dispatch run from this branch goes green end-to-end and docker manifest inspect …:edge shows both arches.

🤖 Generated with Claude Code

Closes #49 (once the runner is live). Adds the arm64 leg of CI as **native builds** on an Oracle Ampere Forgejo runner instead of the QEMU emulation that was dropped for being too slow. ### What's in here - **`docker.yml`**: `image` split into `image-amd64` (label `docker`) / `image-arm64` (label `docker-arm64`), each pushing an arch-suffixed tag over the tailnet registry; new `manifest` job stitches them into the public multi-arch tags (`:vX.Y.Z` / `:latest` / `:edge`); `packages` loops both arches → 7 release assets (2 deb, 2 rpm, 2 tarballs, SHA256SUMS). Still exactly one compile per (tag, arch), binaries byte-identical to the images (#29 preserved). - **`scripts/setup-arm64-runner.sh`**: idempotent bootstrap for the Oracle VM — Docker Engine, `insecure-registries` for `100.64.0.13:3000`, tailscale join, pinned `forgejo-runner` v12.12.0, registration (`docker_host: automount`), systemd unit. - **`docs/arm64-runner-setup.md`**: full runbook — Oracle provisioning, registration token, bootstrap, verification, troubleshooting. - `nfpm.yaml` arch parametrized (`NVB_ARCH`); `build-packages.sh` auto-detects host arch; README/docker-usage/packaging updated. ### Feasibility (verified before writing) - `ghcr.io/catthehacker/ubuntu:act-22.04` is multi-arch (arm64/v8 ✅) — same job image as the amd64 runner. - Pinned `webrtc-sys-build` tag `webrtc-51ef663` ships `webrtc-linux-arm64-release.zip` ✅ — no libwebrtc source build needed. - Dockerfile base images (`rust:1-bookworm`, `debian:bookworm-slim`) are multi-arch ✅. ### Do NOT merge until 1. The Oracle VM is provisioned and registered (runbook §1–3) — a tag push on master with this merged would otherwise queue forever on `docker-arm64`. 2. A `workflow_dispatch` run from this branch goes green end-to-end and `docker manifest inspect …:edge` shows both arches. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds the arm64 leg of CI as native builds on an Oracle Ampere Forgejo
runner (label docker-arm64) instead of the QEMU emulation that was
dropped for being too slow:

- docker.yml: split the image build into image-amd64/image-arm64 (each
  pushes an arch-suffixed tag), a manifest job that stitches them into
  the public multi-arch tags, and packages now emits deb/rpm/tarball
  for both arches (7 release assets incl. SHA256SUMS).
- nfpm.yaml arch is parametrized via NVB_ARCH; build-packages.sh
  auto-detects the host arch.
- scripts/setup-arm64-runner.sh: idempotent VPS bootstrap (Docker,
  insecure tailnet registry, tailscale, pinned forgejo-runner v12.12.0,
  registration, systemd unit).
- docs/arm64-runner-setup.md: provisioning + verification runbook;
  README/docker-usage/packaging updated for multi-arch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Author
Collaborator

Superseded — closing without merge. Everything this PR set out to do has since landed on master by other routes:

  • the native per-arch image builds + manifest merge went in with the runner bring-up (master's docker.yml: image / image-arm64 on the linux-arm64 label / manifest), and
  • the per-arch packages loop + nfpm.yaml arch: ${NVB_ARCH} landed in 70d5362 (adapted from this PR's design to master's tag scheme: canonical tag + -arm64 suffix instead of -amd64/-arm64).

Thanks — the packages-loop design here was lifted nearly verbatim. #49 is closed.

Superseded — closing without merge. Everything this PR set out to do has since landed on master by other routes: - the native per-arch image builds + manifest merge went in with the runner bring-up (master's `docker.yml`: `image` / `image-arm64` on the `linux-arm64` label / `manifest`), and - the per-arch `packages` loop + `nfpm.yaml` `arch: ${NVB_ARCH}` landed in `70d5362` (adapted from this PR's design to master's tag scheme: canonical tag + `-arm64` suffix instead of `-amd64`/`-arm64`). Thanks — the packages-loop design here was lifted nearly verbatim. #49 is closed.
robocub closed this pull request 2026-07-12 02:04:18 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dark/nether-voicebridge!56
No description provided.