From 500a8f7ecddc2ba1923a7623933cacb6d60bf37f Mon Sep 17 00:00:00 2001 From: 237899745 <237899745@users.noreply.git.workyai.cn> Date: Sat, 25 Jul 2026 21:52:20 +0800 Subject: [PATCH] fix: make migration checksums reproducible --- .gitattributes | 1 + build.rs | 3 +++ docker/Dockerfile | 7 ++++++- 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .gitattributes create mode 100644 build.rs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1b85546 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +migrations/*.sql text eol=crlf diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..3a8149e --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rerun-if-changed=migrations"); +} diff --git a/docker/Dockerfile b/docker/Dockerfile index 4916b4c..3260f1a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -17,11 +17,16 @@ RUN sed -i "s|http://deb.debian.org/debian|${DEBIAN_MIRROR%/}|g" /etc/apt/source && rm -rf /var/lib/apt/lists/* COPY Cargo.toml Cargo.lock ./ +COPY build.rs ./ COPY .cargo ./.cargo COPY src ./src COPY migrations ./migrations COPY templates ./templates +# SQLx hashes migration bytes at compile time. Production was initialized from +# CRLF migrations, so make every build reproduce those historical checksums. +RUN sed -i 's/\r$//; s/$/\r/' migrations/*.sql + RUN --mount=type=cache,target=/usr/local/cargo/registry,sharing=locked \ --mount=type=cache,target=/app/target,sharing=locked \ if [ -n "$CARGO_REGISTRY_MIRROR" ]; then \ @@ -58,7 +63,7 @@ WORKDIR /app COPY --from=builder /app/imageforge ./imageforge COPY --from=frontend-builder /app/frontend/dist ./static -COPY migrations ./migrations +COPY --from=builder /app/migrations ./migrations RUN mkdir -p uploads \ && chown imageforge:imageforge uploads