From e59be444e99b9eeb7da9c5084c3f7827836b568b Mon Sep 17 00:00:00 2001 From: mikkeldamsgaard Date: Thu, 12 Mar 2026 00:13:37 +0100 Subject: [PATCH] fix: replace --mount=type=cache with dependency layer caching in Dockerfiles --mount=type=cache does not persist across GitHub Actions runners, causing full recompilation on every release build. Reintroduce the "empty main" trick for reliable Docker layer caching. Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 3 +++ Dockerfile | 10 +++++----- jyq.Dockerfile | 10 +++++----- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf72282..f9cde8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Auto-tag workflow: CI automatically creates a git tag when `Cargo.toml` version changes on main, triggering the release workflow. - `/release` skill for Claude Code: guided release preparation with version determination, confirmation, and PR creation. +### Fixed +- Replaced Dockerfile `--mount=type=cache` with dependency layer caching ("empty main" trick) for reliable Docker build caching in GitHub Actions, where `--mount=type=cache` does not persist across runners. + ## [1.2.0] - 2026-03-11 ### Added diff --git a/Dockerfile b/Dockerfile index 115aade..50428e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,13 +3,13 @@ ARG VERSION=dev RUN apk add --no-cache musl-dev openssl-dev openssl-libs-static perl WORKDIR /src COPY Cargo.toml Cargo.lock ./ -COPY . . -RUN --mount=type=cache,target=/usr/local/cargo/registry \ - --mount=type=cache,target=/src/target \ +RUN mkdir src && echo 'fn main() {}' > src/main.rs && \ cargo build --release && \ - cp target/release/initium /initium + rm -rf src target/release/deps/initium* target/release/initium* +COPY . . +RUN cargo build --release FROM scratch COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -COPY --from=builder /initium /initium +COPY --from=builder /src/target/release/initium /initium USER 65534:65534 ENTRYPOINT ["/initium"] diff --git a/jyq.Dockerfile b/jyq.Dockerfile index 9c8ab29..63e5c07 100644 --- a/jyq.Dockerfile +++ b/jyq.Dockerfile @@ -3,14 +3,14 @@ ARG VERSION=dev RUN apk add --no-cache musl-dev openssl-dev openssl-libs-static perl WORKDIR /src COPY Cargo.toml Cargo.lock ./ -COPY . . -RUN --mount=type=cache,target=/usr/local/cargo/registry \ - --mount=type=cache,target=/src/target \ +RUN mkdir src && echo 'fn main() {}' > src/main.rs && \ cargo build --release && \ - cp target/release/initium /initium + rm -rf src target/release/deps/initium* target/release/initium* +COPY . . +RUN cargo build --release FROM alpine:3.21 RUN apk add --no-cache jq yq ca-certificates \ && rm -rf /var/cache/apk/* -COPY --from=builder /initium /initium +COPY --from=builder /src/target/release/initium /initium USER 65534:65534 ENTRYPOINT ["/initium"]