FROM codycraven/sassc as css WORKDIR /usr/src/scss RUN mkdir dist WORKDIR /usr/src/scss/src RUN mkdir lib ARG BULMA_VERSION="0.9.4" RUN wget -qO- https://github.com/jgthms/bulma/releases/download/${BULMA_VERSION}/bulma-${BULMA_VERSION}.zip | unzip -d ./lib - COPY ./scss . RUN find . -name "*.scss" -type f | xargs -I % sh -c 'sassc % > ../dist/$(basename -- "%" .scss).css' FROM lukemathwalker/cargo-chef:latest-rust-1.65.0 as chef WORKDIR /usr/src/frontend FROM chef as planner 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- RUN rustup target add wasm32-unknown-unknown WORKDIR /usr/src/frontend COPY --from=planner /usr/src/frontend/recipe.json . COPY ./.cargo ./.cargo RUN cargo chef cook --release --recipe-path recipe.json COPY ./graphql ./graphql COPY ./src ./src RUN cargo build --release COPY --from=css /usr/src/scss/dist ./assets/css COPY ./index.html ./index.html 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 WORKDIR /tmp ARG BINARYEN_VERSION="110" RUN wget -qO- https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/binaryen-version_${BINARYEN_VERSION}-x86_64-linux.tar.gz | tar -xzf- RUN cp ./binaryen-version_${BINARYEN_VERSION}/bin/wasm-opt /usr/local/bin RUN rm -rf ./binaryen-version_${BINARYEN_VERSION} 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 docker.io/openresty/openresty:1.21.4.1-0-alpine as runner LABEL maintainer="Dominic Grimm " \ org.opencontainers.image.description="Frontend of Mentorenwahl" \ org.opencontainers.image.licenses="GPL-3.0" \ org.opencontainers.image.source="https://git.dergrimm.net/mentorenwahl/mentorenwahl" \ org.opencontainers.image.url="https://git.dergrimm.net/mentorenwahl/mentorenwahl" COPY ./nginx.conf /usr/local/openresty/nginx/conf/nginx.conf COPY --from=binaryen /usr/src/public /var/www/html