Add authenticated GCS caching for Bazel CI and releases (#61187)

## What changed

- Authenticate eligible protected `main` runs and Rust release tags with GitHub OIDC. Allow cache uploads only on `main` pushes; use read-only access for manual runs and release tags, and leave pull requests without GCS credentials.
- Rename the shared wrapper to `.github/scripts/run_bazel.py` and route Bazel callers through it. Disable the disk cache in GitHub Actions and default macOS GCS connections to 20 while respecting explicit limits.
- Gate additional Bazel release artifacts on `CODEX_BAZEL_RELEASES` and cache configuration, sharing the selected build systems across building, signing, and packaging. Keep Cargo as the default and prepare native Windows dependencies for Bazel releases.
- Add a `Bazel result` check for the full workflow and extend Bazel job timeouts.

## Testing

Add wrapper tests for cache access by event, argument preservation, and macOS connection limits. The wrapper test suite passes.

GitOrigin-RevId: d85edbd083acfaa8bafaa8fd5241daed3e9ef871
This commit is contained in:
Dmitriy Kovalenko
2026-11-12 21:41:05 +00:00
committed by copyberry
parent d0221bc947
commit 4490060db6
25 changed files with 464 additions and 184 deletions
+19 -1
View File
@@ -20,7 +20,7 @@ The workflows in this directory are split so that pull requests get fast, review
## Post-Merge On `main`
- `bazel.yml` also runs on pushes to `main`.
This re-verifies the merged Bazel path and helps keep the BuildBuddy caches warm.
This re-verifies the merged Bazel path and populates the public GCS cache.
- `rust-ci-full.yml` is the full Cargo-native verification workflow.
It keeps the heavier checks off the PR path while still validating them after merge:
- the full Cargo `clippy` matrix
@@ -35,3 +35,21 @@ The workflows in this directory are split so that pull requests get fast, review
- If a build/test/clippy check can be expressed in Bazel, prefer putting the PR-time version in `bazel.yml`.
- Keep `rust-ci.yml` fast enough that it usually does not dominate PR latency.
- Reserve `rust-ci-full.yml` for heavyweight Cargo-native coverage that Bazel does not replace yet.
### Public Bazel action cache
Set `CODEX_BAZEL_GCS_BUCKET` and `CODEX_BAZEL_GCS_WORKLOAD_IDENTITY_PROVIDER`
as GitHub Actions secrets in `openai/codex`. They identify the bucket and its
GitHub OIDC provider. The job exchanges its identity for temporary Google
credentials. Protected main pushes populate the cache. Protected main
dispatches and Rust release tags can read it. Pull requests build without
GCS credentials.
After a main push populates the cache and a separate runner reports a remote
cache hit, set the repository variable `CODEX_BAZEL_RELEASES` to `true` to
build the additional Bazel artifacts on Rust release tags. The release
workflow selects one build-system matrix for the build, signing, and
packaging jobs. Cargo artifacts remain the default.
Once public Bazel CI passes, require the `Bazel result` check in the main
branch ruleset. It reports the result of the full Bazel workflow.