Skip to content

nightly: native arm64 runners + merge-by-digest (multi-arch) - #24

Merged
thepagent merged 1 commit into
mainfrom
feat/nightly-native-arm64-runners
Sep 3, 2026
Merged

nightly: native arm64 runners + merge-by-digest (multi-arch)#24
thepagent merged 1 commit into
mainfrom
feat/nightly-native-arm64-runners

Conversation

@thepagent

Copy link
Copy Markdown
Contributor

Follow-up to #21 / #22. Supersedes the closed cross-linker PR (#23).

Why this approach

GitHub provides free Linux arm64 hosted runners (ubuntu-24.04-arm) for public repos (announced 2025-01-16). openab-pty is public, so the right shape is to build each arch on its own native runner rather than cross-compiling from a single amd64 runner.

This removes every source of trouble from the previous multi-arch attempt:

  • No musl cross toolchain — the arm64 cross-link that failed run 33774193328 (musl-tools only ships the host arch's musl-gcc), and no musl.cc external dependency.
  • No QEMU — the arm64 runtime RUN steps (npm, CLI installers) run natively.
  • The arm64 image is actually smoke-tested on real arm64 hardware. The cross-build could only test amd64 and shipped arm64 unverified.

Workflow shape

  • build: matrix (variant × arch) on ubuntu-24.04 / ubuntu-24.04-arm. Each leg builds into the local daemon, smoke-tests natively (now also asserts the image architecture), then pushes by digest only (no tag) and uploads the digest as an artifact. grok excludes arm64 (vendor ships no arm64 binary — issue Multi-arch images: publish linux/arm64 so arm64 hosts run natively (not x86_64 under Rosetta) #21).
  • merge: one job per variant runs docker buildx imagetools create to bind the per-arch digests under the moving (nightly-<variant>) and immutable (nightly-<date>-<run>-<variant>) tags — composing the exact bytes each native runner tested, with no rebuild.

Dockerfile.nightly

  • Builder reverts to a plain native build (no --platform pin, no cross toolchain); musl-tools + rustup target add for the host arch is all a native build needs.
  • Runtime per-vendor arch tokens keyed on TARGETARCH are unchanged (correct for native single-platform builds too).
  • devin's per-arch sha256 is now selected by the leg's arch, not fixed to x86_64.

Verification

Native arm64 kiro build (same as the ubuntu-24.04-arm runner will do):

Arch: arm64
uname -m: aarch64
openab-pty ELF e_machine: 0xB7 (AArch64)

CI on this PR builds (and smoke-tests) both arches without pushing; the digest push + manifest merge run on non-PR events.

Note on preview status

ubuntu-24.04-arm is a public-preview label but has been stable and GA-track for months. If GitHub ever changes availability, the fallback is the cross-build approach from #23.

GitHub provides free Linux arm64 hosted runners (ubuntu-24.04-arm) for
public repos, so drop the cross-compile + QEMU approach entirely and build
each arch on its own native runner.

Why this is better than the cross-build it replaces:
- No musl cross toolchain (the arm64 cross-link that failed run
  33774193328) and no external musl.cc dependency.
- No QEMU: the arm64 runtime RUN steps (npm, CLI installers) run natively.
- The arm64 image is *actually smoke-tested* on real arm64 hardware — the
  cross-build could only test amd64 and shipped arm64 unverified.

Workflow shape:
- build: matrix (variant x arch) on ubuntu-24.04 / ubuntu-24.04-arm. Each
  leg builds into the local daemon, smoke-tests natively (now also asserts
  the image arch), then pushes *by digest* only (no tag) and uploads the
  digest as an artifact. grok excludes arm64 (vendor ships no arm64 binary).
- merge: one job per variant runs  to bind
  the per-arch digests under the moving and immutable tags — composing the
  exact bytes each native runner tested, no rebuild.

Dockerfile.nightly:
- builder reverts to a plain native build (no --platform pin, no cross
  toolchain); musl-tools + rustup target add for the host arch is enough.
- runtime per-vendor arch tokens keyed on TARGETARCH are unchanged (correct
  for native single-platform builds too).
- devin's per-arch sha256 is now selected by leg arch, not fixed to x86_64.

Verified: native arm64 kiro build (matches the ubuntu-24.04-arm runner) —
image Arch arm64, uname aarch64, openab-pty ELF e_machine 0xB7.

Supersedes the closed cross-linker PR; follow-up to #21 / #22.
@thepagent
thepagent merged commit 46adb75 into main Sep 3, 2026
46 checks passed
@thepagent
thepagent deleted the feat/nightly-native-arm64-runners branch September 3, 2026 16:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants