18
18
MOD_VERSION :
19
19
required : false
20
20
type : string
21
+ MULTI_ARCH :
22
+ required : false
23
+ type : string
21
24
secrets :
22
25
CR_USER :
23
26
required : false
@@ -54,33 +57,54 @@ jobs:
54
57
echo "GITHUB_REPO=${{ inputs.GITHUB_REPO }}" >> $GITHUB_STEP_SUMMARY
55
58
echo "MOD_VERSION=${{ inputs.MOD_VERSION }}" >> $GITHUB_ENV
56
59
echo "MOD_VERSION=${{ inputs.MOD_VERSION }}" >> $GITHUB_STEP_SUMMARY
60
+ echo "MULTI_ARCH=${{ inputs.MULTI_ARCH }}" >> $GITHUB_ENV
61
+ echo "MULTI_ARCH=${{ inputs.MULTI_ARCH }}" >> $GITHUB_STEP_SUMMARY
57
62
58
63
- name : Set up QEMU
59
64
uses : docker/setup-qemu-action@v3
60
65
61
66
- name : Build image
62
67
run : |
63
- docker buildx build --no-cache --build-arg MOD_VERSION=${MOD_VERSION} -t ${{ github.sha }} .
68
+ docker buildx build --no-cache --build-arg MOD_VERSION=${MOD_VERSION} -t ${{ github.sha }} --platform linux/amd64 .
69
+ if [[ "${MULTI_ARCH,,}" == "true" ]]; then
70
+ docker buildx build --no-cache --build-arg MOD_VERSION=${MOD_VERSION} -t arm64v8-${{ github.sha }} --platform linux/arm64/v8 .
71
+ fi
64
72
65
73
- name : Tag image (Commit)
66
74
if : ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.GITHUB_REPO == github.repository }}
67
75
run : |
68
- docker tag ${{ github.sha }} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}
69
- docker tag ${{ github.sha }} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }}
70
- docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}
71
- docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }}
76
+ DOCKERHUB_TAGS="${ENDPOINT}:${BASEIMAGE}-${MODNAME} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }}"
72
77
if [[ -n "${MOD_VERSION}" ]]; then
73
- docker tag ${{ github.sha }} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}
74
- docker tag ${{ github.sha }} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}-${{ github.sha }}
75
- docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}
76
- docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}-${{ github.sha }}
78
+ DOCKERHUB_TAGS="${DOCKERHUB_TAGS} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}-${{ github.sha }}"
79
+ fi
80
+ echo "DOCKERHUB_TAGS=${DOCKERHUB_TAGS}" >> $GITHUB_ENV
81
+ if [[ "${MULTI_ARCH,,}" == "true" ]]; then
82
+ for i in ${DOCKERHUB_TAGS}; do
83
+ docker tag ${{ github.sha }} ${i/:/:amd64-}
84
+ docker tag arm64v8-${{ github.sha }} ${i/:/:arm64v8-}
85
+ ighcr="${i/#/ghcr.io\/}"
86
+ docker tag ${{ github.sha }} ${ighcr/:/:amd64-}
87
+ docker tag arm64v8-${{ github.sha }} ${ighcr/:/:arm64v8-}
88
+ done
89
+ else
90
+ for i in ${DOCKERHUB_TAGS}; do
91
+ docker tag ${{ github.sha }} ${i}
92
+ docker tag ${{ github.sha }} ${i/#/ghcr.io\/}
93
+ done
77
94
fi
78
95
79
96
- name : Tag image (PR)
80
97
if : ${{ env.GITHUB_REPO == format('{0}/{1}', github.event.pull_request.base.repo.owner.login, github.event.pull_request.base.repo.name) }}
81
98
run : |
82
- docker tag ${{ github.sha }} ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
83
- docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
99
+ if [[ "${MULTI_ARCH,,}" == "true" ]]; then
100
+ docker tag ${{ github.sha }} ${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }}
101
+ docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }}
102
+ docker tag arm64v8-${{ github.sha }} ${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}
103
+ docker tag arm64v8-${{ github.sha }} ghcr.io/${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}
104
+ else
105
+ docker tag ${{ github.sha }} ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
106
+ docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
107
+ fi
84
108
85
109
- name : Credential check
86
110
if : ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.GITHUB_REPO == github.repository || env.GITHUB_REPO == format('{0}/{1}', github.event.pull_request.base.repo.owner.login, github.event.pull_request.base.repo.name) }}
@@ -104,24 +128,53 @@ jobs:
104
128
- name : Push tags to GitHub Container Registry (Commit)
105
129
if : ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.GITHUB_REPO == github.repository && env.CR_USER && env.CR_PAT }}
106
130
run : |
107
- docker push ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}
108
- docker push ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }}
109
- echo "Pushed the following images/tags to GHCR:" >> $GITHUB_STEP_SUMMARY
110
- echo "ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}" >> $GITHUB_STEP_SUMMARY
111
- echo "ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
112
- if [[ -n "${MOD_VERSION}" ]]; then
113
- docker push ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}
114
- docker push ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}-${{ github.sha }}
115
- echo "ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}" >> $GITHUB_STEP_SUMMARY
116
- echo "ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}-${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
131
+ if [[ "${MULTI_ARCH,,}" == "true" ]]; then
132
+ echo "Pushed the following images/tags to GHCR:" >> $GITHUB_STEP_SUMMARY
133
+ for i in ${DOCKERHUB_TAGS}; do
134
+ ighcr="${i/#/ghcr.io\/}"
135
+ docker push ${ighcr/:/:amd64-}
136
+ echo "${ighcr/:/:amd64-}" >> $GITHUB_STEP_SUMMARY
137
+ docker push ${ighcr/:/:arm64v8-}
138
+ echo "${ighcr/:/:arm64v8-}" >> $GITHUB_STEP_SUMMARY
139
+ done
140
+ echo "Pushed the following manifests to GHCR:" >> $GITHUB_STEP_SUMMARY
141
+ for i in ${DOCKERHUB_TAGS}; do
142
+ ighcr="${i/#/ghcr.io\/}"
143
+ docker manifest push --purge ${ighcr} || :
144
+ docker manifest create ${ighcr} ${ighcr/:/:amd64-} ${ighcr/:/:arm64v8-}
145
+ docker manifest annotate ${ighcr} ${ighcr/:/:arm64v8-} --os linux --arch arm64 --variant v8
146
+ docker manifest push --purge ${ighcr}
147
+ echo "${ighcr}" >> $GITHUB_STEP_SUMMARY
148
+ done
149
+ else
150
+ echo "Pushed the following images/tags to GHCR:" >> $GITHUB_STEP_SUMMARY
151
+ for i in ${DOCKERHUB_TAGS}; do
152
+ ighcr="${i/#/ghcr.io\/}"
153
+ docker push ${ighcr}
154
+ echo "${ighcr}" >> $GITHUB_STEP_SUMMARY
155
+ done
117
156
fi
118
157
119
158
- name : Push tags to GitHub Container Registry (PR)
120
159
if : ${{ env.GITHUB_REPO == format('{0}/{1}', github.event.pull_request.base.repo.owner.login, github.event.pull_request.base.repo.name) && env.CR_USER && env.CR_PAT }}
121
160
run : |
122
- docker push ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
123
- echo "Pushed the following PR image/tag to GHCR:" >> $GITHUB_STEP_SUMMARY
124
- echo "ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
161
+ if [[ "${MULTI_ARCH,,}" == "true" ]]; then
162
+ docker push ghcr.io/${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }}
163
+ docker push ghcr.io/${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}
164
+ echo "Pushed the following PR images/tags to GHCR:" >> $GITHUB_STEP_SUMMARY
165
+ echo "ghcr.io/${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
166
+ echo "ghcr.io/${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
167
+ docker manifest push --purge ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }} || :
168
+ docker manifest create ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }} ghcr.io/${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }} ghcr.io/${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}
169
+ docker manifest annotate ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }} ghcr.io/${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }} --os linux --arch arm64 --variant v8
170
+ docker manifest push --purge ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
171
+ echo "Pushed the following PR manifest to GHCR:" >> $GITHUB_STEP_SUMMARY
172
+ echo "ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
173
+ else
174
+ docker push ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
175
+ echo "Pushed the following PR image/tag to GHCR:" >> $GITHUB_STEP_SUMMARY
176
+ echo "ghcr.io/${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
177
+ fi
125
178
126
179
- name : Add GHCR push comment to PR
127
180
uses : peter-evans/create-or-update-comment@v4.0.0
@@ -140,21 +193,47 @@ jobs:
140
193
- name : Push tags to DockerHub (Commit)
141
194
if : ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.GITHUB_REPO == github.repository && env.DOCKERUSER && env.DOCKERPASS }}
142
195
run : |
143
- docker push ${ENDPOINT}:${BASEIMAGE}-${MODNAME}
144
- docker push ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }}
145
- echo "Pushed the following images/tags to Docker Hub:" >> $GITHUB_STEP_SUMMARY
146
- echo "${ENDPOINT}:${BASEIMAGE}-${MODNAME}" >> $GITHUB_STEP_SUMMARY
147
- echo "${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
148
- if [[ -n "${MOD_VERSION}" ]]; then
149
- docker push ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}
150
- docker push ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}-${{ github.sha }}
151
- echo "${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}" >> $GITHUB_STEP_SUMMARY
152
- echo "${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${MOD_VERSION}-${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
196
+ if [[ "${MULTI_ARCH,,}" == "true" ]]; then
197
+ echo "Pushed the following images/tags to Docker Hub:" >> $GITHUB_STEP_SUMMARY
198
+ for i in ${DOCKERHUB_TAGS}; do
199
+ docker push ${i/:/:amd64-}
200
+ echo "${i/:/:amd64-}" >> $GITHUB_STEP_SUMMARY
201
+ docker push ${i/:/:arm64v8-}
202
+ echo "${i/:/:arm64v8-}" >> $GITHUB_STEP_SUMMARY
203
+ done
204
+ echo "Pushed the following manifests to Docker Hub:" >> $GITHUB_STEP_SUMMARY
205
+ for i in ${DOCKERHUB_TAGS}; do
206
+ docker manifest push --purge ${i} || :
207
+ docker manifest create ${i} ${i/:/:amd64-} ${i/:/:arm64v8-}
208
+ docker manifest annotate ${i} ${i/:/:arm64v8-} --os linux --arch arm64 --variant v8
209
+ docker manifest push --purge ${i}
210
+ echo "${i}" >> $GITHUB_STEP_SUMMARY
211
+ done
212
+ else
213
+ echo "Pushed the following images/tags to Docker Hub:" >> $GITHUB_STEP_SUMMARY
214
+ for i in ${DOCKERHUB_TAGS}; do
215
+ docker push ${i}
216
+ echo "${i}" >> $GITHUB_STEP_SUMMARY
217
+ done
153
218
fi
154
219
155
220
- name : Push tags to DockerHub (PR)
156
221
if : ${{ env.GITHUB_REPO == format('{0}/{1}', github.event.pull_request.base.repo.owner.login, github.event.pull_request.base.repo.name) && env.DOCKERUSER && env.DOCKERPASS }}
157
222
run : |
158
- docker push ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
159
- echo "Pushed the following PR image/tag to Docker Hub:" >> $GITHUB_STEP_SUMMARY
160
- echo "${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
223
+ if [[ "${MULTI_ARCH,,}" == "true" ]]; then
224
+ docker push ${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }}
225
+ docker push ${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}
226
+ echo "Pushed the following PR images/tags to Docker Hub:" >> $GITHUB_STEP_SUMMARY
227
+ echo "${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
228
+ echo "${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
229
+ docker manifest push --purge ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }} || :
230
+ docker manifest create ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }} ${ENDPOINT}:amd64-pull_request_${{ github.event.pull_request.number }} ${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }}
231
+ docker manifest annotate ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }} ${ENDPOINT}:arm64v8-pull_request_${{ github.event.pull_request.number }} --os linux --arch arm64 --variant v8
232
+ docker manifest push --purge ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
233
+ echo "Pushed the following PR manifest to Docker Hub:" >> $GITHUB_STEP_SUMMARY
234
+ echo "${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
235
+ else
236
+ docker push ${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}
237
+ echo "Pushed the following PR image/tag to Docker Hub:" >> $GITHUB_STEP_SUMMARY
238
+ echo "${ENDPOINT}:pull_request_${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
239
+ fi
0 commit comments