# syntax=docker/dockerfile:1.7
# UAT image for @karma/admin-console (apps/admin-console). Build context = monorepo root.
# VITE_* values are baked into the browser bundle at build time, so this image is
# PER ENVIRONMENT. Pass the env file as a BuildKit secret (not a build arg):
#   docker build -f deploy/Dockerfile.console \
#     --secret id=console_env,src=/opt/karma/console2/console.env \
#     -t karma/console2:$(git rev-parse --short HEAD) .
ARG NODE_VERSION=20.19.4
ARG PNPM_VERSION=9.15.2

FROM node:${NODE_VERSION}-bookworm-slim AS base
ARG PNPM_VERSION
ENV PNPM_HOME=/pnpm \
    PATH=/pnpm:$PATH \
    npm_config_store_dir=/pnpm/store \
    CI=true
RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
WORKDIR /repo

FROM base AS build
COPY . .
RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store \
    pnpm install --frozen-lockfile --filter "@karma/admin-console..."
RUN --mount=type=secret,id=console_env,required=true,target=/repo/apps/admin-console/.env \
    NODE_OPTIONS=--max-old-space-size=1536 pnpm --filter @karma/admin-console build

FROM base AS prod-deps
COPY . .
RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store \
    pnpm install --frozen-lockfile --prod --filter "@karma/admin-console..."

FROM node:${NODE_VERSION}-bookworm-slim AS runtime
ENV NODE_ENV=production
WORKDIR /repo/apps/admin-console
COPY --from=prod-deps /repo/node_modules /repo/node_modules
COPY --from=prod-deps /repo/packages /repo/packages
COPY --from=prod-deps /repo/apps/admin-console /repo/apps/admin-console
COPY --from=build /repo/apps/admin-console/build /repo/apps/admin-console/build
USER node
EXPOSE 3002
# "/" answers with a 302 redirect, so do not follow it; any status below 500 is healthy
HEALTHCHECK --interval=15s --timeout=5s --start-period=40s --retries=3 \
  CMD node -e "fetch('http://127.0.0.1:3002/',{redirect:'manual'}).then(r=>process.exit(r.status<500?0:1)).catch(()=>process.exit(1))"
# Runtime .env is mounted read-only at /repo/apps/admin-console/.env
CMD ["node", "--env-file=.env", "server.js"]
