FROM node:20-bookworm-slim AS base
RUN corepack enable && corepack prepare pnpm@9.1.0 --activate

FROM base AS deps
WORKDIR /repo
COPY package.json pnpm-workspace.yaml ./
COPY apps/web/package.json apps/web/package.json
COPY packages/types/package.json packages/types/package.json
RUN pnpm install --frozen-lockfile=false --filter @khub/web... --filter @khub/types

FROM deps AS build
WORKDIR /repo
COPY packages/types packages/types
COPY apps/web apps/web
COPY tsconfig.base.json tsconfig.base.json
ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm --filter @khub/types build
RUN pnpm --filter @khub/web build

FROM base AS runtime
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
COPY --from=build /repo/apps/web/.next/standalone ./
COPY --from=build /repo/apps/web/.next/static ./apps/web/.next/static
COPY --from=build /repo/apps/web/public ./apps/web/public

RUN groupadd --system app && useradd --system --gid app --home-dir /app --shell /usr/sbin/nologin app \
  && chown -R app:app /app
USER app

EXPOSE 3000
CMD ["node", "apps/web/server.js"]
