blob: b8a9423b727b2150bdb30479e1e5c753f9f10c9b [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: Tests
on:
# continuous runs
schedule:
# Run every hour
- cron: "0 * * * *"
# postsubmit runs
push:
branches:
- master
- lts_*
# presubmit runs
pull_request:
branches:
- master
- lts_*
# manual runs
workflow_dispatch:
permissions:
contents: read
# Avoid running twice at the same time over the same changes.
concurrency:
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: ${{ contains(fromJSON('["pull_request", "workflow_dispatch", "schedule"]'), github.event_name) }}
jobs:
linux:
name: Linux ${{ matrix.config.name }} Bazel
strategy:
fail-fast: false # Don't cancel all jobs if one fails.
matrix:
config:
# linux_clang-latest_libcxx_bazel.cfg
- name: Clang/libc++
toolchain: clang
# linux_clang-latest_libcxx_exceptions_bazel.cfg (fastbuild only)
- name: Clang/libc++ -fexceptions
toolchain: clang-exceptions
compilation_modes: '["fastbuild"]'
# linux_clang-latest_libcxx_alternate_options_bazel.cfg
- name: Clang/libc++ alternate options
toolchain: clang
alternate_options: true
# linux_clang-latest_libcxx_asan_bazel.cfg (fastbuild only)
- name: Clang/libc++ ASAN
toolchain: asan
compilation_modes: '["fastbuild"]'
# linux_clang-latest_libcxx_tsan_bazel.cfg (fastbuild only)
- name: Clang/libc++ TSAN
toolchain: tsan
compilation_modes: '["fastbuild"]'
# linux_clang-latest_libstdcxx_bazel.cfg
- name: Clang/libstdc++
toolchain: libstdc++
# linux_gcc-latest_libstdcxx_bazel.cfg
- name: GCC/libstdc++
toolchain: gcc
# linux_gcc-latest_libstdcxx_exceptions_bazel.cfg (fastbuild only)
- name: GCC/libstdc++ -fexceptions
toolchain: gcc-exceptions
compilation_modes: '["fastbuild"]'
# linux_gcc-latest_libstdcxx_alternate_options_bazel.cfg
- name: GCC/libstdc++ alternate options
toolchain: gcc
alternate_options: true
# linux_gcc-floor_libstdcxx_bazel.cfg (c++17 only)
- name: GCC/libstdc++ (floor)
toolchain: gcc
remote_config: remote-floor
container_image: gcr.io/google.com/absl-177019/oss-linux-toolchain-floor@sha256:9027d0b4cae51d764cebafecbf9e390a14f97cf977ca24d02cc533998614acd2
stds: '["c++17"]'
# linux_arm_clang-latest_libcxx_bazel.cfg (c++17 and c++20 only)
- name: ARM64 Clang/libc++
os: ubuntu-24.04-arm
toolchain: clang-arm
remote_config: remote-arm
stds: '["c++17", "c++20"]'
uses: ./.github/workflows/bazel.yml
secrets: inherit
with:
os: ${{ matrix.config.os || 'ubuntu-24.04' }}
toolchain: ${{ matrix.config.toolchain }}
remote_config: ${{ matrix.config.remote_config || 'remote' }}
container_image: ${{ matrix.config.container_image || 'gcr.io/google.com/absl-177019/oss-linux-toolchain-latest@sha256:81009eeb5523ae59cfbea8dc0847d41572ed100f79e3c976c64378a0c30d353c' }}
alternate_options: ${{ matrix.config.alternate_options || false }}
stds: ${{ matrix.config.stds || '["c++17", "c++20", "c++23"]' }}
compilation_modes: ${{ matrix.config.compilation_modes || '["opt", "fastbuild"]' }}
cmake:
name: ${{ matrix.config.name }} CMake
strategy:
fail-fast: false # Don't cancel all jobs if one fails.
matrix:
config:
# linux_gcc-latest_libstdcxx_cxx17_cmake.cfg
- name: Linux GCC/libstdc++
os: ubuntu-24.04
container_image: gcr.io/google.com/absl-177019/oss-linux-latest@sha256:84505366948db3ea97c71d0aa384a920e73f6994bb4194d7f80ee77979fd9d58
# linux_gcc_alpine_cmake.cfg
- name: Alpine Linux GCC (musl)
os: ubuntu-24.04
container_image: gcr.io/google.com/absl-177019/alpine@sha256:52945833fc7b7b93f73ec865eb82390aa46d4e3acd1af87d253cd4a05f95d241
build_types: '["Debug"]'
link_modes: '["static"]'
# cmake-install.cfg
- name: Linux Install
os: ubuntu-24.04
container_image: gcr.io/google.com/absl-177019/oss-linux-latest@sha256:84505366948db3ea97c71d0aa384a920e73f6994bb4194d7f80ee77979fd9d58
build_types: '["Release"]'
link_modes: '["static", "shared"]'
install_test: true
# macos_xcode_cmake.cfg
- name: macOS Xcode
os: macos-latest
build_types: '["Debug"]'
# windows-msvc-2022-cxx17-dbg-cmake.cfg
# windows-msvc-2022-cxx17-dbg-dll-cmake.cfg
- name: Windows MSVC 2022
os: windows-2022
build_types: '["Debug"]'
link_modes: '["static", "shared"]'
uses: ./.github/workflows/cmake.yml
secrets: inherit
with:
os: ${{ matrix.config.os }}
container_image: ${{ matrix.config.container_image || '' }}
build_types: ${{ matrix.config.build_types || '["Debug", "Release"]' }}
link_modes: ${{ matrix.config.link_modes || '["static", "shared", "monolithic-shared"]' }}
install_test: ${{ matrix.config.install_test || false }}
windows:
name: Windows ${{ matrix.config.name }} Bazel
strategy:
fail-fast: false # Don't cancel all jobs if one fails.
matrix:
config:
# windows-msvc-2022-cxx{17,20}-{dbg,opt}-bazel.cfg
- name: MSVC 2022
toolchain: ci-windows-msvc
# windows-msvc-2022-alternate-options-cxx{17,20}-dbg-bazel.cfg (dbg only)
- name: MSVC 2022 Alternate Options
toolchain: ci-windows-msvc
alternate_options: true
compilation_modes: '["dbg"]'
# windows-clangcl-cxx17-fastbuild-bazel.cfg
- name: ClangCL
toolchain: windows-clangcl
stds: '["c++17"]'
compilation_modes: '["fastbuild"]'
uses: ./.github/workflows/bazel.yml
secrets: inherit
with:
os: windows-2022
toolchain: ${{ matrix.config.toolchain }}
remote_config: remote-cache
alternate_options: ${{ matrix.config.alternate_options || false }}
stds: ${{ matrix.config.stds || '["c++17", "c++20"]' }}
compilation_modes: ${{ matrix.config.compilation_modes || '["dbg", "opt"]' }}
macos:
name: macOS ${{ matrix.config.name }} Bazel
strategy:
fail-fast: false # Don't cancel all jobs if one fails.
matrix:
config:
# macos_xcode_bazel.cfg
- name: Xcode
# macos_xcode_alternate_options_bazel.cfg
- name: Xcode Alternate Options
alternate_options: true
uses: ./.github/workflows/bazel.yml
secrets: inherit
with:
os: macos-latest
toolchain: macos
remote_config: remote-cache
alternate_options: ${{ matrix.config.alternate_options || false }}
stds: ${{ matrix.config.stds || '["c++17"]' }}
compilation_modes: ${{ matrix.config.compilation_modes || '["fastbuild"]' }}
# Provide a single predictably-named job for copybara to look for
all-blocking-tests:
name: All Blocking Tests
needs: [linux, cmake, windows, macos]
runs-on: ubuntu-24.04
steps:
- name: Check for cancellations
if: ${{ contains(join(needs.*.result, ' '), 'cancelled') }}
run: echo "One or more tests were cancelled. If this was a presubmit job cancelled by a submit job, you can ignore this." && exit 1
- name: Check for failures
if: ${{ contains(join(needs.*.result, ' '), 'failure') }}
run: echo "One or more tests failed. Please check the logs above and fix the issues." && exit 1
# This workflow must run even if one or more of the dependent workflows
# failed.
if: always()