FROM oven/bun:1.3-alpine AS frontend-build WORKDIR /src/frontend COPY frontend/package.json frontend/bun.lock ./ RUN bun install --frozen-lockfile COPY frontend/ ./ RUN bun run build FROM golang:1.23-alpine AS backend-build WORKDIR /src/backend COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ ./ COPY --from=frontend-build /src/frontend/dist /src/backend/web/dist RUN CGO_ENABLED=0 GOOS=linux go build -o /out/driveflow-allinone . FROM alpine:3.20 WORKDIR /app RUN addgroup -S app && adduser -S -G app -h /app app && \ mkdir -p /app/data && chown -R app:app /app COPY --from=backend-build /out/driveflow-allinone /app/driveflow-allinone USER app EXPOSE 8080 ENTRYPOINT ["/app/driveflow-allinone"]