| 123456789101112131415161718192021222324252627282930313233343536373839 |
- 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"]
|