Improved addon execution errorhandling #12155
Workflow file for this run
This file contains 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
# Some convenient links: | |
# - https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md | |
# | |
name: CI-windows | |
on: | |
push: | |
branches: | |
- 'main' | |
- 'releases/**' | |
tags: | |
- '2.*' | |
pull_request: | |
permissions: | |
contents: read | |
defaults: | |
run: | |
shell: cmd | |
# TODO: choose/add a step to bail out on compiler warnings (maybe even the release build) | |
jobs: | |
build_qt: | |
strategy: | |
matrix: | |
os: [windows-2019, windows-2022] | |
qt_ver: [5.15.2, 6.2.4, 6.5.0] | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Visual Studio environment | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: x64 | |
- name: Install Qt ${{ matrix.qt_ver }} | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ matrix.qt_ver }} | |
modules: 'qtcharts' | |
cache: true | |
- name: Build GUI release (qmake) | |
if: startsWith(matrix.qt_ver, '5') | |
run: | | |
cd gui || exit /b !errorlevel! | |
qmake HAVE_QCHART=yes || exit /b !errorlevel! | |
nmake release || exit /b !errorlevel! | |
env: | |
CL: /MP | |
- name: Deploy GUI | |
if: startsWith(matrix.qt_ver, '5') | |
run: | | |
windeployqt Build\gui || exit /b !errorlevel! | |
del Build\gui\cppcheck-gui.ilk || exit /b !errorlevel! | |
del Build\gui\cppcheck-gui.pdb || exit /b !errorlevel! | |
- name: Build GUI release (CMake) | |
if: startsWith(matrix.qt_ver, '6') | |
run: | | |
cmake -S . -B build -DBUILD_GUI=On -DWITH_QCHART=On -DUSE_QT6=On || exit /b !errorlevel! | |
cmake --build build --target cppcheck-gui || exit /b !errorlevel! | |
# TODO: deploy with CMake/Qt6 | |
build: | |
strategy: | |
matrix: | |
os: [windows-2019, windows-2022] | |
config: [debug, release] | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
env: | |
# see https://www.pcre.org/original/changelog.txt | |
PCRE_VERSION: 8.45 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python 3.11 | |
if: matrix.config == 'release' | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
check-latest: true | |
- name: Set up Visual Studio environment | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: x64 | |
- name: Cache PCRE | |
id: cache-pcre | |
uses: actions/cache@v3 | |
with: | |
path: | | |
externals\pcre.h | |
externals\pcre.lib | |
externals\pcre64.lib | |
key: pcre-${{ env.PCRE_VERSION }}-x64-bin-win | |
- name: Download PCRE | |
if: steps.cache-pcre.outputs.cache-hit != 'true' | |
run: | | |
curl -fsSL https://github.com/pfultz2/pcre/archive/refs/tags/%PCRE_VERSION%.zip -o pcre-%PCRE_VERSION%.zip || exit /b !errorlevel! | |
- name: Install PCRE | |
if: steps.cache-pcre.outputs.cache-hit != 'true' | |
run: | | |
7z x pcre-%PCRE_VERSION%.zip || exit /b !errorlevel! | |
cd pcre-%PCRE_VERSION% || exit /b !errorlevel! | |
cmake . -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DPCRE_BUILD_PCRECPP=Off -DPCRE_BUILD_TESTS=Off -DPCRE_BUILD_PCREGREP=Off || exit /b !errorlevel! | |
nmake || exit /b !errorlevel! | |
copy pcre.h ..\externals || exit /b !errorlevel! | |
copy pcre.lib ..\externals\pcre64.lib || exit /b !errorlevel! | |
env: | |
CL: /MP | |
- name: Install missing Python packages | |
if: matrix.config == 'release' | |
run: | | |
python -m pip install pip --upgrade || exit /b !errorlevel! | |
python -m pip install pytest || exit /b !errorlevel! | |
python -m pip install pytest-custom_exit_code || exit /b !errorlevel! | |
python -m pip install pytest-timeout || exit /b !errorlevel! | |
- name: Run CMake | |
if: false # TODO: enable | |
run: | | |
cmake -S . -B build -DBUILD_TESTS=On || exit /b !errorlevel! | |
- name: Build CLI debug configuration using MSBuild | |
if: matrix.config == 'debug' | |
run: | | |
:: cmake --build build --target check --config Debug || exit /b !errorlevel! | |
msbuild -m cppcheck.sln /p:Configuration=Debug-PCRE;Platform=x64 -maxcpucount || exit /b !errorlevel! | |
- name: Run Debug test | |
if: matrix.config == 'debug' | |
run: .\bin\debug\testrunner.exe || exit /b !errorlevel! | |
- name: Build CLI release configuration using MSBuild | |
if: matrix.config == 'release' | |
run: | | |
:: cmake --build build --target check --config Release || exit /b !errorlevel! | |
msbuild -m cppcheck.sln /p:Configuration=Release-PCRE;Platform=x64 -maxcpucount || exit /b !errorlevel! | |
- name: Run Release test | |
if: matrix.config == 'release' | |
run: .\bin\testrunner.exe || exit /b !errorlevel! | |
- name: Run test/cli | |
if: matrix.config == 'release' | |
run: | | |
:: since FILESDIR is not set copy the binary to the root so the addons are found | |
:: copy .\build\bin\Release\cppcheck.exe .\cppcheck.exe || exit /b !errorlevel! | |
copy .\bin\cppcheck.exe .\cppcheck.exe || exit /b !errorlevel! | |
copy .\bin\cppcheck-core.dll .\cppcheck-core.dll || exit /b !errorlevel! | |
cd test/cli || exit /b !errorlevel! | |
:: python -m pytest --suppress-no-test-exit-code test-clang-import.py || exit /b !errorlevel! | |
python -m pytest test-helloworld.py || exit /b !errorlevel! | |
python -m pytest test-inline-suppress.py || exit /b !errorlevel! | |
python -m pytest test-more-projects.py || exit /b !errorlevel! | |
python -m pytest test-other.py || exit /b !errorlevel! | |
python -m pytest test-proj2.py || exit /b !errorlevel! | |
python -m pytest test-suppress-syntaxError.py || exit /b !errorlevel! | |
- name: Test addons | |
if: matrix.config == 'release' | |
run: | | |
.\cppcheck --addon=threadsafety addons\test\threadsafety || exit /b !errorlevel! | |
.\cppcheck --addon=threadsafety --std=c++03 addons\test\threadsafety || exit /b !errorlevel! | |
.\cppcheck --addon=misra --enable=style --inline-suppr --enable=information --error-exitcode=1 addons\test\misra\misra-ctu-*-test.c || exit /b !errorlevel! | |
cd addons\test | |
rem We'll force C89 standard to enable an additional verification for | |
rem 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 || exit /b !errorlevel! | |
python3 ..\misra.py -verify misra\misra-test.c.dump || exit /b !errorlevel! | |
rem TODO: do we need to verify something here? | |
..\..\cppcheck --dump -DDUMMY --suppress=uninitvar --suppress=uninitStructMember --std=c89 misra\misra-test.h || exit /b !errorlevel! | |
..\..\cppcheck --dump misra\misra-test.cpp || exit /b !errorlevel! | |
python3 ..\misra.py -verify misra\misra-test.cpp.dump || exit /b !errorlevel! | |
python3 ..\misra.py --rule-texts=misra\misra2012_rules_dummy_ascii.txt -verify misra\misra-test.cpp.dump || exit /b !errorlevel! | |
python3 ..\misra.py --rule-texts=misra\misra2012_rules_dummy_utf8.txt -verify misra\misra-test.cpp.dump || exit /b !errorlevel! | |
python3 ..\misra.py --rule-texts=misra\misra2012_rules_dummy_windows1250.txt -verify misra\misra-test.cpp.dump || exit /b !errorlevel! | |
..\..\cppcheck --addon=misra --enable=style --platform=avr8 --error-exitcode=1 misra\misra-test-avr8.c || exit /b !errorlevel! | |
..\..\cppcheck --dump misc-test.cpp || exit /b !errorlevel! | |
python3 ..\misc.py -verify misc-test.cpp.dump || exit /b !errorlevel! | |
..\..\cppcheck --dump naming_test.c || exit /b !errorlevel! | |
rem TODO: fix this - does not fail on Linux | |
rem python3 ..\naming.py --var='[a-z].*' --function='[a-z].*' naming_test.c.dump || exit /b !errorlevel! | |
..\..\cppcheck --dump naming_test.cpp || exit /b !errorlevel! | |
python3 ..\naming.py --var='[a-z].*' --function='[a-z].*' naming_test.cpp.dump || exit /b !errorlevel! | |
..\..\cppcheck --dump namingng_test.c || exit /b !errorlevel! | |
python3 ..\namingng.py --configfile ..\naming.json --verify namingng_test.c.dump || exit /b !errorlevel! | |