fix: publish multi-arch (amd64 + arm64) Docker image - #76
Conversation
deploy.yml built linux/amd64 only, so the published manifest list carries no arm64 entry. On Apple Silicon, `docker compose pull` of :latest fails hard with "no matching manifest for linux/arm64/v8" — the local-quickstart audience (heavily Mac, esp. for the Cline Marketplace) can't pull current code at all and gets pinned to a stale cached image. Add docker/setup-qemu-action so the amd64 runner can cross-build arm64, and build both platforms. The published index now carries amd64 + arm64; arm64 hosts pull natively, amd64 (incl. the Lightsail deploy target) is unchanged. Generated with Claude Code Co-authored-by: Claude <noreply@anthropic.com>
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThe deployment workflow is updated to build and push Docker images for multiple architectures. QEMU support is added to enable cross-platform builds, and the Docker build configuration now targets both AMD64 and ARM64 platforms instead of only AMD64. ChangesMulti-architecture Docker builds
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Problem
deploy.ymlbuilds the image forlinux/amd64only. Because the release build uses buildx/build-push-action@v7, the published:latestis a manifest list (index) that contains a single amd64 entry. On Apple Silicon (linux/arm64),docker compose pullthen fails hard:Unlike a plain single-arch image (which Docker runs under emulation with a warning), a manifest list without an arm64 entry makes Docker refuse to pull. So the local-quickstart audience — heavily Mac, especially for the Cline Marketplace — can't pull current code at all and gets pinned to whatever stale image is cached locally. (Surfaced live: a Mac was stuck running
0.12.1and couldn't upgrade.)Fix
docker/setup-qemu-actionso the amd64 runner can cross-build arm64.linux/amd64,linux/arm64.The published index now carries both platforms: arm64 hosts pull natively, and amd64 (including the Lightsail deploy target) is unchanged. One-file change.
Notes / things to watch on the next release
deploy.ymlisworkflow_call'd from the release workflows, so a release must run to rebuild and repush a multi-arch:latest. This is afix:commit, so it should auto-cut a patch release on merge.better-sqlite3compiles from source on Alpine/musl (the Dockerfile already carriespython3 make g++for this). Expect a noticeably longer release build.mcp-publisherstill reads theio.modelcontextprotocol.server.namelabel off the now multi-arch manifest inpublish-registry.yml, and that:latestpulls natively on arm64.🤖 Generated with Claude Code
Generated by Claude Code
Summary by CodeRabbit