Skip to content

ci: publish linux/amd64+arm64 multi-arch images - #4

Merged
man4ish merged 1 commit into
mainfrom
ci/multiarch-buildx
Aug 17, 2026
Merged

ci: publish linux/amd64+arm64 multi-arch images#4
man4ish merged 1 commit into
mainfrom
ci/multiarch-buildx

Conversation

@man4ish

@man4ish man4ish commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

Problem

ghcr.io/omnibioai/omnibioai-toolserver:latest is currently published as an amd64-only image. On an arm64 host (e.g. linux/arm64/v8), the container fails immediately with:

exec /usr/local/bin/uvicorn: exec format error

This is because the existing docker/build-push-action step in .github/workflows/ci.yml never set platforms, so Buildx defaulted to the runner's native architecture (amd64) only, and the pushed tag is a single-arch image, not a manifest list.

Fix

CI is updated to build and publish a genuine multi-arch image for both linux/amd64 and linux/arm64:

  • Added docker/setup-qemu-action@v3 so the amd64 GitHub-hosted runner can emulate arm64 to actually execute that leg of the build.
  • Added platforms: linux/amd64,linux/arm64 to the existing docker/build-push-action step, so the resulting GHCR tag is a manifest list covering both architectures.

Nothing else changes:

  • Image name, tag scheme (type=semver, type=raw,value=latest), GHCR login/auth, and job trigger (refs/tags/v*, gated on needs: lint-and-test) are all untouched.
  • No Dockerfile changes were needed — requirements.txt (fastapi, uvicorn, httpx, pydantic, pyyaml) is pure-Python or ships prebuilt manylinux aarch64 wheels (pydantic-core), and python:3.12-slim-bookworm already publishes an arm64 variant.

Validation performed

  • .github/workflows/ci.yml parsed successfully with yaml.safe_load after the change.
  • Built this Dockerfile locally with docker buildx build --platform linux/amd64,linux/arm64 (via a local multiarch/QEMU-enabled builder) — both the linux/amd64 and linux/arm64 legs completed successfully.
  • Did not push/publish any image as part of this validation.

Not in this PR

  • No changes to nginx-router, docker-compose.yml, or any other repository.
  • Does not merge or trigger a real GHCR publish — that only happens on the next v*.*.* tag push, same as today.

Adds docker/setup-qemu-action and platforms: linux/amd64,linux/arm64
to the existing docker/build-push-action step so the GHCR tag becomes
a real multi-arch manifest list instead of an amd64-only image.

No changes to image names, tag scheme (metadata-action config
untouched), GHCR auth, or job triggers -- only the build step gains
QEMU emulation support and the platforms list.

All of this Dockerfile's runtime dependencies are pure-Python or ship
prebuilt manylinux aarch64 wheels, and the base image already
publishes an arm64 variant, so no other Dockerfile changes were
needed. Validated locally with docker buildx build --platform
linux/amd64,linux/arm64 against this Dockerfile before this change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@man4ish
man4ish merged commit 7857c0c into main Aug 17, 2026
1 of 2 checks passed
@man4ish
man4ish deleted the ci/multiarch-buildx branch August 17, 2026 22:48
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