1+ FROM node:18 AS pruner
2+
3+ WORKDIR /triggerdotdev
4+
5+ COPY . .
6+ RUN npx turbo prune --scope=webapp --docker
7+ RUN find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
8+
9+ # Base strategy to have layer caching
10+ FROM node:18 AS base
11+ RUN apt-get update && apt-get install -y openssl
12+ WORKDIR /triggerdotdev
13+ COPY .gitignore .gitignore
14+ COPY --from=pruner /triggerdotdev/out/json/ .
15+ COPY --from=pruner /triggerdotdev/out/pnpm-lock.yaml ./pnpm-lock.yaml
16+ COPY --from=pruner /triggerdotdev/out/pnpm-workspace.yaml ./pnpm-workspace.yaml
17+
18+ # # Dev deps
19+ FROM base AS dev-deps
20+ WORKDIR /triggerdotdev
21+ # Corepack is used to install pnpm
22+ RUN corepack enable
23+ ENV NODE_ENV development
24+ RUN pnpm install --ignore-scripts --no-frozen-lockfile
25+
26+ # # Production deps
27+ FROM base AS production-deps
28+ WORKDIR /triggerdotdev
29+ # Corepack is used to install pnpm
30+ RUN corepack enable
31+ ENV NODE_ENV production
32+ RUN pnpm install --prod --no-frozen-lockfile
33+ COPY --from=pruner /triggerdotdev/packages/database/prisma/schema.prisma /triggerdotdev/packages/database/prisma/schema.prisma
34+ RUN pnpx prisma generate --schema /triggerdotdev/packages/database/prisma/schema.prisma
35+
36+ # # Builder (builds the webapp)
37+ FROM base AS builder
38+ WORKDIR /triggerdotdev
39+ # Corepack is used to install pnpm
40+ RUN corepack enable
41+ COPY --from=pruner /triggerdotdev/out/full/ .
42+ COPY --from=dev-deps /triggerdotdev/ .
43+ COPY turbo.json turbo.json
44+ COPY docker/scripts ./scripts
45+ RUN chmod +x ./scripts/entrypoint.sh
46+ RUN pnpm run generate
47+ RUN pnpm run build --filter=webapp...
48+
49+ # Runner
50+ FROM node:18 AS runner
51+ RUN apt-get update && apt-get install -y openssl
52+ WORKDIR /triggerdotdev
53+ RUN corepack enable
54+ ENV NODE_ENV production
55+
56+ COPY --from=pruner /triggerdotdev/out/full/ .
57+ COPY --from=production-deps /triggerdotdev .
58+ COPY --from=builder /triggerdotdev/apps/webapp/build/server.js ./apps/webapp/build/server.js
59+ COPY --from=builder /triggerdotdev/apps/webapp/build ./apps/webapp/build
60+ COPY --from=builder /triggerdotdev/apps/webapp/public ./apps/webapp/public
61+ COPY --from=builder /triggerdotdev/scripts ./scripts
62+
63+ CMD ["./scripts/entrypoint.sh" ]
0 commit comments