Add per-instance state lifecycle to VTableOverlay #2556
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| pull_request: | |
| branches: [main] | |
| push: | |
| branches: [main] | |
| release: | |
| types: [published] | |
| schedule: | |
| - cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00 | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| name: ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Rows omit fields that match these defaults: | |
| # python-version: '3.14' | |
| # flavor: '' (default — pull llvm-release from | |
| # ci-workflows' Releases cache) | |
| # arch is derived from the os slug inside setup-llvm; pass an | |
| # explicit `flavor-arch` only on hosts whose os name doesn't | |
| # carry the architecture (none of GHA's runner images today). | |
| # `flavor` selects the LLVM source per row: | |
| # '' latest LLVM (cells.yaml carries the cell) | |
| # system apt-llvm.org / brew llvm@N — for older majors | |
| # the package manager already ships | |
| # asan llvm-asan recipe | |
| # msan llvm-msan recipe (Linux x86_64 only) | |
| # cling llvm-root recipe + cling built on top | |
| include: | |
| # Ubuntu Arm | |
| - { name: ubu24-arm-gcc12-llvm22-vg, os: ubuntu-24.04-arm, compiler: gcc-12, clang-runtime: '22', Valgrind: On } | |
| # Ubuntu X86 | |
| - { name: ubu24-x86-gcc12-llvm22, os: ubuntu-24.04, compiler: gcc-12, clang-runtime: '22' } | |
| - { name: ubu24-x86-clang22-llvm22-asan-ubsan, os: ubuntu-24.04, compiler: clang-22, clang-runtime: '22', sanitizer: "Address;Undefined", flavor: asan } | |
| - { name: ubu24-x86-clang22-llvm22-msan, os: ubuntu-24.04, compiler: clang-22, clang-runtime: '22', sanitizer: "Memory", flavor: msan } | |
| - { name: ubu24-x86-gcc12-llvm21-cppyy-vg, os: ubuntu-24.04, compiler: gcc-12, clang-runtime: '21', cppyy: On, Valgrind: On, flavor: system } | |
| - { name: ubu24-x86-gcc12-llvm22-cppyy, os: ubuntu-24.04, compiler: gcc-12, clang-runtime: '22', cppyy: On } | |
| - { name: ubu24-x86-gcc14-cling-llvm20-cppyy, os: ubuntu-24.04, compiler: gcc-14, clang-runtime: '20', cling: 'On', cppyy: On, flavor: cling, flavor-version: 'cling-llvm20' } | |
| # selfh-ubu22-x86-gcc12-llvm22-cuda lives in `build-selfhost` | |
| # below; it's the only row that needs the dell awake. | |
| - name: ubu24-x86-gcc12-llvm22-vg | |
| os: ubuntu-24.04 | |
| compiler: gcc-12 | |
| clang-runtime: '22' | |
| Valgrind: On | |
| # MacOS Arm | |
| - { name: osx26-arm-clang-llvm22, os: macos-26, compiler: clang, clang-runtime: '22' } | |
| - { name: osx26-arm-clang-llvm21-cppyy, os: macos-26, compiler: clang, clang-runtime: '21', cppyy: On, flavor: system } | |
| - { name: osx26-arm-clang-cling-llvm20-cppyy, os: macos-26, compiler: clang, clang-runtime: '20', cling: 'On', cppyy: On, flavor: cling, flavor-version: 'ROOT-llvm20' } | |
| # MacOS X86 | |
| - { name: osx26-x86-clang-llvm21-cppyy, os: macos-26-intel, compiler: clang, clang-runtime: '21', cppyy: On, flavor: system } | |
| - { name: osx26-x86-clang-cling-llvm20-cppyy, os: macos-26-intel, compiler: clang, clang-runtime: '20', cling: 'On', cppyy: On, flavor: cling, flavor-version: 'ROOT-llvm20' } | |
| # Windows | |
| # No windows-11-arm row: x86 (win2025-msvc-llvm22) covers the | |
| # same MSVC+LLVM22 surface, and the arm runner ships an x64 | |
| # MSVC environment by default. ci-workflows can publish arm64 | |
| # .libs once `arch: arm64` lands in install-build-deps and the | |
| # poisoned arm64 cache entry is purged; restore the row then. | |
| - { name: win2025-msvc-llvm22, os: windows-2025, compiler: msvc, clang-runtime: '22' } | |
| - { name: win2025-msvc-cling-llvm20, os: windows-2025, compiler: msvc, clang-runtime: '20', cling: 'On', flavor: cling, flavor-version: 'ROOT-llvm20' } | |
| steps: &build_steps | |
| - uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version || '3.14' }} | |
| - name: Setup default Build Type | |
| uses: ./.github/actions/Miscellaneous/Select_Default_Build_Type | |
| - name: Setup compiler | |
| uses: ./.github/actions/Miscellaneous/Setup_Compiler | |
| with: | |
| compiler: ${{ matrix.compiler }} | |
| - name: Install dependencies | |
| uses: ./.github/actions/Miscellaneous/Install_Dependencies | |
| # One step replaces the old Restore-cache + Build_LLVM + | |
| # Setup-recipe + cling-on-top + Save-cache trio. flavor selects | |
| # the source: '' = llvm-release recipe (latest LLVM from | |
| # compiler-research/ci-workflows' Releases cache); 'system' = | |
| # apt-llvm.org or brew llvm@N for older majors the package | |
| # manager already ships; 'asan' = llvm-asan recipe; 'msan' = | |
| # llvm-msan recipe (Linux x86_64 only, bundled libc++); 'cling' = | |
| # llvm-root recipe + cling built on top inside the action. | |
| # `os:` reads matrix.self-hosted-os first so the self-hosted CUDA | |
| # row (whose matrix.os is the runs-on label array | |
| # `[self-hosted, cuda, heavy]`) can supply a string slug for | |
| # setup-llvm's string-typed input. Hosted-runner rows leave | |
| # self-hosted-os unset and fall through to matrix.os, which is | |
| # already a string for them. | |
| - name: Setup LLVM ${{ matrix.clang-runtime }}${{ matrix.flavor && format(' [{0}]', matrix.flavor) || '' }} | |
| uses: compiler-research/ci-workflows/actions/setup-llvm@main | |
| with: | |
| version: ${{ matrix.clang-runtime }} | |
| os: ${{ matrix.self-hosted-os || matrix.os }} | |
| flavor: ${{ matrix.flavor }} | |
| flavor-version: ${{ matrix.flavor-version }} | |
| - name: Setup code coverage | |
| if: ${{ success() && (matrix.coverage == true) }} | |
| run: | | |
| sudo apt-get install -y lcov | |
| echo "CODE_COVERAGE=1" >> $GITHUB_ENV | |
| echo "BUILD_TYPE=Debug" >> $GITHUB_ENV | |
| - name: Build and test CppInterOp | |
| uses: ./.github/actions/Build_and_Test_CppInterOp | |
| with: | |
| cling: ${{ matrix.cling }} | |
| clang_runtime: ${{ matrix.clang-runtime }} | |
| documentation: ${{ matrix.documentation }} | |
| sanitizer: ${{ matrix.sanitizer }} | |
| valgrind: ${{ matrix.Valgrind }} | |
| - name: Prepare code coverage report | |
| if: ${{ success() && (matrix.coverage == true) }} | |
| run: | | |
| # Create lcov report | |
| # capture coverage info | |
| vers="${CC#*-}" | |
| lcov --directory build/ --capture --output-file coverage.info --gcov-tool /usr/bin/gcov-${vers} | |
| lcov --remove coverage.info '/usr/*' ${{ github.workspace }}'/install/*' --ignore-errors unused --output-file coverage.info | |
| lcov --remove coverage.info '${{ github.workspace }}/unittests/*' --ignore-errors unused --output-file coverage.info | |
| lcov --remove coverage.info '${{ github.workspace }}/build/*' --ignore-errors unused --output-file coverage.info | |
| # output coverage data for debugging (optional) | |
| lcov --list coverage.info | |
| rm -rf ./build/ | |
| - name: Upload to codecov.io | |
| if: ${{ success() && (matrix.coverage == true) }} | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| files: ./coverage.info | |
| fail_ci_if_error: true | |
| verbose: true | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| - name: Build and test cppyy | |
| uses: ./.github/actions/Build_and_Test_cppyy | |
| with: | |
| cppyy: ${{ matrix.cppyy }} | |
| cling: ${{ matrix.cling }} | |
| valgrind: ${{ matrix.Valgrind }} | |
| clang_runtime: ${{ matrix.clang-runtime }} | |
| - name: Show debug info | |
| if: ${{ failure() }} | |
| shell: bash | |
| env: | |
| REPO: ${{ github.repository }} | |
| REPO_NAME: ${{ github.event.repository.name }} | |
| SHA: ${{ github.sha }} | |
| ROW: ${{ matrix.name }} | |
| run: | | |
| echo "::group::Reproduce this failure locally (requires Docker + nektos/act)" | |
| cat <<EOF | |
| git clone https://github.com/compiler-research/ci-workflows.git | |
| git clone https://github.com/$REPO.git | |
| cd $REPO_NAME | |
| git checkout $SHA | |
| ../ci-workflows/bin/repro $ROW | |
| EOF | |
| echo "::endgroup::" | |
| echo "::group::Environment" | |
| export | |
| echo "$GITHUB_ENV" | |
| echo "::endgroup::" | |
| - name: Setup tmate session | |
| if: ${{ failure() && runner.debug }} | |
| uses: mxschmitt/action-tmate@v3 | |
| # When debugging increase to a suitable value! | |
| timeout-minutes: 30 | |
| # The dell sleeps between runs; wake it before build-selfhost | |
| # dispatches to it. | |
| prepare-dell: | |
| runs-on: [self-hosted, spotter] | |
| steps: | |
| - uses: compiler-research/ci-workflows/actions/wake-on-lan@main | |
| with: | |
| mac: a4:bb:6d:51:d5:d2 | |
| target-host: 192.168.100.30 | |
| build-selfhost: | |
| needs: prepare-dell | |
| name: ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Self-hosted runs ubuntu-22.04 (jammy); no llvm-release cell | |
| # for that runner image. flavor: system pulls from | |
| # apt-llvm.org, which mirrors what the old in-line | |
| # `Install LLVM-N dependencies on self-hosted` block did. | |
| # self-hosted-os is the string slug setup-llvm needs for | |
| # downstream cache-key purposes; matrix.os here is an array | |
| # (the runs-on label set), and arrays can't flow into | |
| # string-typed action inputs. | |
| - name: selfh-ubu22-x86-gcc12-llvm22-cuda | |
| os: [self-hosted, cuda, heavy] | |
| self-hosted-os: ubuntu-22.04 | |
| compiler: gcc-12 | |
| clang-runtime: '22' | |
| flavor: system | |
| coverage: true | |
| steps: *build_steps |