From 059c493641a3f947bb9f3b9a91265091af533bed Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 10 May 2026 21:17:30 +0000 Subject: [PATCH] ci(darwin): brew reinstall ccache to handle transitive dep drift MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Symptom (PR #9752, run 25638825961, job 75256261163): dyld[11144]: Library not loaded: /opt/homebrew/opt/fmt/lib/libfmt.12.dylib Referenced from: /opt/homebrew/Cellar/ccache/4.13.5/bin/ccache Abort trap: 6 Previous fix (commit 3f6e4934) added blake3, hiredis, xxhash, zstd as explicit installs + cache paths because ccache's runtime dep closure wasn't in the brew cache. But ccache 4.13 also depends on fmt — which I missed. This is going to keep happening as upstream ccache adds or shuffles deps over time. Durable fix: `brew reinstall ccache` after the install step forces brew to re-resolve and install ccache's full transitive dep closure every run, immune to future formula changes. The brew downloads cache makes the reinstall cheap (~5s on a cache hit). Also adds fmt to the explicit install/link/Cellar-cache lists for the fresh-runner path. The reinstall covers the cache-hit path; the explicit install covers the brand-new-runner path where neither the downloads cache nor the Cellar cache has been populated yet. Caught by PR #9752's CI; would also have caught any future LLAMA_VERSION bump triggering the Darwin matrix. Assisted-by: Claude:claude-opus-4-7 Signed-off-by: Ettore Di Giacinto --- .github/workflows/backend_build_darwin.yml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/backend_build_darwin.yml b/.github/workflows/backend_build_darwin.yml index 217e82903..07763b4f7 100644 --- a/.github/workflows/backend_build_darwin.yml +++ b/.github/workflows/backend_build_darwin.yml @@ -94,6 +94,7 @@ jobs: /opt/homebrew/Cellar/llvm /opt/homebrew/Cellar/ccache /opt/homebrew/Cellar/blake3 + /opt/homebrew/Cellar/fmt /opt/homebrew/Cellar/hiredis /opt/homebrew/Cellar/xxhash /opt/homebrew/Cellar/zstd @@ -104,18 +105,23 @@ jobs: # ccache is always installed (used by the llama-cpp variant build) so # the brew cache content stays stable across every backend in the # matrix — they all share one cache key. - # blake3, hiredis, xxhash, zstd are ccache's runtime dylib deps. + # blake3, fmt, hiredis, xxhash, zstd are ccache's runtime dylib deps. # Without explicitly installing them, a brew cache-hit run restores # ccache's Cellar dir but skips installing those transitive deps, - # and ccache fails at runtime with `dyld: Library not loaded: - # libblake3.0.dylib`. - brew install protobuf grpc make protoc-gen-go protoc-gen-go-grpc libomp llvm ccache blake3 hiredis xxhash zstd + # and ccache fails at runtime with `dyld: Library not loaded`. + brew install protobuf grpc make protoc-gen-go protoc-gen-go-grpc libomp llvm ccache blake3 fmt hiredis xxhash zstd + # Force-reinstall ccache so brew re-validates its full runtime-dep + # closure on every run. This is the durable fix: when the upstream + # ccache formula gains a new transitive dep (as it has multiple times + # already), we don't have to chase missing dylibs one at a time. + # The downloads cache makes the reinstall fast (~5s on a hit). + brew reinstall ccache # The brew cache restores the Cellar dirs but NOT the bin symlinks # at /opt/homebrew/bin/*. brew install above sees the Cellar present # and decides "already installed" without re-linking, so on a cache- # hit run the formulas aren't on PATH. Force-link them; --overwrite # tolerates pre-existing symlinks from earlier installs. - brew link --overwrite protobuf grpc make protoc-gen-go protoc-gen-go-grpc libomp llvm ccache blake3 hiredis xxhash zstd 2>/dev/null || true + brew link --overwrite protobuf grpc make protoc-gen-go protoc-gen-go-grpc libomp llvm ccache blake3 fmt hiredis xxhash zstd 2>/dev/null || true - name: Save Homebrew cache if: github.event_name != 'pull_request' && steps.brew-cache.outputs.cache-hit != 'true' @@ -131,6 +137,7 @@ jobs: /opt/homebrew/Cellar/llvm /opt/homebrew/Cellar/ccache /opt/homebrew/Cellar/blake3 + /opt/homebrew/Cellar/fmt /opt/homebrew/Cellar/hiredis /opt/homebrew/Cellar/xxhash /opt/homebrew/Cellar/zstd