Skip to content

ci: build each arch on native runners instead of QEMU - #6

Merged
madeofpendletonwool merged 1 commit into
mainfrom
ci-native-arm-runners
Jul 21, 2026
Merged

madeofpendletonwool merged 1 commit into
mainfrom
ci-native-arm-runners

Conversation

@madeofpendletonwool

Copy link
Copy Markdown
Owner

Split the single multi-platform buildx job into a matrix that builds linux/amd64 on ubuntu-latest and linux/arm64 on ubuntu-24.04-arm, then merges the two into one multi-arch manifest.

The old job emulated arm64 via QEMU, so npm install --omit=dev had to compile better-sqlite3 from source on Alpine/musl under emulation. That took 30+ minutes on a cache miss and threw
"qemu: uncaught target signal 4 (Illegal instruction)" during node-gyp, which risks publishing an arm64 image with a broken native binary.

  • per-arch GHA cache scopes so the two runners don't clobber each other
  • images pushed by digest, then stitched with buildx imagetools create so all existing tags (branch, pr, semver, latest) are unchanged
  • pull requests still build both arches for validation but push nothing, so the merge job is skipped

Split the single multi-platform buildx job into a matrix that builds
linux/amd64 on ubuntu-latest and linux/arm64 on ubuntu-24.04-arm, then
merges the two into one multi-arch manifest.

The old job emulated arm64 via QEMU, so `npm install --omit=dev` had to
compile better-sqlite3 from source on Alpine/musl under emulation. That
took 30+ minutes on a cache miss and threw
"qemu: uncaught target signal 4 (Illegal instruction)" during node-gyp,
which risks publishing an arm64 image with a broken native binary.

- per-arch GHA cache scopes so the two runners don't clobber each other
- images pushed by digest, then stitched with `buildx imagetools create`
  so all existing tags (branch, pr, semver, latest) are unchanged
- pull requests still build both arches for validation but push nothing,
  so the merge job is skipped
@madeofpendletonwool
madeofpendletonwool merged commit ce965c6 into main Jul 21, 2026
2 checks passed
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