1
+ # syntax=docker/dockerfile:1.3-labs
2
+ #
1
3
# Rust syntax target, either x86_64-unknown-linux-musl, aarch64-unknown-linux-musl, arm-unknown-linux-musleabi etc.
2
4
ARG RUST_TARGET="x86_64-unknown-linux-musl"
3
5
# Musl target, either x86_64-linux-musl, aarch64-linux-musl, arm-linux-musleabi, etc.
@@ -10,38 +12,50 @@ ARG RUST_TARGET
10
12
ARG MUSL_TARGET
11
13
ARG FEATURES
12
14
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
15
19
curl -sSf https://sh.rustup.rs | sh -s -- --profile minimal --default-toolchain nightly --component rust-src -y
20
+ EOT
16
21
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
45
59
46
60
WORKDIR /app
47
61
@@ -50,16 +64,20 @@ COPY ./Cargo.toml ./Cargo.toml
50
64
51
65
# We need a source directory so that it builds the dependencies and an empty
52
66
# 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
57
74
cargo build --release \
58
- --target="$RUST_TARGET" ; \
59
- else \
75
+ --target="$RUST_TARGET" ;
76
+ else
60
77
cargo build --release \
61
- --target="$RUST_TARGET" --features="$FEATURES" ; \
78
+ --target="$RUST_TARGET" --features="$FEATURES" ;
62
79
fi
80
+ EOT
63
81
64
82
# Now, delete the fake source and copy in the actual source. This allows us to
65
83
# have a previous compilation step for compiling the dependencies, while being
@@ -74,16 +92,20 @@ RUN source $HOME/.cargo/env && \
74
92
RUN rm -f target/$RUST_TARGET/release/deps/twilight_http_proxy*
75
93
COPY ./src ./src
76
94
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
79
100
cargo build --release \
80
- --target="$RUST_TARGET" ; \
81
- else \
101
+ --target="$RUST_TARGET"
102
+ else
82
103
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
86
107
actual-strip /twilight-http-proxy
108
+ EOT
87
109
88
110
FROM scratch
89
111
0 commit comments