Every image in Branch Build CE now builds one platform per job on a runner
native to that architecture, pushes an untagged manifest addressed by digest,
and is stitched into the tagged multi-arch index by a paired merge job.
arm64 was previously produced either under QEMU emulation or on the shared
makeplane/plane-dev Docker Build Cloud builder. Both paths are gone: the
buildx driver is pinned to the local docker-container driver, since a leg
building its own architecture natively gains nothing from a remote builder.
Notable details:
- cache-scope-suffix is set per architecture. The registry cache manifest is
not platform-indexed, so both legs writing :buildcache would overwrite each
other and roughly half the legs would go cold every run.
- The merge asserts the platform set. A merge that produced a single-platform
index still exits 0, so it is checked rather than assumed.
- AIO asset generation is split into its own job. Run inside a matrix, both
legs would collide on the aio-assets-dist artifact name and could embed
different generated content under a single manifest tag.
- Jobs that consume an image by tag (AIO, upload_build_assets,
publish_release) now depend on the merge jobs. The tags do not exist until
the merge runs.
Nothing externally visible changes: the images carry the same names and the
same tags.
Claude-Session: https://claude.ai/code/session_01U45dsLe5GFmTsfpifuNcGQ