Skip to content

Commit 83b8ce3

Browse files
push by digest for multi platform
1 parent 1fc2f3b commit 83b8ce3

File tree

1 file changed

+53
-4
lines changed

1 file changed

+53
-4
lines changed

.github/workflows/build-intermediary-image.yml

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Build and push intermediary Docker image
22

33
on:
4-
pull_request:
4+
push:
55
workflow_dispatch:
66

77
permissions:
@@ -13,14 +13,16 @@ env:
1313
REGISTRY_IMAGE: ghcr.io/${{ github.repository }}
1414

1515
jobs:
16-
build-and-push:
16+
build:
1717
runs-on: amd-runner-2204
1818
strategy:
1919
fail-fast: false
2020
matrix:
2121
platform:
2222
- linux/amd64
2323
- linux/arm64
24+
outputs:
25+
full_image: ${{ steps.vars.outputs.FULL_IMAGE }}
2426
steps:
2527
- name: Checkout source
2628
uses: actions/checkout@v4
@@ -51,13 +53,60 @@ jobs:
5153
password: ${{ secrets.GITHUB_TOKEN }}
5254

5355
- name: Build and push image
56+
id: build
5457
uses: docker/build-push-action@v6
5558
with:
5659
context: .
5760
platforms: ${{ matrix.platform }}
5861
push: true
5962
tags: ${{ steps.vars.outputs.FULL_IMAGE }}
63+
cache-from: type=gha
64+
cache-to: type=gha,mode=max
65+
outputs: type=image,name=${{ steps.vars.outputs.FULL_IMAGE }},push-by-digest=true
6066

61-
- name: Output pushed image
67+
- name: Save digest as artifact
6268
run: |
63-
echo "Image pushed: ${{ steps.vars.outputs.FULL_IMAGE }}"
69+
mkdir -p digests
70+
echo "${{ steps.build.outputs.digest }}" > "digests/${{ matrix.platform }}.txt"
71+
shell: bash
72+
73+
- name: Upload digest artifact
74+
uses: actions/upload-artifact@v4
75+
with:
76+
name: image-digest-${{ matrix.platform }}
77+
path: digests/${{ matrix.platform }}.txt
78+
79+
create-manifest:
80+
runs-on: amd-runner-2204
81+
needs: build
82+
steps:
83+
- name: Download all digests
84+
uses: actions/download-artifact@v4
85+
with:
86+
path: digests
87+
pattern: image-digest-*
88+
merge-multiple: true
89+
90+
- name: Set up Docker Buildx
91+
uses: docker/setup-buildx-action@v3
92+
93+
- name: Login to GitHub Container Registry
94+
uses: docker/login-action@v3
95+
with:
96+
registry: ${{ env.REGISTRY }}
97+
username: ${{ github.actor }}
98+
password: ${{ secrets.GITHUB_TOKEN }}
99+
100+
- name: Create and push multi-platform manifest
101+
run: |
102+
FULL_IMAGE="${{ needs.build.outputs.full_image }}"
103+
CREATE_ARGS=""
104+
for digest_file in digests/*.txt; do
105+
digest=$(cat "$digest_file")
106+
CREATE_ARGS="$CREATE_ARGS ${FULL_IMAGE}@${digest}"
107+
done
108+
docker buildx imagetools create -t $FULL_IMAGE $CREATE_ARGS
109+
110+
- name: Inspect final image
111+
run: |
112+
docker buildx imagetools inspect ${{ needs.build.outputs.full_image }}

0 commit comments

Comments
 (0)