Skip to content

ci: pin newer QEMU to fix hung arm64 image build#6

Merged
StrandedTurtle merged 1 commit into
mainfrom
claude/fix-qemu-arm64-build
Jun 25, 2026
Merged

ci: pin newer QEMU to fix hung arm64 image build#6
StrandedTurtle merged 1 commit into
mainfrom
claude/fix-qemu-arm64-build

Conversation

@StrandedTurtle

Copy link
Copy Markdown
Owner

Problem

The multi-arch publish hung for ~2.5h on the linux/arm64 build stage. Logs showed:

#26 [linux/arm64 server-deps 5/5] RUN npm ci --omit=dev
#26 18.71 qemu: uncaught target signal 4 (Illegal instruction) - core dumped

Root cause

node:22-alpine was updated to a much newer userspace (gcc 15.2, musl 1.2.6, python 3.14). That invalidated the cached arm64 layer and forced QEMU to actually emulate it. The binfmt QEMU bundled by setup-qemu-action was too old to emulate the new arm64 binaries — it crashed with an illegal-instruction signal while running npm/prebuild-install, and the core dump left buildx hung instead of failing. The previous successful build only worked because it reused a cached arm64 layer.

Note: this is not a compilation problem — better-sqlite3 11.10.0 now ships a linuxmusl-arm64 prebuilt (verified HTTP 200), and the amd64 half used it fine. The crash is QEMU emulation itself.

Fix

  • Pin tonistiigi/binfmt:qemu-v10.2.3 on setup-qemu-action so emulation handles the new userspace.
  • Add a concurrency group so a newer push cancels an in-flight build for the same ref instead of stacking up behind a stuck one.

Test plan


Generated by Claude Code

The multi-arch publish hung for hours on the linux/arm64 stage. The base
image node:22-alpine was updated to a much newer userspace (gcc 15.2,
musl 1.2.6, python 3.14), which invalidated the cached arm64 layer and
forced QEMU to actually emulate it. The binfmt QEMU bundled by
setup-qemu-action was too old for the new arm64 binaries and crashed with
"qemu: uncaught target signal 4 (Illegal instruction) - core dumped"
while running npm/prebuild-install — and the core dump left buildx hung
rather than failing.

Pin tonistiigi/binfmt:qemu-v10.2.3 so emulation handles the new
userspace. Also add a concurrency group so a newer push cancels an
in-flight build for the same ref instead of stacking up behind a stuck
one.
@StrandedTurtle StrandedTurtle merged commit 6618989 into main Jun 25, 2026
4 checks passed
@StrandedTurtle StrandedTurtle deleted the claude/fix-qemu-arm64-build branch June 27, 2026 21:07
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.

1 participant