FROM rust:1.93-trixie AS builder RUN apt-get update && apt-get install -y --no-install-recommends capnproto && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copy workspace manifests first for dependency caching. COPY Cargo.toml Cargo.lock ./ COPY crates/sq-grpc-interface/Cargo.toml crates/sq-grpc-interface/Cargo.toml COPY crates/sq-capnp-interface/Cargo.toml crates/sq-capnp-interface/Cargo.toml COPY crates/sq-capnp-interface/schema crates/sq-capnp-interface/schema COPY crates/sq-capnp-interface/build.rs crates/sq-capnp-interface/build.rs COPY crates/sq-models/Cargo.toml crates/sq-models/Cargo.toml COPY crates/sq-storage/Cargo.toml crates/sq-storage/Cargo.toml COPY crates/sq-cluster/Cargo.toml crates/sq-cluster/Cargo.toml COPY crates/sq-server/Cargo.toml crates/sq-server/Cargo.toml COPY crates/sq-sdk/Cargo.toml crates/sq-sdk/Cargo.toml COPY crates/sq-sim/Cargo.toml crates/sq-sim/Cargo.toml # Stub sources for dependency caching layer. RUN for d in crates/sq-grpc-interface crates/sq-capnp-interface crates/sq-models crates/sq-storage crates/sq-cluster crates/sq-sdk crates/sq-sim; do \ mkdir -p $d/src && echo "" > $d/src/lib.rs; \ done && \ mkdir -p crates/sq-server/src && echo "fn main() {}" > crates/sq-server/src/main.rs RUN cargo build --release -p sq-server 2>/dev/null || true # Copy real sources. COPY . . # Touch all source files so cargo rebuilds them. RUN find crates -name "*.rs" -exec touch {} + RUN cargo build --release -p sq-server FROM gcr.io/distroless/cc-debian13 COPY --from=builder /app/target/release/sq-server /usr/local/bin/sq-server EXPOSE 6060 6062 6064 ENTRYPOINT ["sq-server"] CMD ["serve"]