| # 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() |