VERSION 0.6 docs-build: FROM ruby:latest WORKDIR /app RUN gem install coderay RUN gem install rouge RUN gem install asciidoctor # These dependencies are required for asciidoctor-mathematical RUN apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get -qq -y install bison flex libffi-dev libxml2-dev libgdk-pixbuf2.0-dev libcairo2-dev libpango1.0-dev fonts-lyx cmake RUN gem install asciidoctor-mathematical COPY ./README.adoc docs/index.adoc COPY --dir ./docs . RUN asciidoctor -r asciidoctor-mathematical -a mathematical-format=svg -a "!webfonts" -- ./docs/*.adoc RUN \ find docs -type f -not -iname '*.html' -not -iname '*.png' -not -iname '*.svg' -delete && \ : SAVE ARTIFACT ./docs docs: FROM golang:latest WORKDIR /app GIT CLONE https://github.com/tdewolff/minify/ minify/ RUN cd minify && go install ./cmd/minify COPY +docs-build/docs/ ./docs/ RUN minify --version RUN minify --sync --recursive --output output/ ./docs/ SAVE ARTIFACT output/* AS LOCAL build/docs/ rust-deps: FROM rust:latest ENV CARGO_HOME=/deps WORKDIR /work COPY ./web/Cargo.toml . # This is a binary program, expose a main.rs file RUN mkdir src && touch src/main.rs RUN cargo fetch SAVE ARTIFACT /deps rust-builder: FROM rust:latest ENV CARGO_HOME=/deps WORKDIR /work # Linux RUN rustup target add x86_64-unknown-linux-musl RUN cargo install cargo-deb SAVE IMAGE docker-wg:5000/rust-builder build: FROM +rust-builder COPY +rust-deps/deps /deps ARG TOOLCHAIN=x86_64-unknown-linux-musl # Cache whatever dependency builds you can COPY ./web/Cargo.toml . RUN \ mkdir src && touch src/lib.rs && \ cargo build --offline --release --target "$TOOLCHAIN" --jobs 1 && \ rm src/lib.rs && rmdir src && \ : # Actually build the program COPY ./web . RUN cargo build --offline --release --target "$TOOLCHAIN" --jobs 1 ARG EXT ARG STRIP_CMD=x86_64-linux-gnu-strip ARG APP_NAME=web RUN if [ "$STRIP_CMD" ]; then "$STRIP_CMD" "target/$TOOLCHAIN/release/$APP_NAME$EXT"; fi # --force for windows since multiple hardlinks RUN xz --force --keep "target/$TOOLCHAIN/release/$APP_NAME$EXT" # Also build a deb file IF [ -z "${TOOLCHAIN##*-linux-*}" ] RUN echo "Building deb for ${TOOLCHAIN}" RUN cargo deb --target "${TOOLCHAIN}" SAVE ARTIFACT target/$TOOLCHAIN/debian/$APP_NAME_*.deb AS LOCAL dist/ END # SAVE ARTIFACT target/$TOOLCHAIN/release/$APP_NAME$EXT AS LOCAL dist/ SAVE ARTIFACT target/$TOOLCHAIN/release/$APP_NAME$EXT.xz AS LOCAL dist/$APP_NAME-$TOOLCHAIN$EXT.xz all: BUILD +docs BUILD +build