| # Copyright 2026 The Abseil Authors. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # https://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| name: Bazel Tests | |
| on: | |
| workflow_call: | |
| inputs: | |
| os: | |
| description: "GitHub Actions runner OS (e.g. ubuntu-24.04, macos-latest, windows-2022)" | |
| required: true | |
| type: string | |
| toolchain: | |
| description: "Bazel toolchain config (--config=<toolchain>)" | |
| required: true | |
| type: string | |
| remote_config: | |
| description: "Bazel remote config (--config=<remote_config>)" | |
| required: false | |
| default: "remote" | |
| type: string | |
| container_image: | |
| description: "Docker container image to run in (empty string for host execution)" | |
| required: false | |
| default: "" | |
| type: string | |
| alternate_options: | |
| description: "Whether to use ci/absl_alternate_options.h" | |
| required: false | |
| default: false | |
| type: boolean | |
| stds: | |
| description: "JSON array of C++ standards to test" | |
| required: false | |
| default: '["c++17", "c++20", "c++23"]' | |
| type: string | |
| compilation_modes: | |
| description: "JSON array of Bazel compilation modes to test" | |
| required: false | |
| default: '["opt", "fastbuild"]' | |
| type: string | |
| permissions: | |
| contents: read | |
| jobs: | |
| test: | |
| runs-on: ${{ inputs.os }} | |
| name: (${{ matrix.std }}, ${{ matrix.compilation_mode }}) | |
| container: | |
| image: ${{ inputs.container_image }} | |
| options: --cap-add=SYS_PTRACE | |
| credentials: | |
| # TODO(b/573304451): Switch to Workload Identity Federation to avoid the need for secrets. | |
| username: _json_key | |
| password: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| strategy: | |
| fail-fast: false # Don't cancel all jobs if one fails. | |
| matrix: | |
| std: ${{ fromJSON(inputs.stds) }} | |
| compilation_mode: ${{ fromJSON(inputs.compilation_modes) }} | |
| defaults: | |
| run: | |
| shell: bash | |
| env: | |
| BAZEL_LLVM: C:\Program Files\LLVM | |
| MSYS2_ARG_CONV_EXCL: "*" | |
| USE_BAZEL_VERSION: 9.x | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # 7.0.0 | |
| - name: Set up alternate options | |
| if: ${{ inputs.alternate_options }} | |
| run: cp ci/absl_alternate_options.h absl/base/options.h | |
| - name: Setup continuous run | |
| if: ${{ github.event_name == 'schedule' }} | |
| # Force builds and tests to run on scheduled runs. | |
| run: echo "EXTRA_BAZEL_ARGS=--cache_test_results=no --action_env=FORCE_REBUILD=1" >> $GITHUB_ENV | |
| - name: Set up Bazel and caches | |
| uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 | |
| with: | |
| cache-save: true | |
| bazelisk-cache: true | |
| external-cache: true | |
| repository-cache: true | |
| google-credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} | |
| bazelrc: common --config=${{ inputs.remote_config }} | |
| - name: Fetch all external dependencies | |
| run: bazel fetch //... | |
| - name: Run tests | |
| run: > | |
| bazel test ... | |
| --config=${{ inputs.toolchain }} | |
| --cxxopt=${{ startsWith(inputs.os, 'windows') && '/std:' || '-std=' }}${{ matrix.std }} | |
| --host_cxxopt=${{ startsWith(inputs.os, 'windows') && '/std:' || '-std=' }}${{ matrix.std }} | |
| --compilation_mode=${{ matrix.compilation_mode }} | |
| ${{ env.EXTRA_BAZEL_ARGS }} |