re-run analysis in Python tests with cached results when TEST_CPPCHECK_INJECT_BUILDDIR is specified
#21465
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
| # Syntax reference https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions | |
| # Environment reference https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners | |
| name: CI-unixish | |
| on: | |
| push: | |
| branches: | |
| - 'main' | |
| - 'releases/**' | |
| - '2.*' | |
| tags: | |
| - '2.*' | |
| pull_request: | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| strategy: | |
| matrix: | |
| os: [ubuntu-22.04, macos-15] | |
| include: | |
| - xdist_n: auto | |
| # FIXME: test_color_tty fails with xdist - see #13278 | |
| - os: macos-15 | |
| xdist_n: '1' | |
| fail-fast: false # Prefer quick result | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - name: ccache | |
| uses: hendrikmuhs/ccache-action@v1.2 | |
| with: | |
| key: ${{ github.workflow }}-${{ github.job }}-${{ matrix.os }} | |
| - name: Install missing software on ubuntu | |
| if: contains(matrix.os, 'ubuntu') | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install libxml2-utils | |
| # packages for strict cfg checks | |
| - name: Install missing software on ubuntu 22.04 (cfg) | |
| if: matrix.os == 'ubuntu-22.04' | |
| run: | | |
| sudo apt-get install libcairo2-dev libcurl4-openssl-dev liblua5.3-dev libssl-dev libsqlite3-dev libcppunit-dev libsigc++-2.0-dev libgtk-3-dev libboost-all-dev libselinux-dev libwxgtk3.0-gtk3-dev xmlstarlet qtbase5-dev | |
| # coreutils contains "nproc" | |
| - name: Install missing software on macos | |
| if: contains(matrix.os, 'macos') | |
| run: | | |
| # pcre was removed from runner images in November 2022 | |
| brew install coreutils pcre gnu-sed | |
| - name: Install missing Python packages on ubuntu | |
| if: contains(matrix.os, 'ubuntu') | |
| run: | | |
| python3 -m pip install pip --upgrade | |
| python3 -m pip install pytest | |
| python3 -m pip install pytest-timeout | |
| python3 -m pip install pytest-xdist | |
| python3 -m pip install psutil | |
| # we need to use -break-system-packages --user because the common approaches do not work. | |
| # using pip works but it appears to install the packages into a different Python installation so they are not found later on. | |
| # using python3 -m pip without the additional flags fails since the packages are being managed by a different tool (brew) and that lacks some of the packages. | |
| # using pipx also does not work. | |
| - name: Install missing Python packages on macos | |
| if: contains(matrix.os, 'macos') | |
| run: | | |
| python3 -m pip install --break-system-packages --user pip --upgrade | |
| python3 -m pip install --break-system-packages --user pytest | |
| python3 -m pip install --break-system-packages --user pytest-timeout | |
| python3 -m pip install --break-system-packages --user pytest-xdist | |
| python3 -m pip install --break-system-packages --user psutil | |
| - name: Build cppcheck | |
| run: | | |
| export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" | |
| make -j$(nproc) CXXOPTS="-Werror" HAVE_RULES=yes | |
| - name: Build test | |
| run: | | |
| export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" | |
| make -j$(nproc) CXXOPTS="-Werror" HAVE_RULES=yes testrunner | |
| - name: Run test | |
| run: | | |
| make -j$(nproc) HAVE_RULES=yes test | |
| # requires "gnu-sed" installed on macos | |
| - name: Run extra tests | |
| run: | | |
| test/scripts/generate_and_run_more_tests.sh | |
| - name: Run test/cli | |
| run: | | |
| python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} test/cli | |
| # TODO: use the step below instead | |
| # do not use pushd in this step since we go below the working directory | |
| - name: Run test/cli (symlink) | |
| run: | | |
| cd .. | |
| ln -s cppcheck 'cpp check' | |
| cd 'cpp check/test/cli' | |
| python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} | |
| # FIXME: proj2_test.py fails because of the relative path cleanups in ImportProject::setRelativePaths() | |
| # It fails because the application path used as base path has its symlink resolved by getcwd(). | |
| - name: Run test/cli (symlink) | |
| if: false | |
| run: | | |
| ln -s . 'cpp check' | |
| python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} 'cpp check/test/cli' | |
| - name: Run test/cli (-j2) | |
| run: | | |
| python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} test/cli | |
| env: | |
| TEST_CPPCHECK_INJECT_J: 2 | |
| - name: Run test/cli (--clang) | |
| if: false | |
| run: | | |
| python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} test/cli | |
| env: | |
| TEST_CPPCHECK_INJECT_CLANG: clang | |
| - name: Run test/cli (--cppcheck-build-dir) | |
| run: | | |
| python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} test/cli | |
| env: | |
| TEST_CPPCHECK_INJECT_BUILDDIR: injected | |
| - name: Run cfg tests | |
| if: matrix.os != 'ubuntu-22.04' | |
| run: | | |
| make -j$(nproc) checkcfg | |
| - name: Run cfg tests (strict) | |
| if: matrix.os == 'ubuntu-22.04' | |
| run: | | |
| make -j$(nproc) checkcfg | |
| env: | |
| STRICT: 1 | |
| - name: Run --dump test | |
| run: | | |
| ./cppcheck test/testpreprocessor.cpp --dump | |
| xmllint --noout test/testpreprocessor.cpp.dump | |
| - name: Validate | |
| run: | | |
| make -j$(nproc) checkCWEEntries validateXML | |
| - name: Test install | |
| run: | | |
| # this is only to test the "install" target - since we did not build with FILESDIR it would not work as intended | |
| make DESTDIR=cppcheck-make-install FILESDIR=/share/Cppcheck install | |
| rm -rf cppcheck-make-install | |
| - name: Test Signalhandler | |
| run: | | |
| cmake -S . -B build.cmake.signal -G "Unix Makefiles" -DBUILD_TESTS=On -DCMAKE_COMPILE_WARNING_AS_ERROR=On | |
| cmake --build build.cmake.signal --target test-signalhandler -- -j$(nproc) | |
| # TODO: how to run this without copying the file? | |
| cp build.cmake.signal/bin/test-s* . | |
| python3 -m pytest -Werror --strict-markers -vv test/signal/test-signalhandler.py | |
| rm test-signalhandler | |
| # no unix backtrace support on MacOs | |
| - name: Test Stacktrace | |
| if: contains(matrix.os, 'ubuntu') | |
| run: | | |
| cmake -S . -B build.cmake.stack -G "Unix Makefiles" -DBUILD_TESTS=On -DCMAKE_COMPILE_WARNING_AS_ERROR=On | |
| cmake --build build.cmake.stack --target test-stacktrace -- -j$(nproc) | |
| # TODO: how to run this without copying the file? | |
| cp build.cmake.stack/bin/test-s* . | |
| python3 -m pytest -Werror --strict-markers -vv test/signal/test-stacktrace.py | |
| rm test-stacktrace | |
| # TODO: move to scriptcheck.yml so these are tested with all Python versions? | |
| - name: Test addons | |
| run: | | |
| set -x | |
| ./cppcheck --error-exitcode=1 --inline-suppr --addon=threadsafety addons/test/threadsafety | |
| ./cppcheck --error-exitcode=1 --inline-suppr --addon=threadsafety --std=c++03 addons/test/threadsafety | |
| ./cppcheck --error-exitcode=1 --inline-suppr --addon=misra addons/test/misra/crash*.c | |
| ./cppcheck --error-exitcode=1 --inline-suppr --addon=misra --enable=information addons/test/misra/config*.c | |
| ./cppcheck --addon=misra --enable=style --inline-suppr --enable=information --error-exitcode=1 addons/test/misra/misra-ctu-*-test.c | |
| pushd addons/test | |
| # We'll force C89 standard to enable an additional verification for | |
| # rules 5.4 and 5.5 which have standard-dependent options. | |
| ../../cppcheck --dump -DDUMMY --suppress=uninitvar --inline-suppr misra/misra-test.c --std=c89 --platform=unix64 | |
| python3 ../misra.py -verify misra/misra-test.c.dump | |
| # Test slight MISRA differences in C11 standard | |
| ../../cppcheck --dump -DDUMMY --suppress=uninitvar --inline-suppr misra/misra-test-c11.c --std=c11 --platform=unix64 | |
| python3 ../misra.py -verify misra/misra-test-c11.c.dump | |
| # TODO: do we need to verify something here? | |
| ../../cppcheck --dump -DDUMMY --suppress=uninitvar --suppress=uninitStructMember --std=c89 misra/misra-test.h | |
| ../../cppcheck --dump misra/misra-test.cpp | |
| python3 ../misra.py -verify misra/misra-test.cpp.dump | |
| python3 ../misra.py --rule-texts=misra/misra2012_rules_dummy_ascii.txt -verify misra/misra-test.cpp.dump | |
| python3 ../misra.py --rule-texts=misra/misra2012_rules_dummy_utf8.txt -verify misra/misra-test.cpp.dump | |
| python3 ../misra.py --rule-texts=misra/misra2012_rules_dummy_windows1250.txt -verify misra/misra-test.cpp.dump | |
| ../../cppcheck --addon=misra --enable=style --platform=avr8 --error-exitcode=1 misra/misra-test-avr8.c | |
| ../../cppcheck --dump misc-test.cpp | |
| python3 ../misc.py -verify misc-test.cpp.dump | |
| ../../cppcheck --dump naming_test.c | |
| python3 ../naming.py --var='[a-z].*' --function='[a-z].*' naming_test.c.dump | |
| ../../cppcheck --dump naming_test.cpp | |
| python3 ../naming.py --var='[a-z].*' --function='[a-z].*' naming_test.cpp.dump | |
| # TODO: run with "-n auto" when misra_test.py can be run in parallel | |
| - name: test addons (Python) | |
| if: matrix.os != 'ubuntu-22.04' | |
| run: | | |
| python3 -m pytest -Werror --strict-markers -vv -n 1 addons/test | |
| env: | |
| PYTHONPATH: ./addons | |
| # TODO: run with "-n auto" when misra_test.py can be run in parallel | |
| # we cannot specify -Werror since xml/etree/ElementTree.py in Python 3.10 contains an unclosed file | |
| - name: test addons (Python) | |
| if: matrix.os == 'ubuntu-22.04' | |
| run: | | |
| python3 -m pytest --strict-markers -vv -n 1 addons/test | |
| env: | |
| PYTHONPATH: ./addons | |
| - name: Build democlient | |
| if: matrix.os == 'ubuntu-22.04' | |
| run: | | |
| warnings="-pedantic -Wall -Wextra -Wcast-qual -Wno-deprecated-declarations -Wfloat-equal -Wmissing-declarations -Wmissing-format-attribute -Wno-long-long -Wpacked -Wredundant-decls -Wundef -Wno-shadow -Wno-missing-field-initializers -Wno-missing-braces -Wno-sign-compare -Wno-multichar" | |
| g++ $warnings -c -Ilib -Iexternals/tinyxml2 democlient/democlient.cpp |