fix: use BUILDPLATFORM for native cross-compilation, remove broken cache mounts
Build and frontend stages now use --platform=$BUILDPLATFORM so Maven and Node run natively on the ARM64 CI runner instead of under QEMU emulation. Only the final JRE runtime stage targets amd64. Removed --mount=type=cache which doesn't persist across CI runs with buildx --push; the registry layer cache (--cache-from/--cache-to in CI) handles caching the dependency layer. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
13
Dockerfile
13
Dockerfile
@@ -1,5 +1,7 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM node:22-alpine AS frontend
|
||||
|
||||
# Frontend: runs natively on build host
|
||||
FROM --platform=$BUILDPLATFORM node:22-alpine AS frontend
|
||||
ARG REGISTRY_TOKEN
|
||||
WORKDIR /ui
|
||||
COPY ui/package.json ui/package-lock.json ui/.npmrc ./
|
||||
@@ -7,15 +9,18 @@ RUN echo "//gitea.siegeln.net/api/packages/cameleer/npm/:_authToken=${REGISTRY_T
|
||||
COPY ui/ .
|
||||
RUN npm run build
|
||||
|
||||
FROM eclipse-temurin:21-jdk-alpine AS build
|
||||
# Maven build: runs natively on build host (no QEMU emulation)
|
||||
FROM --platform=$BUILDPLATFORM eclipse-temurin:21-jdk-alpine AS build
|
||||
WORKDIR /build
|
||||
COPY .mvn/ .mvn/
|
||||
COPY mvnw pom.xml ./
|
||||
RUN --mount=type=cache,target=/root/.m2/repository ./mvnw dependency:go-offline -B
|
||||
# Cache deps — only re-downloaded when POM changes
|
||||
RUN ./mvnw dependency:go-offline -B || true
|
||||
COPY src/ src/
|
||||
COPY --from=frontend /src/main/resources/static/ src/main/resources/static/
|
||||
RUN --mount=type=cache,target=/root/.m2/repository ./mvnw package -DskipTests -B
|
||||
RUN ./mvnw package -DskipTests -B
|
||||
|
||||
# Runtime: target platform (amd64)
|
||||
FROM eclipse-temurin:21-jre-alpine
|
||||
WORKDIR /app
|
||||
RUN addgroup -S cameleer && adduser -S cameleer -G cameleer
|
||||
|
||||
Reference in New Issue
Block a user