|
| 1 | +# Fix: Release Docker build no longer pulls buildkit/binfmt images from AWS public ECR |
| 2 | + |
| 3 | +**Date:** 2026-08-06 |
| 4 | + |
| 5 | +## Summary |
| 6 | + |
| 7 | +The release `docker` job in `.github/workflows/build.yml` was rate-limited pulling its buildx |
| 8 | +builder (`moby/buildkit`) and QEMU binfmt images from `public.ecr.aws`. Bumped |
| 9 | +`cloudposse/github-action-docker-build-push` to v3.1.0 (Google-mirrored buildkit image by |
| 10 | +default) and explicitly overrode the action's `binfmt-image` input to the equivalent |
| 11 | +Google-mirrored `tonistiigi/binfmt` image, since that input still defaults to `public.ecr.aws` |
| 12 | +even at v3.1.0. |
| 13 | + |
| 14 | +## Context |
| 15 | + |
| 16 | +CI run for `cloudposse/atmos` release build (job at |
| 17 | +`https://github.com/cloudposse/atmos/actions/runs/31040133433/job/92444923915`) failed with |
| 18 | +`jq: error (at inspect.json:78): Cannot iterate over null (null)` in the action's post-build |
| 19 | +summary step, which turned out to be a separate, already-tracked upstream bug |
| 20 | +(`cloudposse/github-action-docker-build-push#102`, cosmetic — the image itself built and pushed |
| 21 | +fine) and not something fixable from this repo. On the next attempted run, the job failed again, |
| 22 | +this time on rate limiting while pulling the buildx builder image from `public.ecr.aws`. |
| 23 | + |
| 24 | +## Changes |
| 25 | + |
| 26 | +- `.github/workflows/build.yml`: bumped |
| 27 | + `uses: cloudposse/github-action-docker-build-push@...` from v3.0.0 |
| 28 | + (`f06d0f4bd286898b613412d2fcc6622e5b68bbdc`) to v3.1.0 |
| 29 | + (`02993d675b44dcc7082e6de7485c1ff8740bce9d`), which changes the action's `driver-opts` default |
| 30 | + from `image=public.ecr.aws/vend/moby/buildkit:buildx-stable-1` to |
| 31 | + `image=mirror.gcr.io/moby/buildkit:buildx-stable-1`. |
| 32 | +- `.github/workflows/build.yml`: added an explicit `binfmt-image: |
| 33 | + mirror.gcr.io/tonistiigi/binfmt:qemu-v7.0.0` input, since the action's `binfmt-image` default |
| 34 | + (`public.ecr.aws/eks-distro-build-tooling/binfmt-misc:qemu-v7.0.0`) still pulls from AWS public |
| 35 | + ECR and has no upstream fix yet. `binfmt-image` passes straight through to |
| 36 | + `docker/setup-qemu-action`'s `image` input, so it can be overridden directly without waiting on |
| 37 | + upstream. |
| 38 | + |
| 39 | +## Validation |
| 40 | + |
| 41 | +- Diffed `cloudposse/github-action-docker-build-push` v3.0.0...v3.1.0 upstream: only the |
| 42 | + `driver-opts` default change and an unrelated arm64 `jq` install fix; no input/output contract |
| 43 | + changes to any input this workflow uses (`registry`, `organization`, `repository`, `login`, |
| 44 | + `password`, `platforms`, `file`, `build-args`). |
| 45 | +- Confirmed `public.ecr.aws/eks-distro-build-tooling/binfmt-misc:qemu-v7.0.0` is an AWS rebuild of |
| 46 | + upstream `tonistiigi/binfmt`, which publishes the identical `qemu-v7.0.0` tag on Docker Hub. |
| 47 | +- Verified live against the registries: `docker buildx imagetools inspect |
| 48 | + mirror.gcr.io/tonistiigi/binfmt:qemu-v7.0.0` and the `docker.io/tonistiigi/binfmt:qemu-v7.0.0` |
| 49 | + equivalent both resolve to the same digest |
| 50 | + (`sha256:66e11bea77a5ea9d6f0fe79b57cd2b189b5d15b93a2bdb925be22949232e4e55`) across all 7 |
| 51 | + published platforms, and `docker pull` of the mirrored tag succeeds. |
| 52 | +- This is a `release`-triggered workflow (`on.release.types: [published]`), so it cannot be |
| 53 | + exercised by a normal PR run; verification here is by inspection plus the live registry checks |
| 54 | + above. The next actual release's Docker build job should be watched once to confirm no more |
| 55 | + rate-limit failures. |
| 56 | +- `./custom-gcl run --new-from-rev=origin/main` — 0 issues. |
| 57 | + |
| 58 | +## Follow-ups |
| 59 | + |
| 60 | +None. The action's `binfmt-image` default itself is still AWS-ECR-backed upstream with no fix in |
| 61 | +flight; if it starts rate-limiting independently of this override, no further action is needed |
| 62 | +here since this repo already pins its own Google-mirrored value. |
0 commit comments