Skip to content

fix(ci): use native arm64 runners for multi-platform Docker builds#327

Merged
Jomik merged 2 commits intomainfrom
fix/native-arm64-runners
Apr 2, 2026
Merged

fix(ci): use native arm64 runners for multi-platform Docker builds#327
Jomik merged 2 commits intomainfrom
fix/native-arm64-runners

Conversation

@Jomik
Copy link
Copy Markdown
Owner

@Jomik Jomik commented Apr 2, 2026

Summary

Replace QEMU-emulated arm64 builds with native ubuntu-24.04-arm runners using the digest-merge pattern. The single push-image job is split into a build job (per-platform on native runners, push by digest) and a merge job (assemble multi-arch manifest via docker buildx imagetools create). This eliminates the ~40 minute QEMU bottleneck caused by compiling native modules (isolated-vm) under emulation.

Also changes the release schedule from daily to weekly (Mondays at 5am UTC) to reduce noise from Renovate patch bumps.

Decisions & callouts

  • Cache is now scoped per matrix cell (scope=build-node{N}-linux-{arch}) to prevent cross-platform cache thrashing. The first run after merge will be a full cache miss.
  • fail-fast: false on the build matrix so a failure on one platform doesn't cancel the other.
  • All shell steps use set -euo pipefail for robustness.
  • IMAGE_NAME is lowercased at job start because github.repository returns mixed-case which Docker rejects in the outputs name parameter.

Manual testing

  • Trigger the workflow via workflow_dispatch on this branch
  • Verify 4 build jobs run on correct runners (amd64 on ubuntu-latest, arm64 on ubuntu-24.04-arm)
  • Verify 2 merge jobs complete and create multi-arch manifests
  • Run docker buildx imagetools inspect ghcr.io/jomik/screeps-server:sha-09dbb3a and confirm both linux/amd64 and linux/arm64 are listed

@github-actions github-actions bot added the bug Something isn't working label Apr 2, 2026
@Jomik Jomik enabled auto-merge (squash) April 2, 2026 18:57
Jomik added 2 commits April 2, 2026 21:00
Replace QEMU-emulated arm64 builds with native `ubuntu-24.04-arm`
runners using the digest-merge pattern. Splits the single `push-image`
job into `build` (per-platform on native runners) and `merge`
(assemble multi-arch manifest via `docker buildx imagetools create`).

This eliminates the ~40 minute QEMU bottleneck caused by compiling
native modules (isolated-vm) under emulation.
Reduces release noise from daily Renovate patch bumps. Manual
releases are still available via workflow_dispatch.
@Jomik Jomik force-pushed the fix/native-arm64-runners branch from eb2b52f to 59d3437 Compare April 2, 2026 19:00
@Jomik Jomik disabled auto-merge April 2, 2026 19:43
@Jomik Jomik merged commit b19f36a into main Apr 2, 2026
3 checks passed
@Jomik Jomik deleted the fix/native-arm64-runners branch April 2, 2026 19:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant