From d9c97432339a97b3f79398a960638fd47f77eed1 Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Thu, 23 Apr 2026 16:37:05 -0700 Subject: [PATCH] ci: reuse Bazel CI startup for query helpers --- .../run-argument-comment-lint-bazel.sh | 51 +------------ .github/scripts/run-bazel-query-ci.sh | 71 +++++++++++++++++++ scripts/list-bazel-clippy-targets.sh | 10 ++- .../list-bazel-targets.sh | 4 +- 4 files changed, 84 insertions(+), 52 deletions(-) create mode 100755 .github/scripts/run-bazel-query-ci.sh diff --git a/.github/scripts/run-argument-comment-lint-bazel.sh b/.github/scripts/run-argument-comment-lint-bazel.sh index e2f494d620..d44b2daec0 100755 --- a/.github/scripts/run-argument-comment-lint-bazel.sh +++ b/.github/scripts/run-argument-comment-lint-bazel.sh @@ -2,16 +2,6 @@ set -euo pipefail -ci_config=ci-linux -case "${RUNNER_OS:-}" in - macOS) - ci_config=ci-macos - ;; - Windows) - ci_config=ci-windows - ;; -esac - bazel_lint_args=("$@") if [[ "${RUNNER_OS:-}" == "Windows" ]]; then has_host_platform_override=0 @@ -44,49 +34,12 @@ if [[ "${RUNNER_OS:-}" == "Windows" ]]; then bazel_lint_args+=("--skip_incompatible_explicit_targets") fi -bazel_startup_args=() -if [[ -n "${BAZEL_OUTPUT_USER_ROOT:-}" ]]; then - bazel_startup_args+=("--output_user_root=${BAZEL_OUTPUT_USER_ROOT}") -fi - -run_bazel() { - if [[ "${RUNNER_OS:-}" == "Windows" ]]; then - MSYS2_ARG_CONV_EXCL='*' bazel "$@" - return - fi - - bazel "$@" -} - -run_bazel_with_startup_args() { - if [[ ${#bazel_startup_args[@]} -gt 0 ]]; then - run_bazel "${bazel_startup_args[@]}" "$@" - return - fi - - run_bazel "$@" -} - read_query_labels() { local query="$1" - local query_stdout - local query_stderr - query_stdout="$(mktemp)" - query_stderr="$(mktemp)" - - if ! run_bazel_with_startup_args \ - --noexperimental_remote_repo_contents_cache \ - query \ + ./.github/scripts/run-bazel-query-ci.sh \ --keep_going \ --output=label \ - "$query" >"$query_stdout" 2>"$query_stderr"; then - cat "$query_stderr" >&2 - rm -f "$query_stdout" "$query_stderr" - exit 1 - fi - - cat "$query_stdout" - rm -f "$query_stdout" "$query_stderr" + -- "$query" } final_build_targets=(//codex-rs/...) diff --git a/.github/scripts/run-bazel-query-ci.sh b/.github/scripts/run-bazel-query-ci.sh new file mode 100755 index 0000000000..f8ab9bd2dc --- /dev/null +++ b/.github/scripts/run-bazel-query-ci.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Run Bazel queries with the same CI startup settings as the main build/test +# invocation so target-discovery queries can reuse the same Bazel server. + +query_args=() +while [[ $# -gt 0 ]]; do + case "$1" in + --) + shift + break + ;; + *) + query_args+=("$1") + shift + ;; + esac +done + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 [...] -- " >&2 + exit 1 +fi + +query_expression="$1" + +ci_config=ci-linux +case "${RUNNER_OS:-}" in + macOS) + ci_config=ci-macos + ;; + Windows) + ci_config=ci-windows + ;; +esac + +bazel_startup_args=() +if [[ -n "${BAZEL_OUTPUT_USER_ROOT:-}" ]]; then + bazel_startup_args+=("--output_user_root=${BAZEL_OUTPUT_USER_ROOT}") +fi + +run_bazel() { + if [[ "${RUNNER_OS:-}" == "Windows" ]]; then + MSYS2_ARG_CONV_EXCL='*' bazel "$@" + return + fi + + bazel "$@" +} + +bazel_query_args=(--noexperimental_remote_repo_contents_cache query) +if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then + bazel_query_args+=( + "--config=${ci_config}" + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + ) +fi + +if [[ -n "${BAZEL_REPO_CONTENTS_CACHE:-}" ]]; then + bazel_query_args+=("--repo_contents_cache=${BAZEL_REPO_CONTENTS_CACHE}") +fi + +if [[ -n "${BAZEL_REPOSITORY_CACHE:-}" ]]; then + bazel_query_args+=("--repository_cache=${BAZEL_REPOSITORY_CACHE}") +fi + +bazel_query_args+=("${query_args[@]}" "$query_expression") + +run_bazel "${bazel_startup_args[@]}" "${bazel_query_args[@]}" diff --git a/scripts/list-bazel-clippy-targets.sh b/scripts/list-bazel-clippy-targets.sh index d6351d1f89..73c0777e26 100755 --- a/scripts/list-bazel-clippy-targets.sh +++ b/scripts/list-bazel-clippy-targets.sh @@ -6,8 +6,14 @@ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "${repo_root}" # Resolve the dynamic targets before printing anything so callers do not -# continue with a partial list if `bazel query` fails. -manual_rust_test_targets="$(bazel query 'kind("rust_test rule", attr(tags, "manual", //codex-rs/... except //codex-rs/v8-poc/...))')" +# continue with a partial list if `bazel query` fails. Reuse the same CI Bazel +# server settings as the subsequent build so Windows jobs do not cold-start a +# second Bazel server just for target discovery. +manual_rust_test_targets="$( + ./.github/scripts/run-bazel-query-ci.sh \ + --output=label \ + -- 'kind("rust_test rule", attr(tags, "manual", //codex-rs/... except //codex-rs/v8-poc/...))' +)" printf '%s\n' \ "//codex-rs/..." \ diff --git a/tools/argument-comment-lint/list-bazel-targets.sh b/tools/argument-comment-lint/list-bazel-targets.sh index cba07f6080..1874a65f3c 100755 --- a/tools/argument-comment-lint/list-bazel-targets.sh +++ b/tools/argument-comment-lint/list-bazel-targets.sh @@ -10,4 +10,6 @@ cd "${repo_root}" # Add only those manual rust_test targets explicitly so inline `#[cfg(test)]` # call sites are linted without pulling in unrelated manual release targets. printf '%s\n' "//codex-rs/..." -bazel query 'kind("rust_test rule", attr(tags, "manual", //codex-rs/...))' +./.github/scripts/run-bazel-query-ci.sh \ + --output=label \ + -- 'kind("rust_test rule", attr(tags, "manual", //codex-rs/...))'