Skip to content

ci: publish multi-arch image (amd64 + arm64) via native runners - #4

Merged
isConic merged 1 commit into
mainfrom
ci/multi-arch-image
Aug 6, 2026
Merged

ci: publish multi-arch image (amd64 + arm64) via native runners#4
isConic merged 1 commit into
mainfrom
ci/multi-arch-image

Conversation

@isConic

@isConic isConic commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

What

Publish ghcr.io/esipfed/mc2 as a multi-arch image (linux/amd64 + linux/arm64) so docker pull just works on Intel and Apple-Silicon machines alike — and drop the platform: "linux/amd64" override that 24cf810 added to the README compose snippet as an arm-Mac workaround.

Why

Forcing platform: linux/amd64 in 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.yml from a single amd64 job into the standard per-arch matrix + manifest-merge shape:

  • build-and-gate (matrix)ubuntu-latest builds linux/amd64, ubuntu-24.04-arm builds linux/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 with docker buildx imagetools create and applies the existing tag scheme (latest on main, semver on tags, sha-<short> always).
  • Per-arch GHA cache scopes; PRs still stop at the gates (nothing pushed).

README: removed the platform: line and noted the image is published multi-arch.

Verification

  • arm64 image built locally on Apple Silicon: clean build, and all three gate suites pass (test_mcp.py, test_mcp_auth.py, test_portal.pyRESULT: ALL PASSED).
  • This PR's own CI run exercises the build + gates on both architectures (PR path builds and gates without pushing).

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.
@isConic
isConic merged commit 624c468 into main Aug 6, 2026
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>
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.

2 participants