diff --git a/docker/Dockerfile b/docker/Dockerfile index c290580..294bfd8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,7 @@ # syntax=docker/dockerfile:1.7 -FROM node:25-bookworm-slim AS builder +# Keep the Docker base on Node 22 because the official Node 24/25 slim images +# no longer publish linux/arm/v7 manifests, which breaks our armv7 Docker jobs. +FROM node:22-bookworm-slim AS builder WORKDIR /app @@ -17,7 +19,7 @@ COPY . . RUN npm run build:web && npm run build:server RUN --mount=type=cache,target=/root/.npm npm prune --omit=dev --no-audit --no-fund -FROM node:25-bookworm-slim +FROM node:22-bookworm-slim WORKDIR /app diff --git a/scripts/dev/docker.workflow.test.ts b/scripts/dev/docker.workflow.test.ts index ebab004..2242fb5 100644 --- a/scripts/dev/docker.workflow.test.ts +++ b/scripts/dev/docker.workflow.test.ts @@ -19,10 +19,8 @@ describe('docker workflows', () => { it('uses an armv7-capable node base image in the Dockerfile', () => { const dockerfile = readFileSync(resolve(process.cwd(), 'docker/Dockerfile'), 'utf8'); - const fromMatches = [...dockerfile.matchAll(/^FROM node:(\d+)-bookworm-slim(?: AS builder)?$/gm)]; - - expect(fromMatches).toHaveLength(2); - expect(fromMatches[0]?.[1]).toBe(fromMatches[1]?.[1]); + expect(dockerfile).toContain('FROM node:22-bookworm-slim AS builder'); + expect(dockerfile).toContain('FROM node:22-bookworm-slim'); }); it('keeps server docker builds isolated from desktop packaging dependencies', () => {