6666 ${{ env.GHCR_NAMESPACE }}
6767 tags : |
6868 type=raw,event=branch,value=latest
69- type=ref,event=pr
7069 type=ref,event=tag
7170 type=semver,pattern={{version}}
7271 type=semver,pattern={{major}}.{{minor}}
@@ -134,7 +133,7 @@ jobs:
134133 - name : 📤 Upload digest
135134 uses : actions/upload-artifact@v4
136135 with :
137- name : digests-${{ env.PLATFORM_CACHE_TAG }}.json
136+ name : digests-${{ env.PLATFORM_CACHE_TAG }}
138137 path : /tmp/digests/*
139138 if-no-files-found : error
140139 retention-days : 1
@@ -149,20 +148,13 @@ jobs:
149148 with :
150149 pattern : bake-meta-*
151150 path : /tmp
151+ merge-multiple : true
152152
153153 - name : 📥 Download meta bake definitions
154154 uses : actions/download-artifact@v4
155155 with :
156156 pattern : digests-*
157- path : /tmp/digests/*
158-
159- - name : Print downloaded bake meta files
160- run : |
161- ls -la /tmp
162-
163- - name : Print downloaded digests
164- run : |
165- ls -la /tmp/digests
157+ path : /tmp/digests
166158
167159 - name : 🔑 Login to docker-hub
168160 uses : docker/login-action@v3
@@ -188,25 +180,28 @@ jobs:
188180 platforms : linux/amd64,linux/arm64
189181 buildkitd-flags : " --debug"
190182
191- - name : Create manifest list and push
183+ - name : 🚀 Create manifest list and push
184+ working-directory : /tmp
192185 run : |
193- # Aggregate all tags from the meta files
194- TAGS=$(jq -r '.target."docker-metadata-action".tags[]' /tmp/bake-meta-*.json | sort -u)
195-
196- # Loop through each tag and create a manifest list
197- for TAG in $TAGS; do
198- FULL_TAGS=()
199- for FILE in /tmp/bake-meta-*.json; do
200- if jq -e --arg TAG "$TAG" '.target."docker-metadata-action".tags[] | select(. == $TAG)' $FILE > /dev/null; then
201- # Extract the repository and digest for the current platform
202- REPO=$(jq -r --arg TAG "$TAG" '.target."docker-metadata-action".tags[] | select(. == $TAG)' $FILE | cut -d':' -f1)
203- DIGEST=$(jq -r '.["'$REPO'"]["containerimage.digest"]' $FILE)
204- FULL_TAGS+=("$REPO@$DIGEST")
205- fi
206- done
207-
208- # Create and push the manifest list for the current tag
209- docker buildx imagetools create "${FULL_TAGS[@]}" -t "$TAG"
186+ variants=($(ls bake-meta-*.json | sed -E 's/bake-meta-//; s/-amd64.json|-arm64.json//g' | sort -u))
187+ for variant in "${variants[@]}"; do
188+
189+ # Fetch digests for amd64 and arm64 architectures
190+ DIGEST_AMD64=$(basename $(ls /tmp/digests/digests-${variant}-amd64/*))
191+ DIGEST_ARM64=$(basename $(ls /tmp/digests/digests-${variant}-arm64/*))
192+ echo "Digest AMD64: $DIGEST_AMD64"
193+ echo "Digest ARM64: $DIGEST_ARM64"
194+
195+ # Create the manifest list for Docker Hub
196+ docker buildx imagetools create $(jq -cr ".target.\"docker-metadata-action\".tags | map(select(startswith(\"${DOCKER_NAMESPACE}\")) | \"-t \" + .) | join(\" \")" /tmp/bake-meta-${variant}-amd64.json) \
197+ "${DOCKER_NAMESPACE}@sha256:${DIGEST_AMD64}" \
198+ "${DOCKER_NAMESPACE}@sha256:${DIGEST_ARM64}"
199+
200+ # Create the manifest list for GHCR
201+ docker buildx imagetools create $(jq -cr ".target.\"docker-metadata-action\".tags | map(select(startswith(\"${GHCR_NAMESPACE}\")) | \"-t \" + .) | join(\" \")" /tmp/bake-meta-${variant}-amd64.json) \
202+ "${GHCR_NAMESPACE}@sha256:${DIGEST_AMD64}" \
203+ "${GHCR_NAMESPACE}@sha256:${DIGEST_ARM64}"
204+
210205 done
211206
212207 ...
0 commit comments