Skip to content

Commit 06ce8b4

Browse files
committed
installation: setup arm64 base through multiplatform manifest
1 parent 9d2e0c4 commit 06ce8b4

1 file changed

Lines changed: 97 additions & 8 deletions

File tree

.github/workflows/docker-bases.yml

Lines changed: 97 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,22 @@ jobs:
3838
#######################################################
3939
deploy-cpu-bases:
4040
if: inputs.cpu
41-
name: "cpu-base"
42-
runs-on: ubuntu-latest
41+
name: "cpu-base-${{ matrix.arch }}-gcc${{ matrix.gcc }}"
42+
runs-on: ${{ matrix.runner }}
4343
env:
4444
DOCKER_BUILDKIT: "1"
4545

4646
strategy:
4747
matrix:
4848
gcc: ["", "14"]
49+
arch: [amd64, arm64]
50+
include:
51+
- arch: amd64
52+
platform: linux/amd64
53+
runner: ubuntu-latest
54+
- arch: arm64
55+
platform: linux/arm64
56+
runner: ubuntu-24.04-arm
4957

5058
steps:
5159
- name: Checkout devito
@@ -72,8 +80,41 @@ jobs:
7280
context: .
7381
file: "./docker/Dockerfile.cpu"
7482
push: true
83+
platforms: ${{ matrix.platform }}
7584
build-args: "gcc=${{ matrix.gcc }}"
76-
tags: "devitocodes/bases:cpu-gcc${{ matrix.gcc }}"
85+
tags: "devitocodes/bases:cpu-gcc${{ matrix.gcc }}-${{ matrix.arch }}"
86+
87+
deploy-cpu-bases-manifest:
88+
if: inputs.cpu
89+
name: "cpu-base-manifest"
90+
runs-on: ubuntu-latest
91+
needs: deploy-cpu-bases
92+
env:
93+
DOCKER_BUILDKIT: "1"
94+
95+
strategy:
96+
matrix:
97+
gcc: ["", "14"]
98+
99+
steps:
100+
- name: Set up Docker Buildx
101+
uses: docker/setup-buildx-action@v3
102+
103+
- name: Login to DockerHub
104+
uses: docker/login-action@v3
105+
with:
106+
username: ${{ secrets.DOCKER_USERNAME }}
107+
password: ${{ secrets.DOCKER_PASSWORD }}
108+
109+
- name: Create multi-arch manifest
110+
env:
111+
TAG_BASE: ${{ format('cpu-gcc{0}', matrix.gcc) }}
112+
run: |
113+
docker buildx imagetools create \
114+
--tag devitocodes/bases:${TAG_BASE} \
115+
devitocodes/bases:${TAG_BASE}-amd64 \
116+
devitocodes/bases:${TAG_BASE}-arm64
117+
docker buildx imagetools inspect devitocodes/bases:${TAG_BASE}
77118
78119
#######################################################
79120
############## Intel OneApi CPU #######################
@@ -138,11 +179,24 @@ jobs:
138179
#######################################################
139180
deploy-nvidia-bases:
140181
if: inputs.nvidia
141-
name: "nvidia-bases"
142-
runs-on: ["self-hosted", "nvidiagpu"]
182+
name: "nvidia-bases-${{ matrix.arch }}"
183+
runs-on: ${{ matrix.runner }}
143184
env:
144185
DOCKER_BUILDKIT: "1"
145186

187+
strategy:
188+
matrix:
189+
arch: [amd64, arm64]
190+
include:
191+
- arch: amd64
192+
platform: linux/amd64
193+
runner:
194+
- self-hosted
195+
- nvidiagpu
196+
- arch: arm64
197+
platform: linux/arm64
198+
runner: ubuntu-24.04-arm
199+
146200
steps:
147201
- name: Checkout devito
148202
uses: actions/checkout@v5
@@ -169,10 +223,11 @@ jobs:
169223
file: "./docker/Dockerfile.nvidia"
170224
push: true
171225
target: "nvc"
226+
platforms: ${{ matrix.platform }}
172227
build-args: "arch=nvc"
173228
# Label (not tag) with runner name for traceability without changing image tags
174229
labels: builder-runner=${{ runner.name }}
175-
tags: "devitocodes/bases:nvidia-nvc"
230+
tags: "devitocodes/bases:nvidia-nvc-${{ matrix.arch }}"
176231

177232
- name: NVCC image
178233
uses: docker/build-push-action@v6
@@ -181,9 +236,10 @@ jobs:
181236
file: "./docker/Dockerfile.nvidia"
182237
push: true
183238
target: "nvcc"
239+
platforms: ${{ matrix.platform }}
184240
build-args: "arch=nvcc"
185241
labels: builder-runner=${{ runner.name }}
186-
tags: "devitocodes/bases:nvidia-nvcc"
242+
tags: "devitocodes/bases:nvidia-nvcc-${{ matrix.arch }}"
187243

188244
- name: NVC host image
189245
uses: docker/build-push-action@v6
@@ -192,9 +248,42 @@ jobs:
192248
file: "./docker/Dockerfile.nvidia"
193249
push: true
194250
target: "nvc-host"
251+
platforms: ${{ matrix.platform }}
195252
build-args: "arch=nvc-host"
196253
labels: builder-runner=${{ runner.name }}
197-
tags: "devitocodes/bases:cpu-nvc"
254+
tags: "devitocodes/bases:cpu-nvc-${{ matrix.arch }}"
255+
256+
deploy-nvidia-bases-manifest:
257+
if: inputs.nvidia
258+
name: "nvidia-base-manifest"
259+
runs-on: ubuntu-latest
260+
needs: deploy-nvidia-bases
261+
env:
262+
DOCKER_BUILDKIT: "1"
263+
264+
strategy:
265+
matrix:
266+
final_tag: [nvidia-nvc, nvidia-nvcc, cpu-nvc]
267+
268+
steps:
269+
- name: Set up Docker Buildx
270+
uses: docker/setup-buildx-action@v3
271+
272+
- name: Login to DockerHub
273+
uses: docker/login-action@v3
274+
with:
275+
username: ${{ secrets.DOCKER_USERNAME }}
276+
password: ${{ secrets.DOCKER_PASSWORD }}
277+
278+
- name: Create multi-arch manifest
279+
env:
280+
FINAL_TAG: ${{ matrix.final_tag }}
281+
run: |
282+
docker buildx imagetools create \
283+
--tag devitocodes/bases:${FINAL_TAG} \
284+
devitocodes/bases:${FINAL_TAG}-amd64 \
285+
devitocodes/bases:${FINAL_TAG}-arm64
286+
docker buildx imagetools inspect devitocodes/bases:${FINAL_TAG}
198287
199288
#######################################################
200289
##################### AMD #############################

0 commit comments

Comments
 (0)