57
57
# ${{ env.REGISTRY_IMAGE }}:latest, ${{ env.REGISTRY_IMAGE }}:${{ steps.previoustag.outputs.tag }}
58
58
59
59
jobs :
60
- build :
60
+ build-node :
61
61
runs-on : ubuntu-latest
62
- strategy :
63
- fail-fast : true
64
- matrix :
65
- platform :
66
- - linux/amd64
67
- - linux/arm64
68
62
steps :
69
- - name : Prepare
70
- run : |
71
- platform=${{ matrix.platform }}
72
- echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
73
-
74
- - name : Docker meta
75
- id : meta
76
- uses : docker/metadata-action@v5
77
- with :
78
- images : ${{ env.REGISTRY_IMAGE }}
79
-
80
- - name : Set up QEMU
81
- uses : docker/setup-qemu-action@v3
63
+ - name : Log in to registry
64
+ run : echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
82
65
83
66
- name : Set up Docker Buildx
84
67
uses : docker/setup-buildx-action@v3
85
68
86
- - name : Log in to registry
87
- run : echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
88
-
89
69
- name : Build and push by digest
90
70
id : build
91
71
uses : docker/build-push-action@v6
92
72
with :
93
- platforms : ${{ matrix.platform }}
73
+ context : .
74
+ load : true
75
+ target : builder
76
+ file : ./Dockerfile
77
+ cache-from : type=gha
78
+ cache-to : type=gha,mode=max
79
+ build-args : VITE_BUILD_ID="Github Actions"
80
+ platforms : linux/amd64
94
81
labels : ${{ steps.meta.outputs.labels }}
95
- outputs : type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
82
+ outputs : type=docker,dest=/tmp/docker-builder.tar
96
83
97
- - name : Export digest
98
- run : |
99
- mkdir -p /tmp/digests
100
- digest="${{ steps.build.outputs.digest }}"
101
- touch "/tmp/digests/${digest#sha256:}"
102
-
103
- - name : Upload digest
84
+ - name : Share builder image
104
85
uses : actions/upload-artifact@v4
105
86
with :
106
- name : digests-${{ env.PLATFORM_PAIR }}
107
- path : /tmp/digests/*
87
+ name : docker-builder
88
+ path : /tmp/docker-builder.tar
108
89
if-no-files-found : error
109
90
retention-days : 1
110
91
111
- merge :
92
+ build :
112
93
runs-on : ubuntu-latest
113
- needs :
114
- - build
94
+ needs : [build-node]
115
95
steps :
116
- - name : Download digests
96
+ - name : Log in to registry
97
+ run : echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
98
+
99
+ - name : Download builder image
117
100
uses : actions/download-artifact@v4
118
101
with :
119
- path : /tmp/digests
120
- pattern : digests-*
102
+ path : /tmp/docker-builder
121
103
merge-multiple : true
122
104
105
+ - name : Load image
106
+ run : |
107
+ docker load --input /tmp/docker-builder.tar
108
+ docker image ls -a
109
+
123
110
- name : Set up Docker Buildx
124
111
uses : docker/setup-buildx-action@v3
125
112
126
- - name : Docker meta
127
- id : meta
128
- uses : docker/metadata- action@v5
113
+ - name : Build and push
114
+ id : docker_build
115
+ uses : docker/build-push- action@v6
129
116
with :
130
- images : ${{ env.REGISTRY_IMAGE }}
131
-
132
- - name : Log in to registry
133
- run : echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
134
-
135
- - name : Create manifest list and push
136
- working-directory : /tmp/digests
137
- run : |
138
- docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
139
- $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
140
-
141
- - name : Inspect image
142
- run : |
143
- docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
117
+ push : true
118
+ context : .
119
+ target : target
120
+ file : ./Dockerfile
121
+ cache-from : type=gha
122
+ cache-to : type=gha,mode=max
123
+ platforms : linux/amd64,linux/arm64
124
+ tags :
125
+ ${{ env.REGISTRY_IMAGE }}:latest, ${{ env.REGISTRY_IMAGE }}:${{ steps.previoustag.outputs.tag }}
0 commit comments