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