clang-tidy.yml: updated to Clang 21 (#421) #21
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-unixish | |
| on: [push, pull_request] | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| strategy: | |
| matrix: | |
| os: [ubuntu-22.04, ubuntu-24.04, macos-13, macos-14, macos-15] | |
| compiler: [clang++] | |
| include: | |
| - os: ubuntu-22.04 | |
| compiler: g++ | |
| - os: ubuntu-24.04 | |
| compiler: g++ | |
| fail-fast: false | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| CXX: ${{ matrix.compiler }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| # the man-db trigger causes package installations to stall for several minutes at times. so just drop the package. | |
| # see https://github.com/actions/runner/issues/4030 | |
| - name: Remove man-db package on ubuntu | |
| if: matrix.os == 'ubuntu-24.04' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get remove man-db | |
| - name: Install missing software on ubuntu | |
| if: matrix.os == 'ubuntu-24.04' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install valgrind | |
| - name: Install missing software on ubuntu (clang++) | |
| if: matrix.os == 'ubuntu-24.04' && matrix.compiler == 'clang++' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install libc++-18-dev | |
| # coreutils contains "nproc" | |
| - name: Install missing software on macos | |
| if: contains(matrix.os, 'macos') | |
| run: | | |
| brew install coreutils | |
| - name: Install missing Python packages | |
| run: | | |
| python3 -m pip config set global.break-system-packages true | |
| python3 -m pip install pytest | |
| - name: make simplecpp | |
| run: make -j$(nproc) CXXOPTS="-Werror" | |
| - name: make test | |
| run: make -j$(nproc) test CXXOPTS="-Werror" | |
| - name: selfcheck | |
| run: | | |
| make -j$(nproc) selfcheck | |
| - name: make testrunner (c++17) | |
| run: | | |
| make clean | |
| make -j$(nproc) testrunner CXXOPTS="-std=c++17" | |
| - name: make testrunner (c++20) | |
| run: | | |
| make clean | |
| make -j$(nproc) testrunner CXXOPTS="-std=c++20" | |
| - name: Run CMake | |
| run: | | |
| cmake -S . -B cmake.output -Werror=dev --warn-uninitialized -DCMAKE_COMPILE_WARNING_AS_ERROR=On | |
| - name: CMake simplecpp | |
| run: | | |
| cmake --build cmake.output --target simplecpp -- -j $(nproc) | |
| - name: CMake testrunner | |
| run: | | |
| cmake --build cmake.output --target testrunner -- -j $(nproc) | |
| ./cmake.output/testrunner | |
| # Re-run tests from within the build directory to validate that | |
| # SIMPLECPP_TEST_SOURCE_DIR is correctly defined and resolved | |
| (cd cmake.output && ./testrunner) | |
| - name: Run valgrind | |
| if: matrix.os == 'ubuntu-24.04' | |
| run: | | |
| make clean | |
| make -j$(nproc) | |
| valgrind --leak-check=full --num-callers=50 --show-reachable=yes --track-origins=yes --gen-suppressions=all --error-exitcode=42 ./testrunner | |
| valgrind --leak-check=full --num-callers=50 --show-reachable=yes --track-origins=yes --gen-suppressions=all --error-exitcode=42 ./simplecpp simplecpp.cpp -e | |
| - name: Run with libstdc++ debug mode | |
| if: matrix.os == 'ubuntu-24.04' && matrix.compiler == 'g++' | |
| run: | | |
| make clean | |
| make -j$(nproc) test selfcheck CXXOPTS="-Werror -g3 -D_GLIBCXX_DEBUG" | |
| - name: Run with libc++ hardening mode | |
| if: matrix.os == 'ubuntu-24.04' && matrix.compiler == 'clang++' | |
| run: | | |
| make clean | |
| make -j$(nproc) test selfcheck CXXOPTS="-Werror -stdlib=libc++ -g3 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG" LDOPTS="-lc++" | |
| - name: Run AddressSanitizer | |
| if: matrix.os == 'ubuntu-24.04' | |
| run: | | |
| make clean | |
| make -j$(nproc) test selfcheck CXXOPTS="-Werror -O2 -g3 -fsanitize=address" LDOPTS="-fsanitize=address" | |
| env: | |
| ASAN_OPTIONS: detect_stack_use_after_return=1 | |
| - name: Run UndefinedBehaviorSanitizer | |
| if: matrix.os == 'ubuntu-24.04' | |
| run: | | |
| make clean | |
| make -j$(nproc) test selfcheck CXXOPTS="-Werror -O2 -g3 -fsanitize=undefined -fno-sanitize=signed-integer-overflow" LDOPTS="-fsanitize=undefined -fno-sanitize=signed-integer-overflow" | |
| env: | |
| UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1:report_error_type=1 | |
| # TODO: requires instrumented libc++ | |
| - name: Run MemorySanitizer | |
| if: false && matrix.os == 'ubuntu-24.04' && matrix.compiler == 'clang++' | |
| run: | | |
| make clean | |
| make -j$(nproc) test selfcheck CXXOPTS="-Werror -O2 -g3 -stdlib=libc++ -fsanitize=memory" LDOPTS="-lc++ -fsanitize=memory" | |
| - name: Run callgrind | |
| if: matrix.os == 'ubuntu-24.04' | |
| run: | | |
| wget https://github.com/danmar/simplecpp/archive/refs/tags/1.5.1.tar.gz | |
| tar xvf 1.5.1.tar.gz | |
| make clean | |
| make -j$(nproc) CXXOPTS="-O2 -g3" | |
| valgrind --tool=callgrind ./simplecpp -e simplecpp-1.5.1/simplecpp.cpp 2>callgrind.log || (cat callgrind.log && false) | |
| cat callgrind.log | |
| callgrind_annotate --auto=no > callgrind.annotated.log | |
| head -50 callgrind.annotated.log | |
| - uses: actions/upload-artifact@v4 | |
| if: matrix.os == 'ubuntu-24.04' | |
| with: | |
| name: Callgrind Output - ${{ matrix.compiler }} | |
| path: | | |
| ./callgrind.* |