Skip to content

feat(standalone): publish multi-arch image (amd64 + arm64) - #55

Open
Alzomra wants to merge 1 commit into
pontusab:mainfrom
Alzomra:feat/standalone-multiarch-image
Open

Alzomra wants to merge 1 commit into
pontusab:mainfrom
Alzomra:feat/standalone-multiarch-image

Conversation

@Alzomra

@Alzomra Alzomra commented Oct 15, 2026 •

Copy link
Copy Markdown

Buildx only targeted the runner's default platform, so the published standalone image was linux/amd64-only and would run under emulation (or not at all) on Apple Silicon, AWS Graviton, and other ARM hosts.

Set platforms on the build step so tags and manual runs publish a multi-arch manifest. PRs keep building amd64 only to avoid the QEMU emulation cost; QEMU is set up just for non-PR runs.

No Dockerfile change needed: oven/bun:1.3-alpine is already multi-arch and bun.lock pins arm64-musl bindings for every build-time native tool (rollup, tailwind oxide, oxc, biome).

Verified locally: docker buildx build --platform linux/arm64 --load succeeds and the resulting arm64/linux image serves /healthcheck, the dashboard, and /api/queues.

What

Publishes the standalone Docker image as a multi-arch manifest for linux/amd64 and linux/arm64.

  • .github/workflows/standalone-image.yml: added a docker/setup-qemu-action@v3 step (skipped on PRs) and set platforms on the docker/build-push-action@v6 step tags and manual runs build linux/amd64,linux/arm64, PRs keep building amd64 only.
  • CHANGELOG.md: added an Unreleased → Added entry.
  • README.md, apps/standalone/README.md, apps/web/content/docs/deployment/standalone-docker.mdx: document the supported architectures and add a local buildx --platform linux/arm64 example.

apps/standalone/Dockerfile is intentionally unchanged , see Why.

Why

Buildx only targeted the runner's default platform, so the published standalone image was linux/amd64-only and would run under emulation (or not at all) on Apple Silicon, AWS Graviton, and other ARM hosts.

Set platforms on the build step so tags and manual runs publish a multi-arch manifest. PRs keep building amd64 only to avoid the QEMU emulation cost; QEMU is set up just for non-PR runs.

No Dockerfile change needed: oven/bun:1.3-alpine is already multi-arch and bun.lock pins arm64-musl bindings for every build-time native tool (rollup, tailwind oxide, oxc, biome).

Verified locally: docker buildx build --platform linux/arm64 --load succeeds and the resulting arm64/linux image serves /healthcheck, the dashboard (/), and /api/queues (all 200). The linux/amd64 leg also builds and serves /healthcheck + dashboard under emulation.

Checklist

  • Typecheck passes (bun run typecheck)
  • Lint passes (bun run lint)
  • Build passes (bun run build)
  • CHANGELOG.md updated if this affects users

Buildx only targeted the runner's default platform, so the published
standalone image was linux/amd64-only and would run under emulation (or
not at all) on Apple Silicon, AWS Graviton, and other ARM hosts.

Set `platforms` on the build step so tags and manual runs publish a
multi-arch manifest. PRs keep building amd64 only to avoid the QEMU
emulation cost; QEMU is set up just for non-PR runs.

No Dockerfile change needed: `oven/bun:1.3-alpine` is already multi-arch
and `bun.lock` pins arm64-musl bindings for every build-time native tool
(rollup, tailwind oxide, oxc, biome).

Verified locally: `docker buildx build --platform linux/arm64 --load`
succeeds and the resulting arm64/linux image serves /healthcheck,
the dashboard, and /api/queues.
@vercel

vercel Bot commented Oct 15, 2026

Copy link
Copy Markdown

@Alzomra is attempting to deploy a commit to the Pontus Abrahamsson's projects Team on Vercel.

A member of the Team first needs to authorize it.

This branch has not been deployed

No deployments
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