201 lines
6.6 KiB
YAML
201 lines
6.6 KiB
YAML
# 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:
|
|
pull_request:
|
|
paths:
|
|
- 'libcxx/**'
|
|
- 'libcxxabi/**'
|
|
- 'libunwind/**'
|
|
- 'runtimes/**'
|
|
- 'cmake/**'
|
|
- '.github/workflows/libcxx-build-and-test.yaml'
|
|
schedule:
|
|
# Run nightly at 08:00 UTC (aka 00:00 Pacific, aka 03:00 Eastern)
|
|
- cron: '0 8 * * *'
|
|
|
|
permissions:
|
|
contents: read # Default everything to read-only
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
|
|
cancel-in-progress: true
|
|
|
|
|
|
env:
|
|
# 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: github.repository_owner == 'llvm'
|
|
runs-on: libcxx-runners-8-set
|
|
continue-on-error: false
|
|
strategy:
|
|
fail-fast: false
|
|
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
|
|
- 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: github.repository_owner == 'llvm'
|
|
runs-on: libcxx-runners-8-set
|
|
needs: [ stage1 ]
|
|
continue-on-error: false
|
|
strategy:
|
|
fail-fast: false
|
|
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: github.repository_owner == 'llvm'
|
|
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-no-rtti',
|
|
'generic-optimized-speed',
|
|
'generic-static',
|
|
# TODO Find a better place for the benchmark and bootstrapping builds to live. They're either very expensive
|
|
# or don't provide much value since the benchmark run results are too noise on the bots.
|
|
'benchmarks',
|
|
'bootstrapping-build'
|
|
]
|
|
machine: [ 'libcxx-runners-8-set' ]
|
|
include:
|
|
- config: 'generic-cxx26'
|
|
machine: libcxx-runners-8-set
|
|
- config: 'generic-asan'
|
|
machine: libcxx-runners-8-set
|
|
- config: 'generic-tsan'
|
|
machine: libcxx-runners-8-set
|
|
- config: 'generic-ubsan'
|
|
machine: libcxx-runners-8-set
|
|
# Use a larger machine for MSAN to avoid timeout and memory allocation issues.
|
|
- config: 'generic-msan'
|
|
machine: libcxx-runners-8-set
|
|
runs-on: ${{ matrix.machine }}
|
|
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"
|
|
- uses: actions/upload-artifact@v3
|
|
if: always()
|
|
with:
|
|
name: ${{ matrix.config }}-results
|
|
path: |
|
|
**/test-results.xml
|
|
**/*.abilist
|
|
**/CMakeError.log
|
|
**/CMakeOutput.log
|
|
**/crash_diagnostics/*
|