Skip to content

ci(docker): multi-arch image (amd64 + arm64) so the plugin works on Apple Silicon - #10

Merged
mohitbadwal merged 1 commit into
mainfrom
feat/plugin-multiarch
Jun 23, 2026
Merged

ci(docker): multi-arch image (amd64 + arm64) so the plugin works on Apple Silicon#10
mohitbadwal merged 1 commit into
mainfrom
feat/plugin-multiarch

Conversation

@mohitbadwal

Copy link
Copy Markdown
Owner

The first published image was amd64-only, so docker pull on Apple Silicon failed outright (no matching manifest for linux/arm64/v8) — the plugin could not run on Apple Silicon Macs at all.

Fix

Rebuild as a proper multi-arch manifest list using a native-runner matrix (no QEMU):

  • linux/amd64 on ubuntu-latest, linux/arm64 on ubuntu-24.04-arm (free for public repos), in parallel
  • each pushes by digest with provenance: false (so the merged list is exactly the two arches, no unknown/unknown attestation noise)
  • a merge job stitches the digests into one tagged manifest list and inspects it

Verified (on the branch test tag, before touching latest)

Dispatched this workflow from the branch → produced ghcr.io/mohitbadwal/ringback:feat-plugin-multiarch:

  • Anonymous (logged-out) manifest fetch → HTTP 200, manifest list = linux/amd64 + linux/arm64
  • docker manifest inspect on an Apple Silicon Mac → both arches present, arm64 present: True

Merging this runs the workflow on main, which applies the latest tag → latest becomes multi-arch. After merge I will confirm latest resolves arm64 and clean up the temporary feat-plugin-multiarch tag.

(Minor: the Node 20 deprecation warning from the actions is non-blocking — optional version bump later.)

🤖 Generated with Claude Code

The single-runner build produced an amd64-only manifest, so `docker pull`
on Apple Silicon failed ("no matching manifest for linux/arm64/v8") — the
plugin could not run on Apple Silicon Macs at all.

Rebuild as a proper multi-arch manifest list: a matrix builds each arch on
its OWN native runner (amd64 on ubuntu-latest, arm64 on ubuntu-24.04-arm —
free for public repos, no QEMU), pushes by digest with provenance:false,
then a merge job stitches the digests into one tagged manifest list and
inspects it. Docker now auto-selects the native arch on every host.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mohitbadwal
mohitbadwal merged commit ce0b6f0 into main Jun 23, 2026
3 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