# Optimized for Turborepo and Next.js Standalone
FROM node:22.17.0-alpine AS base

# Stage 1: Prune the workspace to only marketing-cms and its dependencies
FROM base AS builder
RUN apk update && apk add --no-cache libc6-compat
WORKDIR /app
RUN corepack enable pnpm
RUN npm install -g turbo
COPY . .
RUN turbo prune marketing-cms --docker

# Stage 2: Install dependencies and build the isolated project
FROM base AS installer
RUN apk update && apk add --no-cache libc6-compat
WORKDIR /app
RUN corepack enable pnpm

# Install dependencies separately to leverage Docker layer caching
COPY --from=builder /app/out/json/ .
COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml
RUN pnpm install --frozen-lockfile

# Copy the actual code and build
COPY --from=builder /app/out/full/ .
RUN pnpm run build:marketing-cms

# Stage 3: Runner stage to run the production build
FROM base AS runner
WORKDIR /app

ENV NODE_ENV=production

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
USER nextjs

COPY --from=installer /app/apps/marketing-cms/next.config.ts .
COPY --from=installer /app/apps/marketing-cms/package.json .

# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=installer --chown=nextjs:nodejs /app/apps/marketing-cms/.next/standalone ./
COPY --from=installer --chown=nextjs:nodejs /app/apps/marketing-cms/.next/static ./apps/marketing-cms/.next/static
COPY --from=installer --chown=nextjs:nodejs /app/apps/marketing-cms/public ./apps/marketing-cms/public

EXPOSE 3000
ENV PORT=3000

# server.js is created by next build from the standalone output in turborepo
CMD HOSTNAME="0.0.0.0" node apps/marketing-cms/server.js

