nightly: native arm64 runners + merge-by-digest (multi-arch) - #24
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
musl-toolsonly ships the host arch's musl-gcc), and no musl.cc external dependency.RUNsteps (npm, CLI installers) run natively.Workflow shape
build: matrix(variant × arch)onubuntu-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.grokexcludes 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 runsdocker buildx imagetools createto 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
--platformpin, no cross toolchain);musl-tools+rustup target addfor the host arch is all a native build needs.TARGETARCHare unchanged (correct for native single-platform builds too).sha256is now selected by the leg's arch, not fixed to x86_64.Verification
Native arm64 kiro build (same as the
ubuntu-24.04-armrunner will do):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-armis 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.