# E2E image: production frontend embedded + e2e-only seed/reset endpoints. # Built with -tags "prod e2e". NEVER deploy this image — it exposes /api/v1/test/*. # Stage 1: Frontend Build FROM --platform=$BUILDPLATFORM node:26-alpine@sha256:0b36e8c136b94cd4fcf02188228e76c31ad5872eef3fec8cbd2eee500cfd9e80 AS frontend WORKDIR /app ENV CI=true COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./ RUN npm install -g pnpm@11.9.0 && pnpm install --frozen-lockfile COPY frontend/ ./ RUN pnpm build # Stage 2: Backend Build (prod + e2e tags) FROM --platform=$BUILDPLATFORM golang:1.27-alpine@sha256:f92b6ef800e499660581efdabdf25d9d817a9d124eaf900924f0504e7e27e12d AS backend ARG VERSION=e2e ARG TARGETOS ARG TARGETARCH WORKDIR /app COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ ./ COPY --from=frontend /app/dist ./internal/static/dist RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -tags "prod e2e" \ -ldflags "-X github.com/kj187/jarvis/backend/internal/version.Version=${VERSION}" \ -o /jarvis ./cmd/jarvis # Stage 3: Final FROM gcr.io/distroless/static-debian12@sha256:d75cdd72874d4790092fcb1b058493ecf6bb5bf2b2b897045b00ff01d91843f2 USER nonroot:nonroot COPY --from=backend /jarvis /jarvis ENTRYPOINT ["/jarvis"]