FROM node:20-alpine AS base RUN corepack enable && corepack prepare pnpm@9.15.4 --activate WORKDIR /app # --- Install dependencies --- FROM base AS deps COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./ COPY packages/core/package.json packages/core/ COPY packages/weather-engine/package.json packages/weather-engine/ COPY packages/market-engine/package.json packages/market-engine/ COPY packages/strategy/package.json packages/strategy/ COPY packages/trading-engine/package.json packages/trading-engine/ COPY packages/dashboard/package.json packages/dashboard/ RUN pnpm install --frozen-lockfile # --- Copy source and generate Prisma client --- FROM deps AS source COPY . . RUN pnpm db:generate # --- Bot: build TS packages (no DB needed) --- FROM source AS bot-build RUN pnpm --filter @poly-weather/core build && \ pnpm --filter @poly-weather/weather-engine build && \ pnpm --filter @poly-weather/market-engine build && \ pnpm --filter @poly-weather/strategy build && \ pnpm --filter @poly-weather/trading-engine build # --- Bot runtime --- FROM bot-build AS bot ENV NODE_ENV=production EXPOSE 3001 CMD ["node", "packages/trading-engine/dist/main.js"] # --- Dashboard runtime (builds at startup since it needs DB access) --- FROM source AS dashboard ENV NODE_ENV=production EXPOSE 3000 CMD ["sh", "-c", "pnpm --filter @poly-weather/core build && pnpm --filter @poly-weather/dashboard build && pnpm --filter @poly-weather/dashboard start"]