diff --git a/build.earth b/build.earth index f11a2a2..a9e2e70 100644 --- a/build.earth +++ b/build.earth @@ -1,54 +1,77 @@ +VERSION 0.6 FROM rust:latest ENV CARGO_HOME=/deps -ARG APP_NAME=rpn_rs 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 + 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: - RUN rustup target add x86_64-unknown-linux-musl - RUN rustup target add x86_64-pc-windows-gnu - RUN rustup target add i686-pc-windows-gnu - 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 - RUN rustup target add i686-pc-windows-gnu - RUN rustup target add x86_64-unknown-linux-musl - RUN rustup target add i686-unknown-linux-musl + # 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 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 + SAVE IMAGE docker-wg:5000/rust-builder build: - FROM +rust-builder - COPY . . - COPY +deps/deps /deps + FROM +rust-builder - ARG TOOLCHAIN + COPY +deps/deps /deps - RUN cargo build --release --target "$TOOLCHAIN" - 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" - SAVE ARTIFACT target/$TOOLCHAIN/release/$APP_NAME$EXT AS LOCAL target/$TOOLCHAIN/release/$APP_NAME-$TOOLCHAIN$EXT - SAVE ARTIFACT target/$TOOLCHAIN/release/$APP_NAME$EXT.xz AS LOCAL target/release/$APP_NAME-$TOOLCHAIN$EXT.xz + 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 + ARG APP_NAME=rpn_rs + + 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 + 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