ci: publish multi-arch image (amd64 + arm64) via native runners - #4
Merged
Conversation
Replace the single-platform amd64 build with a per-arch matrix: ubuntu-latest builds linux/amd64, ubuntu-24.04-arm builds linux/arm64 — both natively (no QEMU). Each arch runs the full MCP conformance / authorization / portal gates inside its own image before pushing by digest; a merge job assembles the digests into one multi-arch manifest and applies the tag scheme (latest, semver, sha-). Consumers now just 'docker pull ghcr.io/esipfed/mc2:latest' and get the right image for their machine — so drop the 'platform: linux/amd64' override from the README compose snippet (added in 24cf810 as an arm-Mac workaround) and note the image is multi-arch instead. arm64 image verified locally on Apple Silicon: builds clean and all three gate suites pass.
emirkaan5
pushed a commit
to emirkaan5/mc2
that referenced
this pull request
Aug 7, 2026
…Fed#4) Replace the single-platform amd64 build with a per-arch matrix: ubuntu-latest builds linux/amd64, ubuntu-24.04-arm builds linux/arm64 — both natively (no QEMU). Each arch runs the full MCP conformance / authorization / portal gates inside its own image before pushing by digest; a merge job assembles the digests into one multi-arch manifest and applies the tag scheme (latest, semver, sha-). Consumers now just 'docker pull ghcr.io/esipfed/mc2:latest' and get the right image for their machine — so drop the 'platform: linux/amd64' override from the README compose snippet (added in 24cf810 as an arm-Mac workaround) and note the image is multi-arch instead. arm64 image verified locally on Apple Silicon: builds clean and all three gate suites pass. Co-authored-by: Otto Wagner <otto.wagner@ama-inc.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Publish
ghcr.io/esipfed/mc2as a multi-arch image (linux/amd64+linux/arm64) sodocker pulljust works on Intel and Apple-Silicon machines alike — and drop theplatform: "linux/amd64"override that 24cf810 added to the README compose snippet as an arm-Mac workaround.Why
Forcing
platform: linux/amd64in compose makes arm-Mac users run the server under emulation (slow, and Chromium-under-QEMU is fragile). Shipping a flexible image beats asking every consumer to make their compose config flexible.How
Reworked
publish-image.ymlfrom a single amd64 job into the standard per-arch matrix + manifest-merge shape:build-and-gate(matrix) —ubuntu-latestbuildslinux/amd64,ubuntu-24.04-armbuildslinux/arm64. Each arch builds natively (no QEMU), runs all three MCP conformance/auth/portal gates inside its own image, then pushes by digest. The arm64 artifact is now gated exactly like the amd64 one.merge-manifest— stitches the per-arch digests into one multi-arch manifest withdocker buildx imagetools createand applies the existing tag scheme (lateston main, semver on tags,sha-<short>always).README: removed the
platform:line and noted the image is published multi-arch.Verification
test_mcp.py,test_mcp_auth.py,test_portal.py→RESULT: ALL PASSED).