Skip to content

Commit b95298b

Browse files
authored
Merge pull request #46 from linuxserver/mod-multi
Add multi arch support to mod builder via optional `MULTI_ARCH` workflow var
2 parents 1c9b584 + f1327e8 commit b95298b

File tree

1 file changed

+116
-37
lines changed

1 file changed

+116
-37
lines changed

.github/workflows/docker-mod-builder.yml

Lines changed: 116 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ on:
1818
MOD_VERSION:
1919
required: false
2020
type: string
21+
MULTI_ARCH:
22+
required: false
23+
type: string
2124
secrets:
2225
CR_USER:
2326
required: false
@@ -54,33 +57,54 @@ jobs:
5457
echo "GITHUB_REPO=${{ inputs.GITHUB_REPO }}" >> $GITHUB_STEP_SUMMARY
5558
echo "MOD_VERSION=${{ inputs.MOD_VERSION }}" >> $GITHUB_ENV
5659
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
5762
5863
- name: Set up QEMU
5964
uses: docker/setup-qemu-action@v3
6065

6166
- name: Build image
6267
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
6472
6573
- name: Tag image (Commit)
6674
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 }}
6775
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 }}"
7277
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
7794
fi
7895
7996
- name: Tag image (PR)
8097
if: ${{ env.GITHUB_REPO == format('{0}/{1}', github.event.pull_request.base.repo.owner.login, github.event.pull_request.base.repo.name) }}
8198
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
84108
85109
- name: Credential check
86110
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:
104128
- name: Push tags to GitHub Container Registry (Commit)
105129
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 }}
106130
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
117156
fi
118157
119158
- name: Push tags to GitHub Container Registry (PR)
120159
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 }}
121160
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
125178
126179
- name: Add GHCR push comment to PR
127180
uses: peter-evans/create-or-update-comment@v4.0.0
@@ -140,21 +193,47 @@ jobs:
140193
- name: Push tags to DockerHub (Commit)
141194
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 }}
142195
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
153218
fi
154219
155220
- name: Push tags to DockerHub (PR)
156221
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 }}
157222
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

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy