FROM node:20-alpine AS base RUN corepack enable && corepack prepare pnpm@9.15.4 --activate WORKDIR /app FROM base AS deps COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY apps/api/package.json apps/api/ RUN pnpm install --frozen-lockfile FROM deps AS builder RUN mkdir -p /home/node/.cache/node/corepack COPY apps/api/ apps/api/ RUN pnpm --filter @groombook/api build FROM node:20-alpine AS runner RUN corepack enable && corepack prepare pnpm@9.15.4 --activate WORKDIR /app ENV NODE_ENV=production COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY --from=builder /app/apps/api/package.json apps/api/ COPY --from=builder /app/apps/api/dist apps/api/dist RUN pnpm install --frozen-lockfile --prod EXPOSE 3000 RUN apk add --no-cache curl HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:3000/health || exit 1 CMD ["node", "apps/api/dist/index.js"] FROM builder AS migrate CMD ["pnpm", "--filter", "@groombook/api", "db:migrate"] FROM builder AS seed CMD ["pnpm", "--filter", "@groombook/api", "db:seed"] FROM builder AS reset CMD ["pnpm", "--filter", "@groombook/api", "db:reset"]