50 lines
2.1 KiB
Text
50 lines
2.1 KiB
Text
|
|
# ─────────────────────────────────────────────────────────────
|
||
|
|
# @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"]
|