# 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 worker workspace FROM turbo-cli AS builder WORKDIR /app COPY . . RUN turbo prune @midday/worker --docker --out-dir=out/worker # Installer stage - install deps and build FROM base AS installer WORKDIR /app # Install build dependencies for native modules RUN apt-get update && apt-get install -y \ python3 \ build-essential \ && rm -rf /var/lib/apt/lists/* # Copy package.json files from worker pruned workspace COPY --from=builder /app/out/worker/json/ . COPY bunfig.toml . # Install dependencies (before copying full source to maximize cache hits) RUN rm -f bun.lock RUN bun install # Copy full source from worker pruned workspace COPY --from=builder /app/out/worker/full/ . # Build engine types and workbench RUN bunx turbo run build --filter=@midday/engine --only RUN cd packages/workbench && bun run build # Runner stage - clean image FROM oven/bun:1.3.9 AS runner WORKDIR /app ENV NODE_ENV=production ENV PORT=8080 # Copy workspace from installer COPY --from=installer /app/node_modules ./node_modules COPY --from=installer /app/apps/worker ./apps/worker 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/worker EXPOSE 8080 ENTRYPOINT ["/app/entrypoint.sh"] CMD ["bun", "src/index.ts"]