Repository navigation
🏗️ ci: Build And Publish arm64 Images Alongside amd64 - #335
Open
FlorianFiebig wants to merge 1 commit into
Open
FlorianFiebig wants to merge 1 commit into
FlorianFiebig wants to merge 1 commit into
Conversation
FlorianFiebig
force-pushed
the
feat/arm64-images
branch
from
October 15, 2026 14:48
34c0015 to
5bd9f89
Compare
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.
Summary
The Images workflow builds
linux/amd64only, so arm64 hosts have to build the images themselves. That includes EKS on Graviton, ECS and Fargate on arm64, and the Lambda MicroVM path, which is arm64 only and currently tells the operator to build the runner image locally.This builds every image for both architectures and joins them into one manifest per image, so a host pulls the one it runs. Fixes #334.
How it works
Each leg runs on a runner of its own architecture, so nothing builds under emulation, and checks for and pushes only its own tag, so a re-run rebuilds only what is missing. The merge job joins all seven images and is safe to re-run. Promote is unchanged, because
.github/scripts/image-revision.shalready reads a revision label through a manifest list.Type of change
Testing
Fork run, all 14 legs green in 12 minutes: https://github.com/FlorianFiebig/code-interpreter/actions/runs/38718035570
The baked KVM runner took 9 minutes on arm64 against 11 on amd64, with 105336 MiB free disk at its lowest, so timeout and disk have room. Its log confirms real work and not a cache hit: the
buildcache-arm64import found nothing and CPython compiled in 335 seconds.test-sandbox.shagainst the arm64 image on Apple Silicon, direct NsJail path: 12 of 12 passed, including numpy, statsmodels, chDB, the geospatial stack, Bun, blocked network, EPERM onsched_setaffinity, and a blocked escape attempt. Worth checking because an aarch64 wheel can install cleanly and still fail in the sandbox, as the onnxruntime note indocker/package-init.shrecords.A fork run skips merge and promote, so those were run against a local registry: annotations, both platforms in the index, the revision read back, the retag of
main, and a missing tag exiting 3.Tested environments/configuration:
ubuntu-24.04andubuntu-24.04-armlinux/arm64Automated tests:
Not applicable; no application code changes.
nsjail-ipc-testsalready coversubuntu-24.04-arm.Screenshots / recordings
No user-facing change.
Risk / compatibility
The arm64 KVM runner image has never been booted. Booting a libkrun guest needs an arm64 host with
/dev/kvm, which neither Apple Silicon nor GitHub's arm runners have. Happy to hold that one image back until someone runs it on Graviton.Build caches move to
:buildcache-<arch>, so amd64 starts cold once and the old tags can be deleted.Re-running the workflow on a commit built before this change rebuilds it and replaces its
sha-tag with a manifest. Later commits are unaffected.Checklist
README.mdis updated here