FROM oven/bun:1.3 AS base WORKDIR /app # Install dependencies FROM base AS deps # Copy root package files and lockfile first COPY package.json bun.lock ./ # Copy workspace structure - all package.json files needed for workspace resolution COPY packages ./packages COPY apps ./apps # Install all dependencies (bun will resolve workspace dependencies) # Note: We copy full directories but bun only needs package.json files for resolution RUN bun install --frozen-lockfile # Build stage FROM base AS build COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app/packages ./packages # Copy backend source COPY apps/backend ./apps/backend # Build backend WORKDIR /app/apps/backend RUN bun run build # Production stage FROM base AS production WORKDIR /app # Copy dependencies and built files COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app/packages ./packages # Copy source code (needed for migrations and tests) COPY --from=build /app/apps/backend/src ./apps/backend/src COPY --from=build /app/apps/backend/dist ./apps/backend/dist COPY --from=build /app/apps/backend/drizzle ./apps/backend/drizzle COPY --from=build /app/apps/backend/package.json ./apps/backend/ COPY --from=build /app/apps/backend/tsconfig.json ./apps/backend/ COPY --from=build /app/apps/backend/drizzle.config.ts ./apps/backend/ # Set working directory to backend WORKDIR /app/apps/backend # Set environment to production ENV NODE_ENV=production # Expose port EXPOSE 3000 # Default command (can be overridden) CMD ["bun", "run", "start"]