FROM lukemathwalker/cargo-chef:latest-rust-1.65.0 as chef WORKDIR /usr/src/frontend FROM chef as planner WORKDIR /usr/src/frontend RUN mkdir src && touch src/main.rs COPY ./Cargo.toml . RUN cargo chef prepare --recipe-path recipe.json FROM chef as builder WORKDIR /usr/local/bin ARG TRUNK_VERSION="v0.16.0" RUN wget -qO- https://github.com/thedodd/trunk/releases/download/${TRUNK_VERSION}/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf- WORKDIR /usr/src/frontend RUN rustup target add wasm32-unknown-unknown COPY ./.cargo ./.cargo COPY --from=planner /usr/src/frontend/recipe.json . RUN cargo chef cook --release --recipe-path recipe.json COPY ./index.html . COPY ./graphql ./graphql COPY ./src ./src RUN trunk build --release FROM tdewolff/minify as public WORKDIR /usr/src/public COPY --from=builder /usr/src/frontend/dist . RUN minify . -r -o . FROM alpine as binaryen RUN apk add --no-cache binaryen WORKDIR /usr/src/public COPY --from=public /usr/src/public . RUN find . -name "*.wasm" -type f | xargs -I % wasm-opt % -o % -O --intrinsic-lowering -Oz FROM nginx:alpine as runner COPY ./nginx.conf /etc/nginx/nginx.conf COPY --from=binaryen /usr/src/public /var/www/html