ci: Replace QEMU with native ARM64 runners for release builds#1952
ci: Replace QEMU with native ARM64 runners for release builds#1952
Conversation
Build each architecture (amd64/arm64) on native runners in parallel instead of emulating ARM via QEMU on x86, then merge into multi-arch manifests using docker buildx imagetools create. - Replace QEMU-based multi-platform builds with per-arch matrix jobs on native runners (ubuntu-latest/ubuntu-latest-arm64 for otel-collector, Large-Runner-x64-32/Large-Runner-ARM64-32 for app/local/all-in-one) - Switch from Makefile release targets to docker/build-push-action@v6 - Add manifest-merge publish jobs for each image - Scope GHA build cache per image+arch to avoid collisions - Centralize skip-if-exists check in a single check_version job - Remove release-* and release-*-nightly Makefile targets (local build-* targets preserved) - Apply same changes to both release.yml and release-nightly.yml
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
PR Review
|
Large runners have sufficient disk space, so the jlumbroso/free-disk-space action is unnecessary overhead (~30s per job).
E2E Test Results✅ All tests passed • 90 passed • 3 skipped • 986s
Tests ran across 4 shards in parallel. |
…dent caching Extract common-utils build into a dedicated Docker stage (common-utils-builder) in all three Dockerfiles so its build layer is cached independently of API/App source changes. When only API or App source changes, the common-utils build layer is served directly from Docker cache. Also optimizes the base stages to only copy common-utils/package.json (instead of the full source) for yarn install, preventing common-utils source changes from invalidating the yarn install layer. Adds BuildKit cache mounts for Yarn download cache so unchanged packages aren't re-downloaded even when yarn.lock changes and the layer is invalidated.
Summary
release.ymlandrelease-nightly.yml, significantly speeding up CI build timesdocker buildx imagetools createdocker buildx buildcommands todocker/build-push-action@v6for better GHA integrationChanges
.github/workflows/release.ymlreleasematrix job with per-image build+publish job pairs:build-otel-collector/publish-otel-collector(runners:ubuntu-latest/ubuntu-latest-arm64)build-app/publish-app(runners:Large-Runner-x64-32/Large-Runner-ARM64-32)build-local/publish-local(runners:Large-Runner-x64-32/Large-Runner-ARM64-32)build-all-in-one/publish-all-in-one(runners:Large-Runner-x64-32/Large-Runner-ARM64-32)check_versionjob to centralize skip-if-exists logic (replaces per-imagedocker manifest inspectin Makefile)check_release_app_pushedartifact upload/download —publish-appnow outputsapp_was_pusheddirectlyscope=app-amd64) to avoid collisions.github/workflows/release-nightly.ymlMakefilerelease-*andrelease-*-nightlytargets (lines 203-361) — build logic moved into workflow YAMLbuild-*targets preserved for developer useArchitecture
Follows the same pattern as
release-ee.ymlin the EE repo:Notes
--squashflag dropped — it's an experimental Docker feature incompatible withbuild-push-actionin multi-platform mode.sbomandprovenanceare preserved via action params.hyperdx/hyperdx:2.21.0-amd64) remain visible on DockerHub — this is standard practice.hyperdx/*+clickhouse/clickstack-*) preserved.