From 0f5c3ccd7ad5c4d47503661de56cb9365b6dc205 Mon Sep 17 00:00:00 2001 From: Valdemar Erk Date: Tue, 12 Mar 2024 12:56:09 +0100 Subject: [PATCH] feat(docker): Rewrite dockerfile --- Dockerfile | 126 +++++++++++++++++++++++------------------------------ 1 file changed, 55 insertions(+), 71 deletions(-) diff --git a/Dockerfile b/Dockerfile index f5fb25d..5801e07 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,88 +5,72 @@ ARG MUSL_TARGET="x86_64-linux-musl" # The crate features to build this with ARG FEATURES="" -FROM --platform=$BUILDPLATFORM docker.io/alpine:latest as build +FROM --platform=$BUILDPLATFORM rust:latest AS chef ARG RUST_TARGET ARG MUSL_TARGET ARG FEATURES -RUN apk upgrade && \ - apk add curl gcc musl-dev && \ - curl -sSf https://sh.rustup.rs | sh -s -- --profile minimal --default-toolchain nightly --component rust-src -y - -RUN source $HOME/.cargo/env && \ - mkdir -p /app/.cargo && \ - if [ "$RUST_TARGET" != $(rustup target list --installed) ]; then \ - rustup target add $RUST_TARGET && \ - curl -L "https://musl.cc/$MUSL_TARGET-cross.tgz" -o /toolchain.tgz && \ - tar xf toolchain.tgz && \ - ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-gcc" "/usr/bin/$MUSL_TARGET-gcc" && \ - ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-ld" "/usr/bin/$MUSL_TARGET-ld" && \ - ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-strip" "/usr/bin/actual-strip" && \ - GCC_VERSION=$($MUSL_TARGET-gcc --version | grep gcc | awk '{print $3}') && \ - echo -e "\ -[build]\n\ -rustflags = [\"-L\", \"native=/$MUSL_TARGET-cross/$MUSL_TARGET/lib\", \"-L\", \"native=/$MUSL_TARGET-cross/lib/gcc/$MUSL_TARGET/$GCC_VERSION/\", \"-l\", \"static=gcc\", \"-Z\", \"gcc-ld=lld\"]\n\ -[target.$RUST_TARGET]\n\ -linker = \"$MUSL_TARGET-gcc\"\n\ -[unstable]\n\ -build-std = [\"std\", \"panic_abort\"]\n\ -" > /app/.cargo/config; \ - else \ - echo "skipping toolchain as we are native" && \ - echo -e "\ -[build]\n\ -rustflags = [\"-L\", \"native=/usr/lib\"]\n\ -[unstable]\n\ -build-std = [\"std\", \"panic_abort\"]\n\ -" > /app/.cargo/config && \ - ln -s /usr/bin/strip /usr/bin/actual-strip; \ - fi +RUN < ./src/main.rs -RUN source $HOME/.cargo/env && \ - if [ "$FEATURES" == "" ]; then \ - cargo build --release \ - --target="$RUST_TARGET"; \ - else \ - cargo build --release \ - --target="$RUST_TARGET" --features="$FEATURES"; \ +FROM chef AS planner +COPY . . +RUN cargo chef prepare --recipe-path recipe.json + +FROM chef AS builder +COPY --from=planner /app/recipe.json recipe.json +RUN <