FROM codycraven/sassc:latest as css WORKDIR /usr/src/scss RUN mkdir dist WORKDIR /usr/src/scss/src COPY ./scss . RUN find . -name "*.scss" -type f | xargs -I % sh -c 'sassc % > ../dist/$(basename -- "%" .scss).css' FROM tdewolff/minify:latest as static WORKDIR /usr/src/static COPY --from=css /usr/src/scss/dist ./css RUN minify . -r -o . FROM tdewolff/minify:latest as templates WORKDIR /usr/src/templates COPY ./templates . RUN minify . -r -o . FROM docker.io/lukemathwalker/cargo-chef:latest-rust-1.67 as chef FROM chef as diesel RUN cargo install diesel_cli --no-default-features --features postgres FROM chef as planner WORKDIR /usr/src/backend RUN mkdir src && touch src/main.rs COPY ./Cargo.toml ./Cargo.lock ./ RUN cargo chef prepare --recipe-path recipe.json FROM chef as builder WORKDIR /usr/src/backend COPY --from=planner /usr/src/backend/recipe.json . RUN cargo chef cook --release --recipe-path recipe.json RUN rm -rf ./src COPY ./build.rs . COPY --from=static /usr/src/static ./static COPY --from=templates /usr/src/templates ./templates COPY ./src ./src RUN cargo build --release FROM docker.io/debian:bullseye-slim as runner LABEL maintainer="Dominic Grimm " \ org.opencontainers.image.description="Personal blog backend" \ org.opencontainers.image.licenses="MIT" \ org.opencontainers.image.source="https://git.dergrimm.net/dergrimm/blog" \ org.opencontainers.image.url="https://git.dergrimm.net/dergrimm/blog" RUN apt update RUN apt install -y libpq5 RUN apt-get clean RUN apt-get autoremove -y RUN rm -rf /var/lib/{apt,dpkg,cache,log}/ WORKDIR /usr/local/bin COPY --from=diesel /usr/local/cargo/bin/diesel . WORKDIR /usr/src/backend COPY ./run.sh . RUN chmod +x ./run.sh COPY ./migrations ./migrations COPY --from=builder /usr/src/backend/target/release/backend /usr/src/backend/target/release/blogctl ./bin/ ENTRYPOINT [ "./run.sh" ]