| name: Build and Test with Bazel | |
| permissions: | |
| contents: read | |
| on: | |
| push: | |
| branches: | |
| - 'main' | |
| pull_request: | |
| types: [opened, synchronize, reopened, unlabeled] | |
| jobs: | |
| build: | |
| if: github.event.action != 'unlabeled' || github.event.label.name == 'kokoro:run' | |
| timeout-minutes: 120 | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, windows-2025] | |
| runs-on: ${{matrix.os}} | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| fetch-depth: '0' | |
| - name: Download dependencies | |
| run: python3 utils/git-sync-deps | |
| - name: Mount Bazel cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
| with: | |
| path: ~/.bazel/cache | |
| key: bazel-cache-${{ runner.os }} | |
| - name: Build All | |
| run: bazel --output_user_root=~/.bazel/cache build //... | |
| - name: Test All | |
| run: bazel --output_user_root=~/.bazel/cache test --test_output=errors //... | |
| # iOS is 10x expensive to run on GitHub machines, so only run if we know something else passed | |
| # The steps are unfortunately duplicated because github actions requires 2 jobs for a dependency | |
| build-macos: | |
| needs: build | |
| timeout-minutes: 120 | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| fetch-depth: '0' | |
| - name: Download dependencies | |
| run: python3 utils/git-sync-deps | |
| - name: Mount Bazel cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
| with: | |
| path: ~/.bazel/cache | |
| key: bazel-cache-${{ runner.os }} | |
| - name: Build All | |
| run: bazel --output_user_root=~/.bazel/cache build //... | |
| - name: Test All | |
| run: bazel --output_user_root=~/.bazel/cache test --test_output=errors //... |