# Use the official Bun image FROM oven/bun:1 AS base WORKDIR /usr/src/app # Install dependencies into temp directories # This will cache them and speed up future builds FROM base AS install # Install dependencies for both backend and frontend COPY backend/package.json backend/bun.lockb /temp/dev/backend/ COPY frontend/package.json frontend/bun.lockb /temp/dev/frontend/ RUN cd /temp/dev/backend && bun install RUN cd /temp/dev/frontend && bun install # Install with --production (exclude devDependencies) RUN mkdir -p /temp/prod/backend /temp/prod/frontend COPY backend/package.json backend/bun.lockb /temp/prod/backend/ COPY frontend/package.json frontend/bun.lockb /temp/prod/frontend/ RUN cd /temp/prod/backend && bun install RUN cd /temp/prod/frontend && bun install # Build the frontend project FROM install AS build-frontend WORKDIR /usr/src/app/frontend COPY --from=install /temp/dev/frontend/node_modules node_modules COPY frontend/ . RUN bun run build # Prepare for final release FROM base AS release WORKDIR /usr/src/app # Copy production dependencies COPY --from=install /temp/prod/backend/node_modules backend/node_modules COPY --from=install /temp/prod/frontend/node_modules frontend/node_modules # Copy backend source code COPY backend/ backend/ # Copy the built frontend assets into the backend public directory COPY --from=build-frontend /usr/src/app/frontend/dist backend/public # Set the entrypoint to run the backend server USER bun EXPOSE 3000/tcp ENTRYPOINT [ "bun", "run", "backend/src/server.ts" ]