# syntax=docker/dockerfile:1.7
#
# PayloadCMS production image. Built and run by docker-compose.
# We install pnpm globally via npm so we don't depend on corepack's
# (sometimes strict) version negotiation.

FROM node:20-alpine AS base
RUN npm install -g pnpm@9
WORKDIR /repo

# ---- deps -----------------------------------------------------------------
# Install ALL workspace deps at the root so the `apps/cms` package can
# resolve its siblings (@payloadcms/*, next, react, etc.) and the root
# tooling (prettier) is also available.
FROM base AS deps
COPY pnpm-workspace.yaml package.json ./
COPY apps/cms/package.json ./apps/cms/package.json
COPY apps/web/package.json ./apps/web/package.json
COPY pnpm-lock.yaml* ./
RUN if [ -f pnpm-lock.yaml ]; then \
      pnpm install --frozen-lockfile; \
    else \
      echo "No pnpm-lock.yaml found; running pnpm install (generates one)"; \
      pnpm install; \
    fi

# ---- build ----------------------------------------------------------------
FROM deps AS build
COPY apps/cms ./apps/cms
WORKDIR /repo/apps/cms
RUN pnpm run build

# ---- runtime --------------------------------------------------------------
FROM base AS runtime
ENV NODE_ENV=production
WORKDIR /repo/apps/cms
COPY --from=build /repo ./
EXPOSE 3000
CMD ["pnpm", "start"]
