From 3ca13b6b88d240cf810b98df2750783556258f20 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Mon, 6 Apr 2026 22:29:14 +0200 Subject: [PATCH] perf: add BuildKit cache mounts for Maven and npm in Docker builds Maven .m2 and npm caches persist across --no-cache builds, avoiding full dependency re-downloads on every CI run. Co-Authored-By: Claude Opus 4.6 (1M context) --- Dockerfile | 8 ++++---- ui/sign-in/Dockerfile | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 64008a6..744dec4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ FROM --platform=$BUILDPLATFORM node:22-alpine AS frontend ARG REGISTRY_TOKEN WORKDIR /ui COPY ui/package.json ui/package-lock.json ui/.npmrc ./ -RUN echo "//gitea.siegeln.net/api/packages/cameleer/npm/:_authToken=${REGISTRY_TOKEN}" >> .npmrc && npm ci +RUN --mount=type=cache,target=/root/.npm echo "//gitea.siegeln.net/api/packages/cameleer/npm/:_authToken=${REGISTRY_TOKEN}" >> .npmrc && npm ci COPY ui/ . RUN npm run build @@ -14,11 +14,11 @@ FROM --platform=$BUILDPLATFORM eclipse-temurin:21-jdk-alpine AS build WORKDIR /build COPY .mvn/ .mvn/ COPY mvnw pom.xml ./ -# Cache deps — only re-downloaded when POM changes -RUN ./mvnw dependency:go-offline -B || true +# Cache deps — BuildKit cache mount persists across --no-cache builds +RUN --mount=type=cache,target=/root/.m2/repository ./mvnw dependency:go-offline -B || true COPY src/ src/ COPY --from=frontend /ui/dist/ src/main/resources/static/ -RUN ./mvnw package -DskipTests -B +RUN --mount=type=cache,target=/root/.m2/repository ./mvnw package -DskipTests -B # Runtime: target platform (amd64) FROM eclipse-temurin:21-jre-alpine diff --git a/ui/sign-in/Dockerfile b/ui/sign-in/Dockerfile index 442616a..60acef8 100644 --- a/ui/sign-in/Dockerfile +++ b/ui/sign-in/Dockerfile @@ -1,8 +1,10 @@ +# syntax=docker/dockerfile:1 + FROM --platform=$BUILDPLATFORM node:22-alpine AS build ARG REGISTRY_TOKEN WORKDIR /ui COPY package.json package-lock.json .npmrc ./ -RUN echo "//gitea.siegeln.net/api/packages/cameleer/npm/:_authToken=${REGISTRY_TOKEN}" >> .npmrc && npm ci +RUN --mount=type=cache,target=/root/.npm echo "//gitea.siegeln.net/api/packages/cameleer/npm/:_authToken=${REGISTRY_TOKEN}" >> .npmrc && npm ci COPY . . RUN npm run build