# Bazel Codebase Guide for Gemini Welcome to the Bazel repository. This document provides essential context and workflows for working with the Bazel codebase. ## ๐Ÿ—๏ธ Building & Running Bazel To build Bazel from source, use a pre-installed `bazel` or `bazelisk` binary. * **Fast Iteration Build (Recommended):** `bazel build //src:bazel-dev` * **Standard Build:** `bazel build //src:bazel` ### โšก Performance Tips * **Remote Execution:** If you have access to a Remote Build Execution (RBE) cluster, use `--config=remote` to significantly speed up your builds: ```bash bazel build --config=remote //src:bazel-dev ``` ### ๐Ÿ”„ Iterative Development Workflow To test changes safely without interfering with your primary workspace, use a separate binary and output base: 1. **Build and Copy:** ```bash bazel build //src:bazel-dev && cp bazel-bin/src/bazel-dev /tmp/bazel ``` 2. **Run commands:** ```bash /tmp/bazel --output_base=/tmp/ob-dev ``` **Note:** Using a custom `--output_base` (e.g., `/tmp/ob-dev`) is crucial to avoid locking your main workspace server and ensures your development environment remains isolated. ## ๐Ÿงช Testing Tests are located primarily in `src/test`. ### Finding Relevant Tests If you modify a file, find tests that transitively depend on it: ```bash bazel query "rdeps(//src/test/..., path/to/file.java)" ``` ### Running Tests * **Unit Tests:** Typically `java_test` targets. * **Integration Tests:** * Java-based: Subclasses of `BuildIntegrationTestCase`. * Shell-based: Located in `src/test/shell`, using a bash test framework. ## ๐Ÿ“œ Architecture & Codebase Bazel uses a **Client/Server** architecture. The client (C++) is a lightweight wrapper that starts and communicates with a long-lived Java server. * **Skyframe:** The incremental evaluation framework. Most core logic is implemented as `SkyFunction`s evaluating `SkyKey`s into `SkyValue`s. * **Starlark:** The configuration language used for `BUILD` and `.bzl` files. * **Loading/Analysis/Execution:** The three phases of a Bazel command. For architectural details or introspection capabilities, see: `docs/contribute/codebase.mdx` ## ๐Ÿงน Linting & Formatting * **Java:** Follows Google Java Style. * **Starlark:** Use `buildifier` for `BUILD` and `.bzl` files.