Skip to content

build(ci): publish multi-arch (amd64 + arm64) container image#568

Merged
scotwells merged 1 commit intomainfrom
feat/multi-arch-image
Apr 16, 2026
Merged

build(ci): publish multi-arch (amd64 + arm64) container image#568
scotwells merged 1 commit intomainfrom
feat/multi-arch-image

Conversation

@scotwells
Copy link
Copy Markdown
Contributor

Summary

  • Publishes ghcr.io/datum-cloud/milo for both linux/amd64 and linux/arm64 so Apple Silicon developer machines and arm64 CI runners can pull the image without hitting ImagePullBackOff: no matching manifest for linux/arm64/v8.
  • Switches the Dockerfile builder to --platform=$BUILDPLATFORM and parameterizes GOOS/GOARCH via $TARGETOS/$TARGETARCH, enabling fast native cross-compilation under buildx (no QEMU emulation needed for the build step; the runtime stage is gcr.io/distroless/static, which is COPY-only).
  • Unblocks local e2e for datum-cloud/resource-metrics against milo on Apple Silicon.

Test plan

  • CI publish-container-image job succeeds with platforms: linux/amd64,linux/arm64.
  • After the next release, docker manifest inspect ghcr.io/datum-cloud/milo:<next-tag> lists both linux/amd64 and linux/arm64 entries.
  • Pulling ghcr.io/datum-cloud/milo:<next-tag> on an arm64 host (Apple Silicon / arm64 Kubernetes node) succeeds and the container starts.

Notes

  • The reusable workflow datum-cloud/actions/.github/workflows/publish-docker.yaml@v1.8.1 already accepts a platforms input and wires it into docker/setup-buildx-action and docker/build-push-action, so no cross-repo change is required.
  • Local validation: docker buildx build --platform=linux/amd64,linux/arm64 -t milo:multiarch-test . completed successfully on Apple Silicon (without --load, since multi-platform images can't be loaded into the local Docker engine in one shot). The arm64 binary built natively; the amd64 binary was cross-compiled by Go on the arm64 builder. No QEMU was required.
  • No follow-ups in other repos.

Adds linux/arm64 to the published ghcr.io/datum-cloud/milo image so
Apple Silicon and arm64 CI runners can pull and run milo without
ImagePullBackOff. The Dockerfile builder stage is pinned to
$BUILDPLATFORM and now honors $TARGETOS/$TARGETARCH for native
cross-compilation under buildx; the reusable publish-docker workflow
already exposes a `platforms` input, so the workflow change is a single
extra line.
@joggrbot
Copy link
Copy Markdown
Contributor

joggrbot Bot commented Apr 16, 2026

📝 Documentation Analysis

All docs are up to date! 🎉


✅ Latest commit analyzed: 32a12ef | Powered by Joggr

@scotwells scotwells merged commit 4008b76 into main Apr 16, 2026
5 of 7 checks passed
@scotwells scotwells deleted the feat/multi-arch-image branch April 16, 2026 12:09
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