use 24.04 arm runners and node 22
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
Simon Smith committed
Nov 6, 2025 at 16:33 UTC
858113b1ac84f50ffd5d1557f7b67f55fbd8896a
2 files changed
+145
-12
.github/workflows/docker.yml
+141
-8
@@ -10,7 +10,7 @@ on:
10
jobs:
11
12
translate:
13
- runs-on: ubuntu-22.04
13
+ runs-on: ubuntu-24.04
14
name: Run Translations
15
steps:
16
- name: Checkout repository
@@ -18,7 +18,7 @@ jobs:
18
- name: Set up Node.js
19
uses: actions/setup-node@v6
20
with:
21
- node-version: "lts/*"
21
+ node-version: "22.x"
22
- name: Run translate.js (ignore errors)
23
run: node translate.js || true
24
working-directory: translate
@@ -38,11 +38,10 @@ jobs:
38
path: .
39
40
build-amd64:
41
- runs-on: ubuntu-22.04
41
+ runs-on: ubuntu-24.04
42
needs: translate
43
strategy:
44
fail-fast: false
45
- max-parallel: 3
45
matrix:
46
variant: [mongodb, postgresql, mariadb, all, slim]
47
name: Build Docker Image (amd64-${{ matrix.variant }})
@@ -96,11 +95,10 @@ jobs:
95
.
96
97
build-arm64:
99
- runs-on: ubuntu-22.04
98
+ runs-on: ubuntu-22.04-arm
99
needs: translate
100
strategy:
101
fail-fast: false
103
- max-parallel: 3
102
matrix:
103
variant: [mongodb, postgresql, mariadb, all, slim]
104
name: Build Docker Image (arm64-${{ matrix.variant }})
@@ -118,7 +116,6 @@ jobs:
116
uses: docker/setup-buildx-action@v3
117
with:
118
cache-binary: false
121
-
119
- name: Log in to GitHub Container Registry
120
uses: docker/login-action@v3
121
with:
@@ -154,12 +151,128 @@ jobs:
151
--push \
152
.
153
154
+ build-armv7:
155
+ runs-on: ubuntu-24.04-arm
156
+ needs: translate
157
+ strategy:
158
+ fail-fast: false
159
+ matrix:
160
+ variant: [mongodb, postgresql, mariadb, all, slim]
161
+ name: Build Docker Image (armv7-${{ matrix.variant }})
162
+ steps:
163
+ - name: Download repo artifact
164
+ uses: actions/download-artifact@v5
165
+ with:
166
+ name: repo-with-translations
167
+ - name: Set up QEMU
168
+ uses: docker/setup-qemu-action@v3
169
+ with:
170
+ cache-image: false
171
+ platforms: arm
172
+ - name: Set up Docker Buildx
173
+ uses: docker/setup-buildx-action@v3
174
+ with:
175
+ cache-binary: false
176
+ - name: Log in to GitHub Container Registry
177
+ uses: docker/login-action@v3
178
+ with:
179
+ registry: ghcr.io
180
+ username: ${{ github.repository_owner }}
181
+ password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }}
182
+ - name: Build and push Docker image (armv7-${{ matrix.variant }})
183
+ run: |
184
+ REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
185
+ case "${{ matrix.variant }}" in
186
+ mongodb)
187
+ MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-armv7-mongodb";;
188
+ postgresql)
189
+ MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-armv7-postgresql";;
190
+ mariadb)
191
+ MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-armv7-mariadb";;
192
+ all)
193
+ MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-armv7";;
194
+ slim)
195
+ MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-armv7-slim";;
196
+ esac
197
+ docker buildx build \
198
+ --platform linux/arm/v7 \
199
+ --build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \
200
+ --build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \
201
+ --build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \
202
+ --build-arg DISABLE_MINIFY=yes \
203
+ --build-arg DISABLE_TRANSLATE=yes \
204
+ --build-arg DISABLE_EXTRACT=yes \
205
+ --build-arg PREINSTALL_LIBS=true \
206
+ -f docker/Dockerfile \
207
+ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \
208
+ --push \
209
+ .
210
+
211
+ build-armv6:
212
+ runs-on: ubuntu-24.04-arm
213
+ needs: translate
214
+ strategy:
215
+ fail-fast: false
216
+ matrix:
217
+ variant: [mongodb, postgresql, mariadb, all, slim]
218
+ name: Build Docker Image (armv6-${{ matrix.variant }})
219
+ steps:
220
+ - name: Download repo artifact
221
+ uses: actions/download-artifact@v5
222
+ with:
223
+ name: repo-with-translations
224
+ - name: Set up QEMU
225
+ uses: docker/setup-qemu-action@v3
226
+ with:
227
+ cache-image: false
228
+ platforms: arm
229
+ - name: Set up Docker Buildx
230
+ uses: docker/setup-buildx-action@v3
231
+ with:
232
+ cache-binary: false
233
+ - name: Log in to GitHub Container Registry
234
+ uses: docker/login-action@v3
235
+ with:
236
+ registry: ghcr.io
237
+ username: ${{ github.repository_owner }}
238
+ password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }}
239
+ - name: Build and push Docker image (armv6-${{ matrix.variant }})
240
+ run: |
241
+ REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
242
+ case "${{ matrix.variant }}" in
243
+ mongodb)
244
+ MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-armv6-mongodb";;
245
+ postgresql)
246
+ MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-armv6-postgresql";;
247
+ mariadb)
248
+ MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-armv6-mariadb";;
249
+ all)
250
+ MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-armv6";;
251
+ slim)
252
+ MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-armv6-slim";;
253
+ esac
254
+ docker buildx build \
255
+ --platform linux/arm/v6 \
256
+ --build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \
257
+ --build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \
258
+ --build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \
259
+ --build-arg DISABLE_MINIFY=yes \
260
+ --build-arg DISABLE_TRANSLATE=yes \
261
+ --build-arg DISABLE_EXTRACT=yes \
262
+ --build-arg PREINSTALL_LIBS=true \
263
+ -f docker/Dockerfile \
264
+ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \
265
+ --push \
266
+ .
267
+
268
merge-manifest:
158
- runs-on: ubuntu-22.04
269
+ runs-on: ubuntu-24.03-arm
270
needs:
271
- translate
272
- build-amd64
273
- build-arm64
274
+ - build-armv7
275
+ - build-armv6
276
name: Create and Push Multi-Arch Manifest
277
steps:
278
- name: Set up Docker Buildx
@@ -180,26 +293,36 @@ jobs:
293
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-mongodb \
294
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mongodb \
295
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mongodb \
296
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mongodb \
297
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mongodb
298
# postgresql
299
docker buildx imagetools create \
300
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-postgresql \
301
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-postgresql \
302
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-postgresql \
303
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-postgresql \
304
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-postgresql
305
# mariadb
306
docker buildx imagetools create \
307
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-mariadb \
308
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mariadb \
309
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mariadb \
310
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mariadb \
311
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mariadb
312
# all (no suffix)
313
docker buildx imagetools create \
314
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }} \
315
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64 \
316
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64 \
317
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7 \
318
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6
319
# slim
320
docker buildx imagetools create \
321
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-slim \
322
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-slim \
323
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-slim \
324
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-slim \
325
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-slim
326
- name: Create and push 'latest' tags (releases only)
327
if: github.event_name == 'release'
328
run: |
@@ -209,23 +332,33 @@ jobs:
332
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-mongodb \
333
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mongodb \
334
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mongodb \
335
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mongodb \
336
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mongodb
337
# latest-postgresql
338
docker buildx imagetools create \
339
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-postgresql \
340
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-postgresql \
341
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-postgresql \
342
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-postgresql \
343
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-postgresql
344
# latest-mariadb
345
docker buildx imagetools create \
346
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-mariadb \
347
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mariadb \
348
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mariadb \
349
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mariadb \
350
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mariadb
351
# latest (all databases)
352
docker buildx imagetools create \
353
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest \
354
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64 \
355
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64 \
356
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7 \
357
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6
358
# latest-slim
359
docker buildx imagetools create \
360
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-slim \
361
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-slim \
362
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-slim \
363
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-slim \
364
+ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-slim
docker/Dockerfile
+4
-4
@@ -1,5 +1,5 @@
1
### STAGE 1 BUILDING.
2
-FROM node:lts-alpine3.22 AS builder
2
+FROM node:22-alpine3.22 AS builder
3
4
# Any value inside one of the disable ARGs will be accepted.
5
ARG DISABLE_EXTRACT="yes"
@@ -47,12 +47,12 @@ RUN rm -rf /opt/meshcentral/meshcentral/docker /opt/meshcentral/meshcentral/node
47
48
### STAGE 2 PRECOMPILE DEPS MODULE
49
50
-FROM alpine:3.22 AS dep-compiler
50
+FROM node:22-alpine3.22 AS dep-compiler
51
52
RUN apk update && \
53
echo -e "----------\nINSTALLING ALPINE PACKAGES...\n----------"; \
54
apk add --no-cache --update \
55
- bash gcc g++ jq make nodejs npm python3 tzdata
55
+ bash gcc g++ jq make python3 tzdata
56
57
COPY --from=builder /opt/meshcentral/meshcentral /opt/meshcentral/meshcentral
58
WORKDIR /opt/meshcentral/meshcentral
@@ -63,7 +63,7 @@ RUN jq '.dependencies += {"modern-syslog": "1.2.0", "telegram": "2.26.22"}' pack
63
64
### STAGE 3 RUNTIME
65
66
-FROM alpine:3.22 AS runtime
66
+FROM node:22-alpine3.22 AS runtime
67
68
# # Copy prepared app from builder stage
69
COPY --from=dep-compiler /opt/meshcentral/meshcentral /opt/meshcentral/meshcentral