# ───────────────────────────────────────────────────────────── # @kanban/bridge — Multi-stage Docker build # Stage 1: install deps + build TypeScript # Stage 2: production runtime with node # ───────────────────────────────────────────────────────────── # ── Stage 1: Build ───────────────────────────────────────── FROM node:22-alpine AS build RUN corepack enable && corepack prepare pnpm@9.15.4 --activate WORKDIR /app # Copy workspace scaffolding COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY packages/contracts/package.json packages/contracts/ COPY packages/bridge/package.json packages/bridge/ # Install all dependencies (including dev for build) RUN pnpm install --frozen-lockfile # Copy source code COPY packages/contracts/ packages/contracts/ COPY packages/bridge/ packages/bridge/ # Build contracts first (bridge depends on it), then bridge RUN pnpm --filter @kanban/contracts build && \ pnpm --filter @kanban/bridge build # ── Stage 2: Runtime ─────────────────────────────────────── FROM node:22-alpine AS runtime RUN corepack enable && corepack prepare pnpm@9.15.4 --activate WORKDIR /app # Copy workspace scaffolding COPY --from=build /app/package.json ./ COPY --from=build /app/pnpm-lock.yaml ./ COPY --from=build /app/pnpm-workspace.yaml ./ # Copy built artifacts + package manifests COPY --from=build /app/packages/contracts/package.json packages/contracts/ COPY --from=build /app/packages/contracts/dist packages/contracts/dist/ COPY --from=build /app/packages/bridge/package.json packages/bridge/ COPY --from=build /app/packages/bridge/dist packages/bridge/dist/ # Install production dependencies only RUN pnpm install --frozen-lockfile --prod EXPOSE 3456 WORKDIR /app/packages/bridge CMD ["node", "dist/index.js"]