|
1 | | -FROM node:22-slim AS build |
2 | | - |
| 1 | +FROM node:22-slim AS base |
| 2 | +RUN corepack enable && corepack prepare pnpm@9.0.0 --activate |
3 | 3 | WORKDIR /app |
4 | 4 |
|
5 | | -# Copy monorepo root files |
6 | | -COPY pnpm-lock.yaml pnpm-workspace.yaml package.json .npmrc* ./ |
7 | | - |
8 | | -# Copy workspace package manifests |
9 | | -COPY apps/watcher/package.json ./apps/watcher/ |
10 | | -COPY packages/shared/package.json ./packages/shared/ |
11 | | -COPY packages/backend/package.json ./packages/backend/ |
| 5 | +# Prune monorepo to only watcher's dependencies |
| 6 | +FROM base AS pruner |
| 7 | +COPY . . |
| 8 | +RUN pnpm dlx turbo prune @clawe/watcher --docker |
12 | 9 |
|
13 | | -# Install pnpm and fetch dependencies |
14 | | -RUN corepack enable && corepack prepare pnpm@latest --activate |
| 10 | +# Install dependencies (cached unless package.json/lockfile changes) |
| 11 | +FROM base AS deps |
| 12 | +COPY --from=pruner /app/out/json/ . |
15 | 13 | RUN pnpm install --frozen-lockfile |
16 | 14 |
|
17 | | -# Copy source and build |
18 | | -COPY packages/shared/ ./packages/shared/ |
19 | | -COPY packages/backend/ ./packages/backend/ |
20 | | -COPY apps/watcher/ ./apps/watcher/ |
| 15 | +# Build the app |
| 16 | +FROM base AS builder |
| 17 | +COPY --from=deps /app/ . |
| 18 | +COPY --from=pruner /app/out/full/ . |
21 | 19 | RUN pnpm build --filter=@clawe/watcher |
22 | 20 |
|
23 | | -# Deploy: extract watcher with all production deps into /app/deploy |
| 21 | +# Extract watcher with production deps only |
24 | 22 | RUN pnpm --filter=@clawe/watcher --prod deploy deploy |
25 | 23 |
|
26 | | -# --- Production image --- |
| 24 | +# Production runner |
27 | 25 | FROM node:22-slim |
28 | | - |
29 | 26 | WORKDIR /app |
30 | | - |
31 | | -COPY --from=build /app/deploy . |
32 | | - |
33 | 27 | ENV NODE_ENV=production |
34 | 28 |
|
| 29 | +COPY --from=builder /app/deploy . |
| 30 | + |
35 | 31 | CMD ["node", "dist/index.js"] |
0 commit comments