1+ name : " Build and Publish Docker Demo"
2+
3+ on :
4+ push :
5+ tags :
6+ - " v*"
7+
8+ env :
9+ REGISTRY_IMAGE : estoesmoises/stackoverflow-backstage-demo
10+
11+ jobs :
12+ build-multi-arch :
13+ runs-on : ubuntu-latest
14+ strategy :
15+ fail-fast : false
16+ matrix :
17+ platform :
18+ - linux/amd64
19+ - linux/arm64
20+ steps :
21+ - name : Checkout code
22+ uses : actions/checkout@v4
23+
24+ - name : Prepare
25+ run : |
26+ platform=${{ matrix.platform }}
27+ echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
28+
29+ - name : Docker meta
30+ id : meta
31+ uses : docker/metadata-action@v5
32+ with :
33+ images : ${{ env.REGISTRY_IMAGE }}
34+
35+ - name : Login to Docker Hub
36+ uses : docker/login-action@v3
37+ with :
38+ username : ${{ secrets.DOCKER_USERNAME }}
39+ password : ${{ secrets.DOCKER_PASSWORD }}
40+
41+ - name : Set up QEMU
42+ uses : docker/setup-qemu-action@v3
43+
44+ - name : Set up Docker Buildx
45+ uses : docker/setup-buildx-action@v3
46+
47+ - name : Build and push by digest
48+ id : build
49+ uses : docker/build-push-action@v6
50+ with :
51+ context : .
52+ platforms : ${{ matrix.platform }}
53+ labels : ${{ steps.meta.outputs.labels }}
54+ outputs : type=image,push-by-digest=true,name=${{ env.REGISTRY_IMAGE }},push=true
55+
56+ - name : Export digest
57+ run : |
58+ mkdir -p ${{ runner.temp }}/digests
59+ digest="${{ steps.build.outputs.digest }}"
60+ touch "${{ runner.temp }}/digests/${digest#sha256:}"
61+
62+ - name : Upload digest
63+ uses : actions/upload-artifact@v4
64+ with :
65+ name : digests-${{ env.PLATFORM_PAIR }}
66+ path : ${{ runner.temp }}/digests/*
67+ if-no-files-found : error
68+ retention-days : 1
69+
70+ merge :
71+ runs-on : ubuntu-latest
72+ needs :
73+ - build-multi-arch
74+ steps :
75+ - name : Download digests
76+ uses : actions/download-artifact@v4
77+ with :
78+ path : ${{ runner.temp }}/digests
79+ pattern : digests-*
80+ merge-multiple : true
81+
82+ - name : Login to Docker Hub
83+ uses : docker/login-action@v3
84+ with :
85+ username : ${{ secrets.DOCKER_USERNAME }}
86+ password : ${{ secrets.DOCKER_PASSWORD }}
87+
88+ - name : Set up Docker Buildx
89+ uses : docker/setup-buildx-action@v3
90+
91+ - name : Docker meta
92+ id : meta
93+ uses : docker/metadata-action@v5
94+ with :
95+ images : ${{ env.REGISTRY_IMAGE }}
96+ tags : |
97+ type=semver,pattern={{version}}
98+ type=semver,pattern={{major}}.{{minor}}
99+ type=raw,value=latest,enable=${{ github.ref_type == 'tag' }}
100+
101+ - name : Create manifest list and push
102+ working-directory : ${{ runner.temp }}/digests
103+ run : |
104+ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
105+ $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
106+
107+ - name : Inspect image
108+ run : |
109+ docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
0 commit comments