Unverified Commit 9ed4a57e authored by Eric's avatar Eric Committed by GitHub
Browse files

Add libc++ github actions workflow to replace buildkite (#71836)

This change ports almost all of the linux buildkite builders to github
actions.

I would like to have this transition occur as soon as possible.
parent 26ce3e42
Loading
Loading
Loading
Loading
+196 −0
Original line number Diff line number Diff line
# 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'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
  cancel-in-progress: true


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:
    runs-on: libcxx-runners-16
    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
      - 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:
    runs-on: libcxx-runners-8
    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:
    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-16
          std_modules: 'OFF'
        - config: 'generic-tsan'
          machine: libcxx-runners-16
          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-30
          std_modules: 'OFF'
    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"
          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/*
  
+0 −278
Original line number Diff line number Diff line
@@ -101,147 +101,6 @@ environment_definitions:


steps:
  #
  # General testing with the default configuration, under all the supported
  # Standard modes, with Clang and GCC. This catches most issues upfront.
  # The goal of this step is to catch most issues while being very fast.
  #
- label: GCC ${GCC_STABLE_VERSION} / C++latest
  command: libcxx/utils/ci/run-buildbot generic-gcc
  env:
    <<: *common_env
    CC: gcc-${GCC_STABLE_VERSION}
    CXX: g++-${GCC_STABLE_VERSION}
  <<: *common
  <<: *linux_agent
  


- label: C++26
  command: libcxx/utils/ci/run-buildbot generic-cxx26
  env:
    <<: *common_env
    <<: *absolute_path_clang
  <<: *linux_agent
  <<: *common

- label: Modular build
  command: libcxx/utils/ci/run-buildbot generic-modules
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: C++11
  command: libcxx/utils/ci/run-buildbot generic-cxx11
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: C++03
  command: libcxx/utils/ci/run-buildbot generic-cxx03
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

  #
  # All other supported configurations of libc++.
  #
- wait

- label: C++23
  command: libcxx/utils/ci/run-buildbot generic-cxx23
  env:
    <<: *common_env
    <<: *absolute_path_clang
    ENABLE_STD_MODULES: 'On'
  <<: *linux_agent
  <<: *common

- label: C++20
  command: libcxx/utils/ci/run-buildbot generic-cxx20
  env:
    <<: *common_env
    <<: *absolute_path_clang
    ENABLE_STD_MODULES: 'On'
  <<: *linux_agent
  <<: *common

- label: C++17
  command: libcxx/utils/ci/run-buildbot generic-cxx17
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: C++14
  command: libcxx/utils/ci/run-buildbot generic-cxx14
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: GCC ${GCC_STABLE_VERSION} / C++11
  command: libcxx/utils/ci/run-buildbot generic-gcc-cxx11
  env:
    <<: *common_env
    CC: gcc-${GCC_STABLE_VERSION}
    CXX: g++-${GCC_STABLE_VERSION}
  <<: *linux_agent
  <<: *common

- label: Clang 16
  command: libcxx/utils/ci/run-buildbot generic-cxx23
  env:
    <<: *common_env
    CC: clang-16
    CXX: clang++-16
    ENABLE_STD_MODULES: 'Off'
  <<: *linux_agent
  <<: *common

- label: Clang 17
  command: libcxx/utils/ci/run-buildbot generic-cxx23
  env:
    <<: *common_env
    CC: /usr/lib/llvm-17/bin/clang
    CXX: /usr/lib/llvm-17/bin/clang++
  <<: *linux_agent
  <<: *common

- group: Sanitizers
  steps:
  - label: ASAN
    command: libcxx/utils/ci/run-buildbot generic-asan
    env:
      <<: *common_env
    <<: *linux_agent
    <<: *common

  - label: TSAN
    command: libcxx/utils/ci/run-buildbot generic-tsan
    env:
      <<: *common_env
    <<: *linux_agent
    <<: *common

  - label: UBSAN
    command: libcxx/utils/ci/run-buildbot generic-ubsan
    env:
      <<: *common_env
    <<: *linux_agent
    <<: *common

  - label: MSAN
    command: libcxx/utils/ci/run-buildbot generic-msan
    env:
      <<: *common_env
    <<: *linux_agent
    <<: *common


- label: Bootstrapping build
  command: libcxx/utils/ci/run-buildbot bootstrapping-build
  env:
@@ -249,143 +108,6 @@ steps:
  <<: *linux_agent
  <<: *common

- label: Static libraries
  command: libcxx/utils/ci/run-buildbot generic-static
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: Shared library with merged ABI and unwinder libraries
  command: libcxx/utils/ci/run-buildbot generic-merged
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: Fast hardening mode
  command: libcxx/utils/ci/run-buildbot generic-hardening-mode-fast
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: Fast hardening mode with ABI breaks
  command: libcxx/utils/ci/run-buildbot generic-hardening-mode-fast-with-abi-breaks
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: Extensive hardening mode
  command: libcxx/utils/ci/run-buildbot generic-hardening-mode-extensive
  env:
    <<: *common_env
    <<: *absolute_path_clang
  <<: *linux_agent
  <<: *common

- label: Debug hardening mode
  command: libcxx/utils/ci/run-buildbot generic-hardening-mode-debug
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: With LLVM's libunwind
  command: libcxx/utils/ci/run-buildbot generic-with_llvm_unwinder
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: Modular build with Local Submodule Visibility
  command: libcxx/utils/ci/run-buildbot generic-modules-lsv
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- group: Parts disabled
  steps:
  - label: No threads
    command: libcxx/utils/ci/run-buildbot generic-no-threads
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common


  - label: No filesystem
    command: libcxx/utils/ci/run-buildbot generic-no-filesystem
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common

  - label: No random device
    command: libcxx/utils/ci/run-buildbot generic-no-random_device
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common

  - label: No locale
    command: libcxx/utils/ci/run-buildbot generic-no-localization
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common

  - label: No Unicode
    command: libcxx/utils/ci/run-buildbot generic-no-unicode
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common

  - label: No wide characters
    command: libcxx/utils/ci/run-buildbot generic-no-wide-characters
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common

  - label: No time zone database
    command: libcxx/utils/ci/run-buildbot generic-no-tzdb
    env:
      <<: *common_env
    <<: *linux_agent
    <<: *common

  - label: No experimental features
    command: libcxx/utils/ci/run-buildbot generic-no-experimental
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common
  - label: No exceptions
    command: libcxx/utils/ci/run-buildbot generic-no-exceptions
    env:
      <<: *common_env
      <<: *absolute_path_clang
    <<: *linux_agent
    <<: *common

- label: Unstable ABI
  command: libcxx/utils/ci/run-buildbot generic-abi-unstable
  env:
    <<: *common_env
  <<: *linux_agent
  <<: *common

- label: Benchmarks
  command: libcxx/utils/ci/run-buildbot benchmarks
  env: