/ Dockerfile
Dockerfile
 1  FROM rust:1 AS builder
 2  
 3  WORKDIR /src
 4  
 5  RUN apt-get update \
 6      && apt-get install -y protobuf-compiler
 7  
 8  # Dummy source to cache dependencies
 9  COPY Cargo.toml Cargo.lock .
10  RUN mkdir src && echo 'fn main() {}' > src/main.rs \
11      && RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target "$(uname -m)-unknown-linux-gnu" \
12      && rm -rf src
13  
14  # Actual source code
15  COPY . .
16  RUN RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target "$(uname -m)-unknown-linux-gnu"
17  RUN cp "/src/target/$(uname -m)-unknown-linux-gnu/release/worker" /usr/local/bin/worker
18  RUN cp "/src/target/$(uname -m)-unknown-linux-gnu/release/client" /usr/local/bin/client
19  
20  FROM nixos/nix:latest
21  
22  RUN echo "experimental-features = flakes nix-command" >> /etc/nix/nix.conf \
23      && echo "filter-syscalls = false" >> /etc/nix/nix.conf
24  
25  RUN nix-env -iA \
26      nixpkgs.docker \
27      nixpkgs.git \
28      nixpkgs.nixpacks
29  
30  COPY --from=builder /usr/local/bin/worker /usr/local/bin/worker
31  COPY --from=builder /usr/local/bin/client /usr/local/bin/client
32  
33  CMD [ "/usr/local/bin/worker" ]