> ## Documentation Index
> Fetch the complete documentation index at: https://site.aspect.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Bazel

`function` **Bazel.build**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">build</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python">
          \*<span class="variable parameter python">targets</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/str">str</a></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">build\_events</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build">build</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build/build_event_iter">BuildEventIter</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build">build</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build/build_event_sink">BuildEventSink</a></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">workspace\_events</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">execution\_log</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/execution_log">execlog</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/execution_log/exec_log_sink">ExecLogSink</a></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">flags</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/str">str</a> <span class="keyword operator arithmetic python">|</span> <span class="meta group python"><span class="punctuation section group begin python">(</span><a href="/axl/types/str">str</a><span class="punctuation separator tuple python">,</span> <a href="/axl/types/str">str</a><span class="punctuation section group end python">)</span></span></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="meta structure list python"><span class="punctuation section list begin python">\[</span><span class="punctuation section list end python">]</span></span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">stdout</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/std">std</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io">io</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io/writable">Writable</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">stderr</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/std">std</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io">io</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io/writable">Writable</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">stdio</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/std">std</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io">io</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io/stdio">Stdio</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">None</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">current\_dir</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/str">str</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">None</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">announce\_version</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">announce\_command</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span>
          </span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build">build</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build/build">Build</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Build one or more Bazel targets.

Returns a `Build` object. The call does not block — use `.wait()` to
wait for the invocation to finish and retrieve its exit status.

**Parameters**

* `execution_log`: Enable Bazel execution log collection. Pass `True` to enable the in-memory decoded iterator (accessible via `build.execution_logs()`), or pass a list of sinks such as `[execution_log.compact_file(path = "out.binpb.zst")]` to write the log to one or more files. Sinks and the iterator can be combined: passing a list of sinks still allows calling `build.execution_logs()` to iterate entries in-process.

  "//my/pkg:target",
  flags = \[
  "--config=release",
  ("--notmp\_sandbox", ">=8"),
  ("--some\_legacy\_flag", "\<7"),
  ],
  stdout = None,                              # discard child stdout
  stderr = ctx.std.fs.create("bazel.err"),    # redirect stderr to a file

`function` **Bazel.cancel\_invocation**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">cancel\_invocation</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python">
          \*<span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">force\_kill\_after\_ms</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/int">int</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant numeric integer decimal python">5000</span>
          </span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build">build</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build/cancellation">Cancellation</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Cancel whatever invocation is currently running on the Bazel server.

Finds the bazel client process holding the server lock and sends it
SIGINT (graceful cancellation, like Ctrl+C). The client then forwards
a CancelRequest RPC to the server. Returns a `Cancellation` with
status and control methods.

**Parameters**

* `force_kill_after_ms`: - If the build is still running after this many milliseconds, `wait()` will automatically escalate by sending the 2nd and 3rd SIGINT to the Bazel client (the 3rd triggers Bazel's built-in server kill, equivalent to Ctrl+C three times). If the client still doesn't exit, falls back to SIGKILL on both client and server. Defaults to 5000ms. Set to 0 to disable auto-escalation and manage cancellation manually via `wait(timeout_ms=...)` and `force()`.

`function` **Bazel.health\_check**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">health\_check</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/health_check_result">HealthCheckResult</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Probe the Bazel server to determine whether it is responsive.

Runs `bazel --noblock_for_lock info server_pid`. If the server is
unresponsive, attempts recovery by killing the server process and
re-checking.

Returns a `HealthCheckResult` with `.success`, `.healthy`, `.message`,
and `.exit_code` attributes.

**Examples**

```python theme={null}
def _health_probe_impl(ctx):
    result = ctx.bazel.health_check()
    if not result.healthy:
        fail("Bazel server is unhealthy")
```

`function` **Bazel.info**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">info</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/dict">dict</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/str">str</a>, <a href="/axl/types/str">str</a></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Run `bazel info` and return all key/value pairs as a dict.

Blocks until the command completes. Raises an error if Bazel exits
with a non-zero code.

`function` **Bazel.parse\_rc**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">parse\_rc</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python">
          \*<span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">root</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/str">str</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">None</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">startup\_flags</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/list">list</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="meta structure list python"><span class="punctuation section list begin python">\[</span><span class="punctuation section list end python">]</span></span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">flags</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/list">list</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="meta structure list python"><span class="punctuation section list begin python">\[</span><span class="punctuation section list end python">]</span></span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">skip\_config\_if\_missing</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/str">str</a></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="meta structure list python"><span class="punctuation section list begin python">\[</span><span class="punctuation section list end python">]</span></span>
          </span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/bazel_r_c">BazelRC</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Parse `.bazelrc` files rooted at `root` and return a `BazelRC` object.

**Parameters**

* `root`: - Bazel workspace root directory. Defaults to `env.bazel_root_dir` — the deepest `MODULE.bazel` / `WORKSPACE` ancestor of `cwd`. Pass an explicit `root` only to read a bazelrc outside the surrounding workspace; passing the Aspect root here in a sub-workspace layout would read the outer `.bazelrc` and leak the parent project's flags.
* `startup_flags`: - Startup flags (e.g. `["--bazelrc=/path/to/extra.bazelrc"]`).
* `flags`: - Command-line flags to inject as synthetic `always` options (e.g. `["--config=opt"]`).

  rc = ctx.bazel.parse\_rc(flags = \["--config=opt"])
  build = ctx.bazel.build("//...", flags = rc.expand(command = "build"))
  build.wait()

`function` **Bazel.query**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">query</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/query">query</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/query/query">Query</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

The query system provides a programmatic interface for analyzing build dependencies and target relationships. Queries are constructed using a chain API and are lazily evaluated only when `.eval()` is explicitly called.

The entry point is `ctx.bazel.query()`, which returns a `query` for creating initial
query expressions. Most operations operate on `query` objects, which represent
sets of targets that can be filtered, transformed, and combined.

**Example**

```starlark theme={null}
**Query** dependencies of a target
deps = ctx.bazel.query().targets("//myapp:main").deps()
all_deps = deps.eval()

**Chain** multiple operations
sources = ctx.bazel.query().targets("//myapp:main")
    .deps()
    .kind("source file")
    .eval()
```

`function` **Bazel.recover\_poisoned\_sandbox**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">recover\_poisoned\_sandbox</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/sandbox_recovery_result">SandboxRecoveryResult</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Detect and best-effort repair runner-poisoning sandbox state described by bazelbuild/bazel#23880.

Inspects `<output_base>/sandbox/` for entries outside Bazel's
`SANDBOX_BASE_PERSISTENT_DIRS` whitelist
(`{.DS_Store, sandbox_stash, sandbox_stash_temp, _moved_trash_dir}`).
Anything else present after a bazel command exited is the
poisoning signature: Bazel's own `afterCommand` cleanup left
state behind because its spawn-runner registry didn't include
the strategy that owned that subtree (see `LinuxSandboxedStrategy.
create` IOException path; fixed upstream by `abe8d6090` in 9.0+).

When poisoning is detected, every offending entry is
`rm -rf`'d. The result distinguishes three cases:

* `"clean"`: nothing to remove. Either the sandbox dir didn't
  exist or contained only whitelisted entries.
* `"repaired"`: at least one non-whitelisted entry was found
  and all of them were successfully removed. The runner is
  safe to keep serving jobs.
* `"still_poisoned"`: at least one entry survived the removal
  attempt (e.g. EPERM on the underlying filesystem). The runner
  will keep crashing every bazel command on the same output
  base — the caller should mark it unhealthy.

Reads `--output_base=` from `ctx.bazel.startup_flags`. When
`--output_base` is not present (e.g. local dev), returns `"clean"`
— there's no way to know which outputabase to inspect, and the
failure mode is a Workflows-runner-only concern in practice.

Safe to call only AFTER the most recent bazel client invocation
has fully exited — a live `bazel build/test` against the same
outputabase would race the removal.

**Examples**

```python theme={null}
def _post_bazel_hook(ctx, exit_code):
    if exit_code == 0:
        return
    r = ctx.bazel.recover_poisoned_sandbox()
    if r.outcome == "repaired":
        print("Recovered from bazel#23880 poisoning: " + ", ".join(r.removed))
    elif r.outcome == "still_poisoned":
        signal_instance_unhealthy()
```

`function` **Bazel.test**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Bazel</span></span>.<span class="entity name function python"><span class="meta generic-name python">test</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python">
          \*<span class="variable parameter python">targets</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/str">str</a></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">build\_events</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build">build</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build/build_event_iter">BuildEventIter</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build">build</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build/build_event_sink">BuildEventSink</a></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">workspace\_events</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">execution\_log</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/execution_log">execlog</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/execution_log/exec_log_sink">ExecLogSink</a></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">flags</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/str">str</a> <span class="keyword operator arithmetic python">|</span> <span class="meta group python"><span class="punctuation section group begin python">(</span><a href="/axl/types/str">str</a><span class="punctuation separator tuple python">,</span> <a href="/axl/types/str">str</a><span class="punctuation section group end python">)</span></span></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="meta structure list python"><span class="punctuation section list begin python">\[</span><span class="punctuation section list end python">]</span></span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">stdout</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/std">std</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io">io</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io/writable">Writable</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">stderr</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/std">std</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io">io</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io/writable">Writable</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">...</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">stdio</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/std">std</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io">io</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/std/io/stdio">Stdio</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">None</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">current\_dir</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types">None</a> <span class="keyword operator arithmetic python">|</span> <a href="/axl/types/str">str</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">None</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">announce\_version</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">announce\_command</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span>
          </span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build">build</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/build/build">Build</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Build and test one or more Bazel targets.

Returns a `Build` object. The call does not block — use `.wait()` to
wait for the invocation to finish and retrieve its exit status.

**Parameters**

* `execution_log`: Enable Bazel execution log collection. Pass `True` to enable the in-memory decoded iterator (accessible via `build.execution_logs()`), or pass a list of sinks such as `[execution_log.compact_file(path = "out.binpb.zst")]` to write the log to one or more files. Sinks and the iterator can be combined: passing a list of sinks still allows calling `build.execution_logs()` to iterate entries in-process.

  "//my/pkg:test",
  flags = \[
  "--test\_output=errors",
  ("--notmp\_sandbox", ">=8"),
  ("--some\_legacy\_flag", "\<7"),
  ],

`property` **Bazel.startup\_flags**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta qualified-name python"><span class="meta generic-name python">Bazel</span><span class="punctuation accessor dot python">.</span><span class="meta generic-name python">startup\_flags</span></span><span class="punctuation separator annotation variable python">:</span> <a href="/axl/types/typing">typing</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/typing">Any</a></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Mutable list of startup flags prepended to every Bazel invocation on this context.
