Reputation: 9798
I'm working on a Bazel/Bazelisk configured project and need to use remote caching (using bazel-remote) in order to let developer machines use build artifacts generated on powerful build machines.
This scenario already works for me in general, but when I started to use Bazelisk the build cache was not used on all machines anymore.
Analyzing the execution log you get via --execution_log_json_file=<PATH>
I found out that Bazel implicitly (and silently) captures the current user's $PATH
in environmentVariables
but also </path/to/home>/.cache/bazelisk/downloads/bazelbuild/bazel-7.1.1-linux-x86_64/bin:</path/to/home>/.cache/bazelisk/downloads/sha256/<SHA>/bin
gets added to $PATH
.
While it makes sense to take $PATH
into account when looking for cached artifacts, and Bazelisk's bin
folders have to be considered.. this breaks remote cache capabilities of course when user names differ (at least by default).
How am I supposed to solve this?
Should I create a 'well known folder' on every build machine/container which is user-agnostic and point Bazelisk to that folder?
Or can I somehow tell Bazel/Bazelisk to keep the .cache
folder where it wants it to be (or where I want it to be) but not take it as input for environmentVariables
used for the remote cache key? How?
And there might be some more options that come to my mind to workaround this behavior, but what's the intended approach?
Upvotes: 0
Views: 134
Reputation: 95
May you have tried to set BAZELISK_HOME
to a path that suits your needs, like the repo root? Be aware also the downloads during the setup of bazel will be placed there.
This can be achieved by using a .bazeliskrc
file in the root of your repo
BAZELISK_HOME=./.repo_local_cache/bazelisk
Upvotes: 1
Reputation: 20560
Typically, one forces the action path be consistent with --incompatible_strict_action_env
.
(It's not just the bazelisk PATH
entry to worry about. Developers like to mess with PATH
to, for example, add their custom script directories.)
Upvotes: 1