Start work on building final docker image

This commit is contained in:
Austen Adler 2023-03-11 17:50:23 -05:00
parent 11b711f878
commit f5d166fdad

View File

@ -1,42 +1,104 @@
VERSION 0.6 VERSION 0.6
docs-build: docs-build:
FROM ruby:latest FROM ruby:latest
WORKDIR /app WORKDIR /app
RUN gem install coderay RUN gem install coderay
RUN gem install rouge RUN gem install rouge
RUN gem install asciidoctor RUN gem install asciidoctor
# These dependencies are required for asciidoctor-mathematical # These dependencies are required for asciidoctor-mathematical
RUN apt-get update 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 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 RUN gem install asciidoctor-mathematical
COPY ./README.adoc docs/index.adoc COPY ./README.adoc docs/index.adoc
COPY --dir ./docs . COPY --dir ./docs .
RUN asciidoctor -r asciidoctor-mathematical -a mathematical-format=svg -a "!webfonts" -- ./docs/*.adoc RUN asciidoctor -r asciidoctor-mathematical -a mathematical-format=svg -a "!webfonts" -- ./docs/*.adoc
RUN \ RUN \
find docs -type f -not -iname '*.html' -not -iname '*.png' -not -iname '*.svg' -delete && \ find docs -type f -not -iname '*.html' -not -iname '*.png' -not -iname '*.svg' -delete && \
: :
SAVE ARTIFACT ./docs SAVE ARTIFACT ./docs
docs: docs:
FROM golang:latest FROM golang:latest
WORKDIR /app WORKDIR /app
GIT CLONE https://github.com/tdewolff/minify/ minify/ GIT CLONE https://github.com/tdewolff/minify/ minify/
RUN cd minify && go install ./cmd/minify RUN cd minify && go install ./cmd/minify
COPY +docs-build/docs/ ./docs/ COPY +docs-build/docs/ ./docs/
RUN minify --version RUN minify --version
RUN minify --sync --recursive --output output/ ./docs/ RUN minify --sync --recursive --output output/ ./docs/
SAVE ARTIFACT output/* AS LOCAL build/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: all:
BUILD +docs BUILD +docs
BUILD +build