Skip to content

Workflow file for this run

# This file defines pre-commit CI for libc++, libc++abi, and libunwind (on Github).
#
# We split the configurations in multiple stages with the intent of saving compute time
# when a job fails early in the pipeline. This is why the jobs are marked as `continue-on-error: false`.
# We try to run the CI configurations with the most signal in the first stage.
#
# Stages 1 & 2 are meant to be "smoke tests", and are meant to catch most build/test failures quickly and without using
# too many resources.
# Stage 3 is "everything else", and is meant to catch breakages on more niche or unique configurations.
#
# Therefore, we "fail-fast" for any failures during stages 1 & 2, meaning any job failing cancels all other running jobs,
# under the assumption that if the "smoke tests" fail, then the other configurations will likely fail in the same way.
# However, stage 3 does not fail fast, as it's more likely that any one job failing is a flake or a configuration-specific
#
name: Build and Test libc++
on:
workflow_dispatch:
inputs:
ref:
description: 'ref'
required: true
run_stages:
description: 'Stages to run'
required: true
default: [1, 2, 3]
env:
CMAKE: "/opt/bin/cmake"
# LLVM POST-BRANCH bump version
# LLVM POST-BRANCH add compiler test for ToT - 1, e.g. "Clang 17"
# LLVM RELEASE bump remove compiler ToT - 3, e.g. "Clang 15"
LLVM_HEAD_VERSION: "18" # Used compiler, update POST-BRANCH.
LLVM_PREVIOUS_VERSION: "17"
LLVM_OLDEST_VERSION: "16"
GCC_STABLE_VERSION: "13"
LLVM_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer-18"
CLANG_CRASH_DIAGNOSTICS_DIR: "crash_diagnostics"
jobs:
stage1:
if: ${{ contains(inputs.run_stages, 1) }}
runs-on: rizzo-runner-64-set
continue-on-error: false
strategy:
fail-fast: true
matrix:
config: [
'generic-cxx03',
'generic-cxx26',
'generic-modules'
]
cc: [ 'clang-18' ]
cxx: [ 'clang++-18' ]
clang_tidy: [ 'ON' ]
include:
- config: 'generic-gcc'
cc: 'gcc-13'
cxx: 'g++-13'
clang_tidy: 'OFF'
steps:
- uses: actions/checkout@v4
with:
repository: llvm/llvm-project
ref: ${{ github.event.inputs.ref }}
- name: ${{ matrix.config }}.${{ matrix.cxx }}
run: libcxx/utils/ci/run-buildbot ${{ matrix.config }}
env:
CC: ${{ matrix.cc }}
CXX: ${{ matrix.cxx }}
ENABLE_CLANG_TIDY: ${{ matrix.clang_tidy }}
- uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ matrix.config }}-${{ matrix.cxx }}-results
path: |
**/test-results.xml
**/*.abilist
**/CMakeError.log
**/CMakeOutput.log
**/crash_diagnostics/*
stage2:
if: ${{ contains(github.event.inputs.run_stages, 2) }}
runs-on: rizzo-runner-64-set
needs: [ stage1 ]
continue-on-error: false
strategy:
fail-fast: true
matrix:
config: [
'generic-cxx11',
'generic-cxx14',
'generic-cxx17',
'generic-cxx20',
'generic-cxx23'
]
cc: [ 'clang-18' ]
cxx: [ 'clang++-18' ]
clang_tidy: [ 'ON' ]
include:
- config: 'generic-gcc-cxx11'
cc: 'gcc-13'
cxx: 'g++-13'
clang_tidy: 'OFF'
- config: 'generic-cxx23'
cc: 'clang-16'
cxx: 'clang++-16'
clang_tidy: 'OFF'
- config: 'generic-cxx23'
cc: 'clang-17'
cxx: 'clang++-17'
clang_tidy: 'OFF'
steps:
- uses: actions/checkout@v4
- name: ${{ matrix.config }}
run: libcxx/utils/ci/run-buildbot ${{ matrix.config }}
env:
CC: ${{ matrix.cc }}
CXX: ${{ matrix.cxx }}
ENABLE_CLANG_TIDY: ${{ matrix.clang_tidy }}
- uses: actions/upload-artifact@v3
if: always() # Upload artifacts even if the build or test suite fails
with:
name: ${{ matrix.config }}-results
path: |
**/test-results.xml
**/*.abilist
**/CMakeError.log
**/CMakeOutput.log
**/crash_diagnostics/*
stage3:
if: ${{ contains(github.event.inputs.run_stages, 3) }}
needs: [ stage1, stage2 ]
continue-on-error: false
strategy:
fail-fast: false
max-parallel: 8
matrix:
config: [
'generic-abi-unstable',
'generic-hardening-mode-debug',
'generic-hardening-mode-extensive',
'generic-hardening-mode-fast',
'generic-hardening-mode-fast-with-abi-breaks',
'generic-merged',
'generic-modules-lsv',
'generic-no-exceptions',
'generic-no-experimental',
'generic-no-filesystem',
'generic-no-localization',
'generic-no-random_device',
'generic-no-threads',
'generic-no-tzdb',
'generic-no-unicode',
'generic-no-wide-characters',
'generic-static',
'generic-with_llvm_unwinder'
]
machine: [ 'libcxx-runners-8' ]
std_modules: [ 'OFF' ]
include:
- config: 'generic-cxx26'
machine: libcxx-runners-8
std_modules: 'ON'
- config: 'generic-asan'
machine: libcxx-runners-8
std_modules: 'OFF'
- config: 'generic-tsan'
machine: libcxx-runners-8
std_modules: 'OFF'
- config: 'generic-ubsan'
machine: libcxx-runners-8
std_modules: 'OFF'
# Use a larger machine for MSAN to avoid timeout and memory allocation issues.
- config: 'generic-msan'
machine: libcxx-runners-32
std_modules: 'OFF'
runs-on: rizzo-runner-64-set
steps:
- uses: actions/checkout@v4
- name: ${{ matrix.config }}
run: libcxx/utils/ci/run-buildbot ${{ matrix.config }}
env:
CC: clang-18
CXX: clang++-18
ENABLE_CLANG_TIDY: "OFF"
ENABLE_STD_MODULES: ${{ matrix.std_modules }}
- uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ matrix.config }}-results
path: |
**/test-results.xml
**/*.abilist
**/CMakeError.log
**/CMakeOutput.log
**/crash_diagnostics/*