|
1 | | -FROM debian:bookworm AS chef |
2 | | -WORKDIR /src/ |
3 | | -RUN apt-get update && apt-get install -y curl git clang mold libssl-dev pkg-config git && apt-get clean |
4 | | -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
5 | | -ENV PATH="$PATH:/root/.cargo/bin" |
6 | | -RUN rustup component add clippy rustfmt |
7 | | -# configure to use the fast linker |
8 | | -RUN echo "\ |
9 | | -[build]\n \ |
10 | | -target = \"$(rustc -Vv | grep host | awk '{print $2}')\"\n \ |
11 | | -[target.$(rustc -Vv | grep host | awk '{print $2}')]\n \ |
12 | | -linker = \"clang\"\n \ |
13 | | -rustflags = [\"-C\", \"link-arg=-fuse-ld=/usr/bin/mold\"]\n \ |
14 | | -" > ~/.cargo/config.toml |
15 | | - |
16 | | -RUN cargo install cargo-chef |
17 | | - |
18 | | -FROM chef AS localdev |
19 | | -# envs/tools suitable for running the stack locally |
20 | | -ENV RUST_BACKTRACE=1 |
21 | | -RUN cargo install cargo-watch |
22 | | - |
23 | | -FROM chef AS planner |
24 | | -COPY . . |
25 | | -RUN cargo chef prepare --recipe-path recipe.json |
26 | | - |
27 | 1 | FROM docker.io/flyway/flyway:10.7.1 AS migrations |
28 | 2 | COPY database/ /flyway/ |
29 | 3 | CMD ["migrate"] |
30 | 4 |
|
31 | | -FROM chef AS builder |
32 | | -COPY --from=planner /src/recipe.json recipe.json |
33 | | -# --mount=type=cache,target=./target,sharing=locked |
34 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo chef cook --release --recipe-path recipe.json |
| 5 | +FROM docker.io/rust:1-slim-bookworm AS cargo-build |
| 6 | +WORKDIR /src/ |
35 | 7 |
|
36 | | -# Copy only the library crates for now |
37 | | -# --mount=type=cache,target=./target,sharing=locked |
38 | | -COPY Cargo.toml Cargo.lock ./ |
39 | | -COPY ./crates/app-data/ ./crates/app-data |
40 | | -COPY ./crates/database/ ./crates/database |
41 | | -COPY ./crates/bytes-hex/ ./crates/bytes-hex |
42 | | -COPY ./crates/contracts/ ./crates/contracts |
43 | | -COPY ./crates/shared/ ./crates/shared |
44 | | -COPY ./crates/number/ ./crates/number |
45 | | -COPY ./crates/model/ ./crates/model |
46 | | -COPY ./crates/rate-limit/ ./crates/rate-limit |
47 | | -COPY ./crates/chain/ ./crates/chain |
48 | | -COPY ./crates/ethrpc/ ./crates/ethrpc |
49 | | -COPY ./crates/observe/ ./crates/observe |
50 | | -COPY ./crates/order-validation/ ./crates/order-validation |
51 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package shared |
52 | | -COPY ./crates/solver/ ./crates/solver |
53 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package solver |
| 8 | +# Install dependencies |
| 9 | +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked apt-get update && \ |
| 10 | + apt-get install -y git libssl-dev pkg-config |
| 11 | +# Install Rust toolchain |
| 12 | +RUN rustup install stable && rustup default stable |
54 | 13 |
|
55 | | -# Create an base image for all the binaries |
56 | | -FROM docker.io/debian:bookworm-slim AS base |
| 14 | +# Copy and Build Code |
| 15 | +COPY . . |
| 16 | +RUN --mount=type=cache,target=/usr/local/cargo/registry --mount=type=cache,target=/src/target \ |
| 17 | + CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release && \ |
| 18 | + cp target/release/alerter / && \ |
| 19 | + cp target/release/autopilot / && \ |
| 20 | + cp target/release/driver / && \ |
| 21 | + cp target/release/orderbook / && \ |
| 22 | + cp target/release/refunder / && \ |
| 23 | + cp target/release/solvers / |
| 24 | + |
| 25 | +# Create an intermediate image to extract the binaries |
| 26 | +FROM docker.io/debian:bookworm-slim AS intermediate |
57 | 27 | RUN --mount=type=cache,target=/var/cache/apt,sharing=locked apt-get update && \ |
58 | 28 | apt-get install -y ca-certificates tini gettext-base && \ |
59 | 29 | apt-get clean |
60 | 30 |
|
61 | | -FROM builder AS alerter-build |
62 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package alerter |
63 | | - |
64 | | -FROM base AS alerter |
65 | | -COPY --from=alerter-build /src/target/release/alerter /usr/local/bin/alerter |
| 31 | +FROM intermediate AS alerter |
| 32 | +COPY --from=cargo-build /alerter /usr/local/bin/alerter |
66 | 33 | ENTRYPOINT [ "alerter" ] |
67 | 34 |
|
68 | | -FROM builder AS autopilot-build |
69 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package autopilot |
70 | | - |
71 | | -FROM base AS autopilot |
72 | | -COPY ./crates/autopilot/ ./crates/autopilot |
73 | | -COPY --from=autopilot-build /src/target/release/autopilot /usr/local/bin/autopilot |
| 35 | +FROM intermediate AS autopilot |
| 36 | +COPY --from=cargo-build /autopilot /usr/local/bin/autopilot |
74 | 37 | ENTRYPOINT [ "autopilot" ] |
75 | 38 |
|
76 | | -FROM builder AS driver-build |
77 | | -COPY ./crates/driver/ ./crates/driver |
78 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package driver |
79 | | - |
80 | | -FROM base AS driver |
81 | | -COPY --from=driver-build /src/target/release/driver /usr/local/bin/driver |
| 39 | +FROM intermediate AS driver |
| 40 | +COPY --from=cargo-build /driver /usr/local/bin/driver |
82 | 41 | ENTRYPOINT [ "driver" ] |
83 | 42 |
|
84 | | -FROM builder AS orderbook-build |
85 | | -COPY ./crates/orderbook/ ./crates/orderbook |
86 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package orderbook |
87 | | - |
88 | | -FROM base AS orderbook |
89 | | -COPY --from=orderbook-build /src/target/release/orderbook /usr/local/bin/orderbook |
| 43 | +FROM intermediate AS orderbook |
| 44 | +COPY --from=cargo-build /orderbook /usr/local/bin/orderbook |
90 | 45 | ENTRYPOINT [ "orderbook" ] |
91 | 46 |
|
92 | | -FROM builder AS refunder-build |
93 | | -COPY ./crates/refunder/ ./crates/refunder |
94 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package refunder |
95 | | - |
96 | | -FROM base AS refunder |
97 | | -COPY --from=refunder-build /src/target/release/refunder /usr/local/bin/refunder |
| 47 | +FROM intermediate AS refunder |
| 48 | +COPY --from=cargo-build /refunder /usr/local/bin/refunder |
98 | 49 | ENTRYPOINT [ "refunder" ] |
99 | 50 |
|
100 | | -FROM builder AS solvers-build |
101 | | -COPY ./crates/solvers/ ./crates/solvers |
102 | | -RUN CARGO_PROFILE_RELEASE_DEBUG=1 cargo build --release --package solvers |
103 | | - |
104 | | -FROM base AS solvers |
105 | | -COPY --from=solvers-build /src/target/release/solvers /usr/local/bin/solvers |
| 51 | +FROM intermediate AS solvers |
| 52 | +COPY --from=cargo-build /solvers /usr/local/bin/solvers |
106 | 53 | ENTRYPOINT [ "solvers" ] |
107 | 54 |
|
108 | 55 | # Extract Binary |
109 | | -FROM base |
| 56 | +FROM intermediate |
110 | 57 | RUN apt-get update && \ |
111 | 58 | apt-get install -y build-essential cmake git zlib1g-dev libelf-dev libdw-dev libboost-dev libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libunwind-dev libzstd-dev git |
112 | 59 | RUN git clone https://invent.kde.org/sdk/heaptrack.git /heaptrack && \ |
|
0 commit comments