v2.12.3 β build release images on native runners, not QEMU - #54
Merged
Conversation
Cross-building arm64 through docker/setup-qemu-action was pathologically slow for the Next.js image. Measured on the 2.12.2 release: api 6 min, worker 9 min, web 46+ minutes and still going when it was cancelled. That would have made every release ~50 minutes, defeating the reason for publishing images at all (fast, low-risk updates instead of a 25-minute rebuild on the user's NAS). Each architecture now builds on a runner of that architecture β ubuntu-latest and ubuntu-24.04-arm, free for public repos β and the results are joined into one multi-arch manifest. Per-arch jobs push BY DIGEST only; the version and latest tags are attached by the merge job once both architectures have succeeded. A tag therefore never points at a half-published set, which matters because the updater pulls by tag and rolls back on failure β a tag resolving to one architecture only would look like a successful pull and then fail to start on the other. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HmUiLHPmKoz215WAWV5eHe
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.
The problem
release-images.ymlcross-built arm64 via QEMU. Measured on the v2.12.2 release:Emulating a Node build is pathologically slow. This would have made every release take ~50 minutes, which defeats the entire reason for publishing images: fast, low-risk updates instead of a 25-minute rebuild on the user's NAS.
The fix
Each architecture builds on a runner of that architecture β
ubuntu-latestandubuntu-24.04-arm(free for public repos) β and the results are joined into one multi-arch manifest.Per-arch jobs push by digest only. The
:<version>and:latesttags are attached by the merge job once both architectures have succeeded.That ordering matters: the updater pulls by tag and rolls back on failure. A tag resolving to only one architecture would look like a successful pull and then fail to start on the other β the worst kind of failure, because it passes the step that's supposed to catch it.
π€ Generated with Claude Code
https://claude.ai/code/session_01HmUiLHPmKoz215WAWV5eHe