FROM node:24.15.0 AS base RUN corepack enable && corepack prepare pnpm@latest-11 --activate WORKDIR /app FROM base AS deps COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./ COPY apps/edr-freight-api/package.json ./apps/edr-freight-api/ COPY apps/edr-passenger-api/package.json ./apps/edr-passenger-api/ COPY apps/edr-freight-web/backoffice/package.json ./apps/edr-freight-web/backoffice/ COPY apps/edr-freight-web/portal/package.json ./apps/edr-freight-web/portal/ COPY apps/edr-passenger-web/backoffice/package.json ./apps/edr-passenger-web/backoffice/ COPY apps/edr-passenger-web/portal/package.json ./apps/edr-passenger-web/portal/ COPY packages/api-common/package.json packages/api-common/ COPY packages/config/eslint-config/package.json packages/config/eslint-config/ COPY packages/config/prettier-config/package.json packages/config/prettier-config/ COPY packages/config/tsconfig/package.json packages/config/tsconfig/ COPY packages/types/package.json packages/types/ COPY packages/ui-common/package.json packages/ui-common/ RUN --mount=type=cache,id=pnpm,target=/pnpm/store\ --mount=type=secret,id=npmrc,target=./.npmrc \ pnpm install --frozen-lockfile FROM deps AS build COPY . . RUN pnpm run build --log-order grouped FROM base AS freight-api # RUN corepack enable && corepack prepare pnpm@9.12.0 --activate WORKDIR /app/apps/edr-freight-api ENV NODE_ENV=production COPY --from=deps /app/node_modules ./../../node_modules COPY --from=deps /app/apps/edr-freight-api/node_modules ./node_modules COPY --from=build /app/apps/edr-freight-api/dist ./dist COPY --from=build /app/apps/edr-freight-api/package.json ./package.json COPY --from=build /app/packages ./../../packages EXPOSE 3001 CMD ["node", "dist/main.js"] FROM base AS passenger-api RUN apt-get update -y && apt-get install -y openssl # RUN corepack enable && corepack prepare pnpm@9.12.0 --activate WORKDIR /app/apps/edr-passenger-api ENV NODE_ENV=production # Use build-stage node_modules (not deps): `pnpm run build` runs `prisma generate`, which # writes the real @prisma/client (enums, types). deps never runs generate, so @IsEnum(ServiceClass) # and similar would see undefined at runtime if we copied deps only. COPY --from=build /app/node_modules ./../../node_modules COPY --from=build /app/apps/edr-passenger-api/node_modules ./node_modules COPY --from=build /app/apps/edr-passenger-api/dist ./dist COPY --from=build /app/apps/edr-passenger-api/package.json ./package.json COPY --from=build /app/packages ./../../packages EXPOSE 3001 CMD ["node", "dist/main.js"] FROM build as passenger-migration WORKDIR /app/apps/edr-passenger-api CMD pnpm run prisma:migrate && pnpm run prisma:seed FROM nginx:1.27-alpine AS freight-web-portal COPY --from=build /app/apps/edr-freight-web/portal/dist /usr/share/nginx/html EXPOSE 5173 CMD ["nginx", "-g", "daemon off;"] FROM nginx:1.27-alpine AS freight-web-backoffice COPY --from=build /app/apps/edr-freight-web/backoffice/dist /usr/share/nginx/html EXPOSE 5173 CMD ["nginx", "-g", "daemon off;"]