diff --git a/MODULE.bazel b/MODULE.bazel index d1a32df5f3..43f133db64 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -71,6 +71,7 @@ single_version_override( patch_strip = 1, patches = [ "//patches:rules_rs_windows_gnullvm_exec.patch", + "//patches:rules_rs_delete_git_worktree_pointer.patch", ], version = "0.0.43", ) diff --git a/patches/rules_rs_delete_git_worktree_pointer.patch b/patches/rules_rs_delete_git_worktree_pointer.patch new file mode 100644 index 0000000000..a47b6c7c8f --- /dev/null +++ b/patches/rules_rs_delete_git_worktree_pointer.patch @@ -0,0 +1,23 @@ +# What: delete .git worktree pointer from crate git checkouts. +# Why: the .git file contains an absolute path to the bazel output base, +# which differs across machines. This pollutes compile_data and causes +# action cache misses when builds run on different CI runners. + +diff --git a/rs/private/crate_git_repository.bzl b/rs/private/crate_git_repository.bzl +index 1234567..abcdefg 100644 +--- a/rs/private/crate_git_repository.bzl ++++ b/rs/private/crate_git_repository.bzl +@@ -35,6 +35,11 @@ def _crate_git_repository_implementation(rctx): + "HEAD" + ]) + if result.return_code != 0: + fail(result.stderr) + ++ # Remove .git worktree pointer file. It contains an absolute path to ++ # the bazel output base which is machine-specific and non-deterministic. ++ # Leaving it in pollutes compile_data globs and causes AC misses. ++ rctx.delete(root.get_child(".git")) ++ + if strip_prefix: + dest_link = dest_dir.get_child(strip_prefix) + if not dest_link.exists: