# Multi-stage build for Rust Linux container FROM rust:1.82-bookworm AS builder # Build dependencies (libudev for serialport on Linux) RUN apt-get update && apt-get install -y --no-install-recommends \ pkg-config \ libudev-dev \ build-essential \ ca-certificates \ tzdata \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Leverage docker layer caching for dependencies COPY Cargo.toml Cargo.lock ./ RUN mkdir -p src && echo 'fn main() { println!("cargo:rerun-if-changed=build.rs"); }' > src/main.rs RUN cargo build --release || true RUN rm -rf src # Copy full source and build project COPY . . RUN cargo build --release # (Statime installation removed; container runs only haci) # Runtime image FROM debian:bookworm-slim AS runtime RUN apt-get update && apt-get install -y --no-install-recommends \ libudev1 \ ca-certificates \ tzdata \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=builder /app/target/release/get-haci /usr/local/bin/get-haci COPY static ./static ENV RUST_LOG=info EXPOSE 8080 CMD ["get-haci"]