When configuring remote build execution, it is very important to test changes locally so you don’t waste time on CI. A lot of the time, people don’t even have access to an RBE environment. Yes, BuildBuddy offers their service for free for open-source projects, but I feel like having access to an RBE environment locally is invaluable.
I only recently started utilizing RBE more seriously, and while working through that setup I accidentally discovered actiond. I really wish I had known about it earlier. Having a remote executor that you can run locally makes experimenting with RBE, debugging issues, and checking whether your targets actually execute remotely much easier.
actiond from hermeticbuild
actiond is a full-fledged remote build executor that you can spin up easily simply by downloading it:
curl -L \
https://github.com/hermeticbuild/actiond/releases/latest/download/darwin-actiond_macos_arm64 \
-o darwin-actiond_macos_arm64
curl -L \
https://github.com/hermeticbuild/actiond/releases/latest/download/SHA256.txt \
-o SHA256.txt
grep ' darwin-actiond_macos_arm64$' SHA256.txt | shasum -a 256 -c -
chmod +x darwin-actiond_macos_arm64
And then just run it:
./darwin-actiond_macos_arm64 serve-vm \
--listen=127.0.0.1:8980 \
--root="$HOME/Library/Caches/actiond/vm"
NOTE: I assume you’re running on macOS.
Pointing Bazel at it
It is a matter of setting a few flags, which is best done in .bazelrc, as I can’t imagine anyone manually passing them every time:
build:local_rbe --remote_executor=grpc://127.0.0.1:8980
build:local_rbe --remote_cache=grpc://127.0.0.1:8980
build:local_rbe --platforms=//:linux_x86_64
build:local_rbe --extra_execution_platforms=//:linux_x86_64
build:local_rbe --spawn_strategy=remote
build:local_rbe --genrule_strategy=remote
build:local_rbe --remote_local_fallback=false
build:local_rbe --remote_upload_local_results=false
build:local_rbe --noremote_cache_compression
Then build with bazel build --config=local_rbe //....
Conclusion
This is an incredibly easy way to test whether all your targets build remotely, either when preparing to use a real RBE service or as a rule author wanting to ensure that your rules are fully hermetic and can execute remotely.
I wish I had found actiond earlier, because it removes a lot of the friction from experimenting with RBE locally and makes it much easier to catch remote-execution problems before they reach CI.