/ docker / Dockerfile.amaru
Dockerfile.amaru
 1  FROM rust:bookworm AS rustbuilder
 2  
 3  RUN apt-get update -y \
 4      && apt-get install -y \
 5          libclang-dev \
 6          ca-certificates \
 7          libssl3 \
 8          llvm-14-runtime \
 9      && rm -rf /var/lib/apt/lists/*
10  
11  RUN mkdir -p /usr/src/amaru
12  WORKDIR /usr/src/amaru
13  
14  # Setup rust toolchain ───────────────────────────────────────────────────────┐
15  COPY rust-toolchain.toml /usr/src/amaru/rust-toolchain.toml
16  RUN rustup show
17  
18  # Fetch dependencies ─────────────────────────────────────────────────────────┐
19  COPY Cargo.toml Cargo.lock .cargo /usr/src/amaru/
20  
21  COPY crates/amaru/Cargo.toml /usr/src/amaru/crates/amaru/Cargo.toml
22  COPY crates/amaru/build.rs /usr/src/amaru/crates/amaru/build.rs
23  COPY crates/amaru-consensus/Cargo.toml /usr/src/amaru/crates/amaru-consensus/Cargo.toml
24  RUN mkdir -p crates/amaru-consensus/benches \
25      && touch crates/amaru-consensus/benches/headers_tree.rs
26  COPY crates/amaru-iter-borrow/Cargo.toml /usr/src/amaru/crates/amaru-iter-borrow/Cargo.toml
27  COPY crates/amaru-kernel/Cargo.toml /usr/src/amaru/crates/amaru-kernel/Cargo.toml
28  COPY crates/amaru-ledger/Cargo.toml /usr/src/amaru/crates/amaru-ledger/Cargo.toml
29  COPY crates/amaru-mempool/Cargo.toml /usr/src/amaru/crates/amaru-mempool/Cargo.toml
30  COPY crates/amaru-minicbor-extra/Cargo.toml /usr/src/amaru/crates/amaru-minicbor-extra/Cargo.toml
31  COPY crates/amaru-network/Cargo.toml /usr/src/amaru/crates/amaru-network/Cargo.toml
32  COPY crates/amaru-ouroboros/Cargo.toml /usr/src/amaru/crates/amaru-ouroboros/Cargo.toml
33  COPY crates/amaru-ouroboros-traits/Cargo.toml /usr/src/amaru/crates/amaru-ouroboros-traits/Cargo.toml
34  COPY crates/amaru-progress-bar/Cargo.toml /usr/src/amaru/crates/amaru-progress-bar/Cargo.toml
35  COPY crates/amaru-slot-arithmetic/Cargo.toml /usr/src/amaru/crates/amaru-slot-arithmetic/Cargo.toml
36  COPY crates/amaru-stores/Cargo.toml /usr/src/amaru/crates/amaru-stores/Cargo.toml
37  COPY crates/amaru-tracing-json/Cargo.toml /usr/src/amaru/crates/amaru-tracing-json/Cargo.toml
38  COPY crates/pure-stage/Cargo.toml /usr/src/amaru/crates/pure-stage/Cargo.toml
39  RUN find crates -mindepth 1 -maxdepth 1 -type d \
40      -exec mkdir -p {}/src \; \
41      -exec sh -c 'touch {}/src/lib.rs' \;
42  
43  COPY simulation/amaru-sim/Cargo.toml /usr/src/amaru/simulation/amaru-sim/Cargo.toml
44  
45  RUN cargo fetch
46  
47  # Compile dependencies ───────────────────────────────────────────────────────┐
48  RUN cargo build
49  
50  # Build amaru ────────────────────────────────────────────────────────────────┐
51  
52  COPY crates /usr/src/amaru/crates
53  RUN find crates -type f -name '*.rs' -exec touch {} + \
54      && cargo build
55  
56  COPY data /usr/src/amaru/data
57  COPY Makefile /usr/src/amaru/
58  
59  # Setup start script ──────────────────────────────────────────────────────────┐
60  COPY docker/start_amaru.sh /usr/local/bin/start_amaru.sh
61  RUN chmod +x /usr/local/bin/start_amaru.sh
62  
63  ENTRYPOINT ["start_amaru.sh"]