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

@ -38,5 +38,67 @@ 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