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