# Build
FROM ekidd/rust-musl-builder:1.48.0 as rust

ARG OUT_DIR=/tmp

# Cache deps
WORKDIR /app
RUN sudo chown -R rust:rust .
RUN USER=root cargo new server
WORKDIR /app/server

COPY Cargo.toml Cargo.lock ./

RUN sudo chown -R rust:rust .
RUN mkdir -p ./src/bin ./scss ./templates ./static \
 && touch ./scss/layout.scss \
 && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs

COPY src/build.rs ./src/build.rs

RUN cargo build --release
RUN rm -rf ./src ./scss ./templates

COPY src ./src/
COPY scss ./scss/
COPY templates ./templates/
COPY static ./static/

# Build for release
RUN cargo build --release --frozen

FROM alpine:3.12

# Copy resources
COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/release/picture-aggregator /app/picture-aggregator

RUN addgroup -g 1000 pictrs
RUN adduser -D -s /bin/sh -u 1000 -G pictrs pictrs
RUN chown pictrs:pictrs /app/picture-aggregator
USER pictrs
EXPOSE 8080
CMD ["/app/picture-aggregator"]
