Skip to content

Commit 86b723a

Browse files
authored
[bazel] Improve job reliability and ensure jobs are time-bound (#5925)
1 parent d76e6a0 commit 86b723a

7 files changed

Lines changed: 507 additions & 214 deletions

File tree

.bazelversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8.0.1
1+
8.8.0

.github/actions/setup-bazel/configure-bazelrc.sh

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,23 @@ common --repo_env=GO_REPOSITORY_USE_HOST_MODCACHE=1
99
common --repo_env=GOMODCACHE=${GO_MOD_CACHE_DIR}
1010
EOF
1111

12-
if [[ "${BAZEL_REMOTE_CACHE_ENABLED:-true}" == "true" && -n "${BAZEL_REMOTE_CACHE_URL:-}" && -n "${BAZEL_REMOTE_CACHE_AUTH_HEADER:-}" ]]; then
12+
BAZEL_REMOTE_CACHE_ENABLED="${BAZEL_REMOTE_CACHE_ENABLED:-true}"
13+
BAZEL_REMOTE_CACHE_URL="${BAZEL_REMOTE_CACHE_URL:-}"
14+
BAZEL_REMOTE_CACHE_AUTH_HEADER="${BAZEL_REMOTE_CACHE_AUTH_HEADER:-}"
15+
16+
if [[ "$BAZEL_REMOTE_CACHE_ENABLED" == "true" && -z "$BAZEL_REMOTE_CACHE_AUTH_HEADER" ]]; then
17+
echo "::warning::Bazel remote cache is enabled but BAZEL_REMOTE_CACHE_AUTH_HEADER is empty; continuing without the remote cache."
18+
fi
19+
20+
if [[ "$BAZEL_REMOTE_CACHE_ENABLED" == "true" && -n "$BAZEL_REMOTE_CACHE_URL" && -n "$BAZEL_REMOTE_CACHE_AUTH_HEADER" ]]; then
21+
case "$BAZEL_REMOTE_CACHE_URL" in
22+
grpcs://*) ;;
23+
*)
24+
echo "error: BAZEL_REMOTE_CACHE_URL must use the grpcs:// scheme; see docs/bazel.md#why-the-remote-cache-uses-grpc" >&2
25+
exit 1
26+
;;
27+
esac
28+
1329
cat >> "$HOME/.bazelrc" <<EOF
1430
# CI-only remote cache
1531
build --remote_cache=${BAZEL_REMOTE_CACHE_URL}

.github/workflows/bazel-ci-scheduled.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ jobs:
4040
platform_name: ${{ matrix.platform_name }}
4141
runner: ${{ matrix.runner }}
4242
run_race_shuffle_unit_tests: ${{ matrix.run_race_shuffle_unit_tests }}
43+
# Scheduled jobs run broader tests without the remote action cache.
44+
setup_timeout_minutes: 20
45+
unit_timeout_minutes: 60
46+
e2e_timeout_minutes: 60
47+
required_timeout_minutes: 10
4348
# Run this daily validation without remote action or test results.
4449
enable_remote_cache: false
4550
secrets: inherit

.github/workflows/bazel-ci-smoke.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ jobs:
2828
- unit-smoke
2929
- e2e-smoke
3030
runs-on: ${{ inputs.runner }}
31+
timeout-minutes: 5
3132
steps:
3233
- name: Fail unless all needed jobs succeeded
3334
shell: bash
@@ -51,6 +52,7 @@ jobs:
5152
# Prepare Bazel CI for this platform before the smoke tests run.
5253
setup:
5354
runs-on: ${{ inputs.runner }}
55+
timeout-minutes: 10
5456
steps:
5557
- uses: actions/checkout@v5
5658
- uses: ./.github/actions/setup-bazel
@@ -64,6 +66,7 @@ jobs:
6466
unit-smoke:
6567
needs: setup
6668
runs-on: ${{ inputs.runner }}
69+
timeout-minutes: 30
6770
steps:
6871
- uses: actions/checkout@v5
6972
- name: Run Bazel unit-test smoke test
@@ -74,6 +77,7 @@ jobs:
7477
e2e-smoke:
7578
needs: setup
7679
runs-on: ${{ inputs.runner }}
80+
timeout-minutes: 30
7781
steps:
7882
- uses: actions/checkout@v5
7983
- name: Run E2E smoke test with Bazel-built binary

.github/workflows/bazel-ci.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,26 @@ on:
2121
required: false
2222
type: boolean
2323
default: true
24+
setup_timeout_minutes:
25+
description: 'Timeout for the setup job'
26+
required: false
27+
type: number
28+
default: 10
29+
unit_timeout_minutes:
30+
description: 'Timeout for the unit-test job'
31+
required: false
32+
type: number
33+
default: 30
34+
e2e_timeout_minutes:
35+
description: 'Timeout for the E2E job'
36+
required: false
37+
type: number
38+
default: 30
39+
required_timeout_minutes:
40+
description: 'Timeout for the aggregate required job'
41+
required: false
42+
type: number
43+
default: 5
2444

2545
env:
2646
BAZEL_CI_ENFORCE_DEPENDENCY_LIST: 1
@@ -40,6 +60,7 @@ jobs:
4060
- unit
4161
- e2e
4262
runs-on: ${{ inputs.runner }}
63+
timeout-minutes: ${{ inputs.required_timeout_minutes }}
4364
steps:
4465
- name: Fail unless all needed jobs succeeded
4566
shell: bash
@@ -67,6 +88,7 @@ jobs:
6788
# missing dependencies on its own.
6889
setup:
6990
runs-on: ${{ inputs.runner }}
91+
timeout-minutes: ${{ inputs.setup_timeout_minutes }}
7092
steps:
7193
- uses: actions/checkout@v5
7294
- uses: ./.github/actions/setup-bazel
@@ -80,6 +102,7 @@ jobs:
80102
unit:
81103
needs: setup
82104
runs-on: ${{ inputs.runner }}
105+
timeout-minutes: ${{ inputs.unit_timeout_minutes }}
83106
steps:
84107
- uses: actions/checkout@v5
85108
- name: Run unit tests with Bazel
@@ -90,6 +113,7 @@ jobs:
90113
e2e:
91114
needs: setup
92115
runs-on: ${{ inputs.runner }}
116+
timeout-minutes: ${{ inputs.e2e_timeout_minutes }}
93117
steps:
94118
- uses: actions/checkout@v5
95119
- name: Run E2E smoke test with Bazel-built binary

0 commit comments

Comments
 (0)