live-cli/build.earth
Austen Adler e9b30934ac
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is failing
Do not limit jobs
2022-12-25 18:29:43 -05:00

77 lines
2.8 KiB
Plaintext

VERSION 0.6
FROM rust:latest
ENV CARGO_HOME=/deps
ARG APP_NAME=live-cli
WORKDIR /work
deps:
COPY ./Cargo.toml ./Cargo.lock .
# 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:
# Linux
RUN rustup target add x86_64-unknown-linux-musl
RUN rustup target add i686-unknown-linux-musl
RUN rustup target add i686-unknown-linux-musl
RUN rustup target add aarch64-unknown-linux-musl
RUN rustup target add arm-unknown-linux-musleabi
RUN rustup target add armv7-unknown-linux-musleabi
# Windows
RUN rustup target add x86_64-pc-windows-gnu
RUN rustup target add i686-pc-windows-gnu
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu gdb-mingw-w64 gcc-mingw-w64-x86-64 gcc-mingw-w64-i686
RUN cargo install cargo-deb
SAVE IMAGE docker-wg:5000/rust-builder
build:
FROM +rust-builder
COPY +deps/deps /deps
ARG TOOLCHAIN
# Cache whatever dependency builds you can
COPY ./Cargo.toml ./Cargo.lock .
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 . .
RUN cargo build --offline --release --target "$TOOLCHAIN" `#--jobs 1`
ARG EXT
ARG STRIP_CMD
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 --build-arg TOOLCHAIN=x86_64-unknown-linux-musl --build-arg STRIP_CMD=x86_64-linux-gnu-strip +build
BUILD --build-arg TOOLCHAIN=i686-unknown-linux-musl --build-arg STRIP_CMD=x86_64-linux-gnu-strip +build
BUILD --build-arg TOOLCHAIN=aarch64-unknown-linux-musl --build-arg STRIP_CMD=aarch64-linux-gnu-strip +build
BUILD --build-arg TOOLCHAIN=arm-unknown-linux-musleabi --build-arg STRIP_CMD=arm-linux-gnueabi-strip +build
BUILD --build-arg TOOLCHAIN=armv7-unknown-linux-musleabi --build-arg STRIP_CMD=arm-linux-gnueabi-strip +build
BUILD --build-arg TOOLCHAIN=x86_64-pc-windows-gnu --build-arg STRIP_CMD= --build-arg EXT=.exe +build
BUILD --build-arg TOOLCHAIN=i686-pc-windows-gnu --build-arg STRIP_CMD= --build-arg EXT=.exe +build