FROM rust:1.95.0-alpine3.22 AS builder WORKDIR /app # Cache dependencies by building a dummy project first COPY Cargo.toml Cargo.lock ./ RUN mkdir src && echo "fn main() {}" > src/main.rs RUN cargo build --release RUN rm -rf src # Copy real source code and build COPY . . # Touch the main file to ensure cargo sees it as newer than the dummy build RUN touch src/main.rs RUN cargo build --release # Small runtime image FROM alpine:3.22 WORKDIR /app COPY --from=builder /app/target/release/rhythm-backend /app/executable ENTRYPOINT ["/app/executable"]