blob: b54e910f87edad97afeb31a65505b382c8a34bec [file]
# 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 }}