From cca37081fbc9816ca0b4f208d9599116857f4314 Mon Sep 17 00:00:00 2001 From: strandedturtle Date: Thu, 25 Jun 2026 19:45:28 +0000 Subject: [PATCH] ci: pin newer QEMU to fix hung arm64 image build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .github/workflows/release.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 80a71a1..921f59d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,12 @@ on: branches: [main] tags: ["v*"] +# Only one publish run per ref at a time; a newer push cancels an in-flight +# build for the same ref instead of letting it hang/queue behind it. +concurrency: + group: publish-${{ github.ref }} + cancel-in-progress: true + jobs: publish: name: Build and push to GHCR @@ -35,7 +41,14 @@ jobs: type=raw,value=edge,enable=${{ github.ref == 'refs/heads/main' }} type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/v') }} + # Pin a recent QEMU build. The default binfmt image lagged the toolchain + # in node:22-alpine (gcc 15 / musl 1.2.6), and emulating those newer + # arm64 binaries crashed with "uncaught target signal 4 (Illegal + # instruction)", which core-dumped and left the build hung. A current + # QEMU emulates the new userspace correctly. - uses: docker/setup-qemu-action@v3 + with: + image: tonistiigi/binfmt:qemu-v10.2.3 - uses: docker/setup-buildx-action@v3 - name: Log in to GHCR