Skip to content

Commit ba4de4e

Browse files
committed
clean up dockerfile
1 parent 03c987e commit ba4de4e

File tree

1 file changed

+66
-44
lines changed

1 file changed

+66
-44
lines changed

Dockerfile

Lines changed: 66 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# syntax=docker/dockerfile:1.3-labs
2+
#
13
# Rust syntax target, either x86_64-unknown-linux-musl, aarch64-unknown-linux-musl, arm-unknown-linux-musleabi etc.
24
ARG RUST_TARGET="x86_64-unknown-linux-musl"
35
# Musl target, either x86_64-linux-musl, aarch64-linux-musl, arm-linux-musleabi, etc.
@@ -10,38 +12,50 @@ ARG RUST_TARGET
1012
ARG MUSL_TARGET
1113
ARG FEATURES
1214

13-
RUN apk upgrade && \
14-
apk add curl gcc musl-dev && \
15+
RUN <<EOT bash
16+
set -ex
17+
apk upgrade
18+
apk add curl gcc musl-dev
1519
curl -sSf https://sh.rustup.rs | sh -s -- --profile minimal --default-toolchain nightly --component rust-src -y
20+
EOT
1621

17-
RUN source $HOME/.cargo/env && \
18-
mkdir -p /app/.cargo && \
19-
if [ "$RUST_TARGET" != $(rustup target list --installed) ]; then \
20-
rustup target add $RUST_TARGET && \
21-
curl -L "https://musl.cc/$MUSL_TARGET-cross.tgz" -o /toolchain.tgz && \
22-
tar xf toolchain.tgz && \
23-
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-gcc" "/usr/bin/$MUSL_TARGET-gcc" && \
24-
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-ld" "/usr/bin/$MUSL_TARGET-ld" && \
25-
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-strip" "/usr/bin/actual-strip" && \
26-
GCC_VERSION=$($MUSL_TARGET-gcc --version | grep gcc | awk '{print $3}') && \
27-
echo -e "\
28-
[build]\n\
29-
rustflags = [\"-L\", \"native=/$MUSL_TARGET-cross/$MUSL_TARGET/lib\", \"-L\", \"native=/$MUSL_TARGET-cross/lib/gcc/$MUSL_TARGET/$GCC_VERSION/\", \"-l\", \"static=gcc\", \"-Clink-self-contained=y\", \"-Clinker-flavor=gcc\"]\n\
30-
[target.$RUST_TARGET]\n\
31-
linker = \"$MUSL_TARGET-gcc\"\n\
32-
[unstable]\n\
33-
build-std = [\"std\", \"panic_abort\"]\n\
34-
" > /app/.cargo/config; \
35-
else \
36-
echo "skipping toolchain as we are native" && \
37-
echo -e "\
38-
[build]\n\
39-
rustflags = [\"-L\", \"native=/usr/lib\"]\n\
40-
[unstable]\n\
41-
build-std = [\"std\", \"panic_abort\"]\n\
42-
" > /app/.cargo/config && \
43-
ln -s /usr/bin/strip /usr/bin/actual-strip; \
44-
fi
22+
RUN <<-EOT bash
23+
set -ex
24+
25+
source $HOME/.cargo/env
26+
mkdir -p /app/.cargo
27+
if [ "$RUST_TARGET" != $(rustup target list --installed) ]; then
28+
rustup target add $RUST_TARGET
29+
curl -L "https://musl.cc/$MUSL_TARGET-cross.tgz" -o /toolchain.tgz
30+
tar xf toolchain.tgz
31+
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-gcc" "/usr/bin/$MUSL_TARGET-gcc"
32+
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-ld" "/usr/bin/$MUSL_TARGET-ld"
33+
ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-strip" "/usr/bin/actual-strip"
34+
GCC_VERSION=$($MUSL_TARGET-gcc --version | grep gcc | awk '{print $3}')
35+
echo -e "\
36+
[build]\n\
37+
rustflags = [\"-L\", \"native=/$MUSL_TARGET-cross/$MUSL_TARGET/lib\", \
38+
\"-L\", \"native=/$MUSL_TARGET-cross/lib/gcc/$MUSL_TARGET/$GCC_VERSION/\", \
39+
\"-l\", \"static=gcc\", \
40+
\"-C\", \"link-self-contained=y\", \
41+
\"-C\", \"linker-flavor=gcc\"\
42+
]\n\
43+
[target.$RUST_TARGET]\n\
44+
linker = \"$MUSL_TARGET-gcc\"\n\
45+
[unstable]\n\
46+
build-std = [\"std\", \"panic_abort\"]\n\
47+
" > /app/.cargo/config;
48+
else
49+
echo "skipping toolchain as we are native"
50+
echo -e "\
51+
[build]\n\
52+
rustflags = [\"-L\", \"native=/usr/lib\"]\n\
53+
[unstable]\n\
54+
build-std = [\"std\", \"panic_abort\"]\n\
55+
" > /app/.cargo/config
56+
ln -s /usr/bin/strip /usr/bin/actual-strip;
57+
fi
58+
EOT
4559

4660
WORKDIR /app
4761

@@ -50,16 +64,20 @@ COPY ./Cargo.toml ./Cargo.toml
5064

5165
# We need a source directory so that it builds the dependencies and an empty
5266
# binary.
53-
RUN mkdir src/
54-
RUN echo 'fn main() {}' > ./src/main.rs
55-
RUN source $HOME/.cargo/env && \
56-
if [ "$FEATURES" == "" ]; then \
67+
RUN <<-EOT bash
68+
set -ex
69+
70+
mkdir src/
71+
echo 'fn main() {}' -> ./src/main.rs
72+
source $HOME/.cargo/env
73+
if [ "$FEATURES" == "" ]; then
5774
cargo build --release \
58-
--target="$RUST_TARGET"; \
59-
else \
75+
--target="$RUST_TARGET";
76+
else
6077
cargo build --release \
61-
--target="$RUST_TARGET" --features="$FEATURES"; \
78+
--target="$RUST_TARGET" --features="$FEATURES";
6279
fi
80+
EOT
6381

6482
# Now, delete the fake source and copy in the actual source. This allows us to
6583
# have a previous compilation step for compiling the dependencies, while being
@@ -74,16 +92,20 @@ RUN source $HOME/.cargo/env && \
7492
RUN rm -f target/$RUST_TARGET/release/deps/twilight_http_proxy*
7593
COPY ./src ./src
7694

77-
RUN source $HOME/.cargo/env && \
78-
if [ "$FEATURES" == "" ]; then \
95+
RUN <<-EOT bash
96+
set -ex
97+
98+
source $HOME/.cargo/env
99+
if [ "$FEATURES" == "" ]; then
79100
cargo build --release \
80-
--target="$RUST_TARGET"; \
81-
else \
101+
--target="$RUST_TARGET"
102+
else
82103
cargo build --release \
83-
--target="$RUST_TARGET" --features="$FEATURES"; \
84-
fi && \
85-
cp target/$RUST_TARGET/release/twilight-http-proxy /twilight-http-proxy && \
104+
--target="$RUST_TARGET" --features="$FEATURES"
105+
fi
106+
cp target/$RUST_TARGET/release/twilight-http-proxy /twilight-http-proxy
86107
actual-strip /twilight-http-proxy
108+
EOT
87109

88110
FROM scratch
89111

0 commit comments

Comments
 (0)