# ── Stage 1 : build ────────────────────────────────────────────────────────── FROM node:20-alpine AS builder WORKDIR /workspace RUN corepack enable && corepack prepare pnpm@9.12.0 --activate # package.json seuls d'abord (layer cache pnpm install) COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./ COPY apps/api/package.json apps/api/ COPY packages/shared/package.json packages/shared/ COPY packages/db/package.json packages/db/ RUN pnpm install --frozen-lockfile # Sources complètes COPY . . # Build dans l'ordre des dépendances RUN pnpm --filter @ordinarthur-os/shared build RUN pnpm --filter @ordinarthur-os/db build RUN pnpm --filter @ordinarthur-os/api build # Deploy propre : pnpm résout les workspace packages compilés vers /deploy/api RUN pnpm --filter @ordinarthur-os/api deploy --prod /deploy/api # ── Stage 2 : runtime ──────────────────────────────────────────────────────── FROM node:20-alpine AS runtime WORKDIR /app ENV NODE_ENV=production # Deps de prod isolées (inclut @ordinarthur-os/shared+db compilés) COPY --from=builder /deploy/api/node_modules ./node_modules COPY --from=builder /deploy/api/package.json ./ # Code compilé de l'API COPY --from=builder /workspace/apps/api/dist ./dist # Migrations SQL (pour le job K3s migrate) COPY --from=builder /workspace/packages/db/migrations ./packages/db/migrations EXPOSE 3000 CMD ["node", "dist/main.js"]