feat: add arm64 Docker images and multi-version base image support#1762
Merged
ivan-aksamentov merged 8 commits intomasterfrom Mar 17, 2026
Merged
feat: add arm64 Docker images and multi-version base image support#1762ivan-aksamentov merged 8 commits intomasterfrom
ivan-aksamentov merged 8 commits intomasterfrom
Conversation
- Use multi-stage per-arch binary selection via TARGETARCH in production Dockerfiles - Replace `docker build` + `docker push` with `docker buildx build --platform linux/amd64,linux/arm64` - Add QEMU and buildx setup to CI publish-to-docker-hub job Closes #1761
- Parameterize base image version in alpine and debian Dockerfiles via BASE_VERSION ARG - Read version lists from docker/docker-prod.json (6 Alpine, 3 Debian) - Add docker-prod-update script to refresh versions from endoflife.date API - Generate versioned tags (e.g., alpine3.23) alongside unversioned defaults (e.g., alpine)
…per-arch selection
Replace bin-amd64/bin-arm64 intermediate stages with the canonical Docker
pattern: COPY ".out/nextclade-${TARGETARCH}-linux-musl". Publish script
creates symlinks to bridge Docker naming (amd64/arm64) to Rust triples
(x86_64/aarch64).
Build, load, and run "nextclade --version" on linux/amd64 and linux/arm64 for each image variant as a smoke test.
Build and smoke-test all Docker image variants (--run) on every CI run, not just on release. Publish job now depends on the dry run passing.
Place binaries in /usr/bin and set PATH for consistent binary location across all image variants.
a32e26d to
c3b9b8d
Compare
Single-platform --load works with any buildx driver (no containerd needed). Build each platform separately, test each, then push multi-platform. Dry-run job runs on all branches and gates publish on release.
c3b9b8d to
c3d0b38
Compare
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.
Add arm64 multi-platform Docker images alongside amd64, and build each image across multiple base image versions (6 Alpine releases spanning ~3 years, 3 Debian releases spanning ~5 years) so users on older systems can pin a compatible base. ARM64 binaries were already built in CI but not packaged into Docker images. The publish script now uses
docker buildxwith--platform linux/amd64,linux/arm64and GNU parallel to build all variants concurrently, with a--runflag for smoke-testing every image on both platforms before publishing.docker/docker-prod.jsondocker-prod-update) to refresh versions from endoflife.date API--runflag: build, load, testnextclade --versionon both platforms--push --run: test before publish (build+load, smoke test, then push)Resolves: #1761