From 26e4ec32718ccbbc7006ee23f79d2e996b75e2e4 Mon Sep 17 00:00:00 2001 From: shay7sev Date: Mon, 20 Jul 2026 15:59:39 +0800 Subject: [PATCH] build(api): cache cargo dependencies with ustc mirror --- server/.cargo/config.toml | 8 ++++++++ server/Dockerfile | 24 +++++++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 server/.cargo/config.toml diff --git a/server/.cargo/config.toml b/server/.cargo/config.toml new file mode 100644 index 0000000..1018eab --- /dev/null +++ b/server/.cargo/config.toml @@ -0,0 +1,8 @@ +[source.crates-io] +replace-with = "ustc-sparse" + +[source.ustc-sparse] +registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/" + +[net] +retry = 3 diff --git a/server/Dockerfile b/server/Dockerfile index c336013..eec5c6b 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,15 +1,29 @@ +# syntax=docker/dockerfile:1 + FROM rust:1.85-bookworm AS builder WORKDIR /build +COPY .cargo ./.cargo COPY Cargo.toml Cargo.lock ./ COPY migrations ./migrations COPY src ./src -RUN cargo build --locked --release \ +RUN --mount=type=cache,id=teaching-feedback-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ + --mount=type=cache,id=teaching-feedback-cargo-git,target=/usr/local/cargo/git,sharing=locked \ + cargo fetch --locked + +RUN --mount=type=cache,id=teaching-feedback-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \ + --mount=type=cache,id=teaching-feedback-cargo-git,target=/usr/local/cargo/git,sharing=locked \ + --mount=type=cache,id=teaching-feedback-cargo-target,target=/build/target,sharing=locked \ + cargo build --locked --release \ --bin teaching-feedback-api \ --bin migrate \ - --bin migrate-user-owner + --bin migrate-user-owner \ + && mkdir -p /build/output \ + && cp target/release/teaching-feedback-api /build/output/teaching-feedback-api \ + && cp target/release/migrate /build/output/migrate \ + && cp target/release/migrate-user-owner /build/output/migrate-user-owner FROM debian:bookworm-slim AS runtime @@ -23,9 +37,9 @@ RUN sed -i "s|http://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/ && useradd --system --uid 10001 --gid app --home-dir /nonexistent --shell /usr/sbin/nologin app \ && install -d -o app -g app /data/audio -COPY --from=builder /build/target/release/teaching-feedback-api /usr/local/bin/teaching-feedback-api -COPY --from=builder /build/target/release/migrate /usr/local/bin/migrate -COPY --from=builder /build/target/release/migrate-user-owner /usr/local/bin/migrate-user-owner +COPY --from=builder /build/output/teaching-feedback-api /usr/local/bin/teaching-feedback-api +COPY --from=builder /build/output/migrate /usr/local/bin/migrate +COPY --from=builder /build/output/migrate-user-owner /usr/local/bin/migrate-user-owner ENV HOST=0.0.0.0 \ PORT=8080 \