| # Base image with Bun | |
| FROM oven/bun:1.3.9 AS base | |
| # Install turbo CLI globally | |
| FROM base AS turbo-cli | |
| RUN bun add -g turbo | |
| # Builder stage - prune API workspace | |
| FROM turbo-cli AS builder | |
| WORKDIR /app | |
| COPY . . | |
| RUN turbo prune @midday/api --docker | |
| # Installer stage - install deps and build | |
| FROM base AS installer | |
| WORKDIR /app | |
| # Install dependencies | |
| COPY --from=builder /app/out/json/ . | |
| COPY bunfig.toml . | |
| RUN bun install | |
| # Copy full source | |
| COPY --from=builder /app/out/full/ . | |
| # Build engine types | |
| RUN bunx turbo run build --filter=@midday/engine --only | |
| # Runner stage - clean image | |
| FROM oven/bun:1.3.9 AS runner | |
| WORKDIR /app | |
| ENV NODE_ENV=production | |
| ENV PORT=8080 | |
| # Copy only what's needed at runtime | |
| COPY --from=installer /app/node_modules ./node_modules | |
| COPY --from=installer /app/apps/api ./apps/api | |
| COPY --from=installer /app/apps/engine ./apps/engine | |
| COPY --from=installer /app/packages ./packages | |
| COPY --from=installer /app/package.json ./package.json | |
| # Carry the git SHA into the runtime container (stamped by CI before `railway up`) | |
| COPY --from=builder /app/.git-commit-sha /tmp/git-sha.txt | |
| COPY --from=builder /app/scripts/docker-entrypoint.sh /app/entrypoint.sh | |
| RUN chmod +x /app/entrypoint.sh | |
| WORKDIR /app/apps/api | |
| EXPOSE 8080 | |
| ENTRYPOINT ["/app/entrypoint.sh"] | |
| CMD ["bun", "src/index.ts"] | |