2020-04-16 21:19:57 +02:00
|
|
|
# Some convenient links:
|
|
|
|
# - https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md
|
|
|
|
#
|
|
|
|
|
|
|
|
name: CI-windows
|
|
|
|
|
2023-09-01 18:52:20 +02:00
|
|
|
on:
|
|
|
|
push:
|
|
|
|
branches:
|
|
|
|
- 'main'
|
|
|
|
- 'releases/**'
|
|
|
|
tags:
|
|
|
|
- '2.*'
|
|
|
|
pull_request:
|
2020-04-16 21:19:57 +02:00
|
|
|
|
2022-08-26 23:25:07 +02:00
|
|
|
permissions:
|
|
|
|
contents: read
|
|
|
|
|
2020-04-17 11:57:53 +02:00
|
|
|
defaults:
|
|
|
|
run:
|
|
|
|
shell: cmd
|
2022-08-02 15:51:28 +02:00
|
|
|
|
2023-08-16 19:35:53 +02:00
|
|
|
# TODO: choose/add a step to bail out on compiler warnings (maybe even the release build)
|
|
|
|
|
2020-04-16 21:19:57 +02:00
|
|
|
jobs:
|
|
|
|
|
2022-09-08 19:38:28 +02:00
|
|
|
build_qt:
|
|
|
|
strategy:
|
|
|
|
matrix:
|
|
|
|
os: [windows-2019, windows-2022]
|
2023-04-13 21:02:31 +02:00
|
|
|
qt_ver: [5.15.2, 6.2.4, 6.5.0]
|
2022-09-08 19:38:28 +02:00
|
|
|
fail-fast: false
|
|
|
|
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
|
|
|
|
steps:
|
2022-10-11 19:50:59 +02:00
|
|
|
- uses: actions/checkout@v3
|
2022-09-08 19:38:28 +02:00
|
|
|
|
|
|
|
- name: Set up Visual Studio environment
|
|
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
|
|
with:
|
2023-09-04 19:40:13 +02:00
|
|
|
arch: x64
|
2022-09-08 19:38:28 +02:00
|
|
|
|
|
|
|
- name: Install Qt ${{ matrix.qt_ver }}
|
2023-01-18 17:04:21 +01:00
|
|
|
uses: jurplel/install-qt-action@v3
|
2022-09-08 19:38:28 +02:00
|
|
|
with:
|
|
|
|
version: ${{ matrix.qt_ver }}
|
|
|
|
modules: 'qtcharts'
|
2023-01-18 17:04:21 +01:00
|
|
|
cache: true
|
2022-09-08 19:38:28 +02:00
|
|
|
|
|
|
|
- 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
|
|
|
|
|
2020-04-16 21:19:57 +02:00
|
|
|
build:
|
|
|
|
strategy:
|
|
|
|
matrix:
|
2022-02-04 19:37:53 +01:00
|
|
|
os: [windows-2019, windows-2022]
|
2023-09-01 20:03:53 +02:00
|
|
|
config: [debug, release]
|
2021-04-03 21:22:39 +02:00
|
|
|
fail-fast: false
|
2020-04-16 21:19:57 +02:00
|
|
|
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
|
2022-01-04 11:16:28 +01:00
|
|
|
env:
|
|
|
|
# see https://www.pcre.org/original/changelog.txt
|
|
|
|
PCRE_VERSION: 8.45
|
|
|
|
|
2020-04-16 21:19:57 +02:00
|
|
|
steps:
|
2022-10-11 19:50:59 +02:00
|
|
|
- uses: actions/checkout@v3
|
2020-04-16 21:19:57 +02:00
|
|
|
|
2022-10-25 21:53:02 +02:00
|
|
|
- name: Set up Python 3.11
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'release'
|
2022-10-11 19:50:59 +02:00
|
|
|
uses: actions/setup-python@v4
|
2021-04-03 21:22:39 +02:00
|
|
|
with:
|
2022-10-25 21:53:02 +02:00
|
|
|
python-version: '3.11'
|
|
|
|
check-latest: true
|
2021-04-03 21:22:39 +02:00
|
|
|
|
2022-02-04 19:37:53 +01:00
|
|
|
- name: Set up Visual Studio environment
|
|
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
|
|
with:
|
2023-09-04 19:40:13 +02:00
|
|
|
arch: x64
|
2021-02-24 22:41:25 +01:00
|
|
|
|
2022-01-04 11:16:28 +01:00
|
|
|
- name: Cache PCRE
|
|
|
|
id: cache-pcre
|
2022-10-11 19:50:59 +02:00
|
|
|
uses: actions/cache@v3
|
2022-01-04 11:16:28 +01:00
|
|
|
with:
|
2022-08-07 19:04:10 +02:00
|
|
|
path: |
|
|
|
|
externals\pcre.h
|
|
|
|
externals\pcre.lib
|
|
|
|
externals\pcre64.lib
|
2023-09-04 19:40:13 +02:00
|
|
|
key: pcre-${{ env.PCRE_VERSION }}-x64-bin-win
|
2022-01-04 11:16:28 +01:00
|
|
|
|
|
|
|
- name: Download PCRE
|
2022-09-08 19:38:28 +02:00
|
|
|
if: steps.cache-pcre.outputs.cache-hit != 'true'
|
2022-01-04 11:16:28 +01:00
|
|
|
run: |
|
|
|
|
curl -fsSL https://github.com/pfultz2/pcre/archive/refs/tags/%PCRE_VERSION%.zip -o pcre-%PCRE_VERSION%.zip || exit /b !errorlevel!
|
|
|
|
|
2020-04-19 10:46:51 +02:00
|
|
|
- name: Install PCRE
|
2022-09-08 19:38:28 +02:00
|
|
|
if: steps.cache-pcre.outputs.cache-hit != 'true'
|
2020-04-19 10:46:51 +02:00
|
|
|
run: |
|
2021-02-24 22:41:25 +01:00
|
|
|
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!
|
2023-09-04 19:40:13 +02:00
|
|
|
copy pcre.lib ..\externals\pcre64.lib || exit /b !errorlevel!
|
2020-12-13 19:39:52 +01:00
|
|
|
env:
|
2021-04-03 21:28:17 +02:00
|
|
|
CL: /MP
|
2020-04-19 10:46:51 +02:00
|
|
|
|
2021-04-03 21:22:39 +02:00
|
|
|
- name: Install missing Python packages
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'release'
|
2021-04-03 21:22:39 +02:00
|
|
|
run: |
|
2021-10-09 16:09:20 +02:00
|
|
|
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!
|
2023-08-30 19:35:43 +02:00
|
|
|
python -m pip install pytest-timeout || exit /b !errorlevel!
|
2021-04-03 21:22:39 +02:00
|
|
|
|
2022-02-04 19:37:53 +01:00
|
|
|
- name: Run CMake
|
2022-09-08 19:38:28 +02:00
|
|
|
if: false # TODO: enable
|
2021-02-24 22:41:25 +01:00
|
|
|
run: |
|
2022-09-04 10:27:20 +02:00
|
|
|
cmake -S . -B build -DBUILD_TESTS=On || exit /b !errorlevel!
|
2020-04-16 21:19:57 +02:00
|
|
|
|
2021-07-08 21:21:35 +02:00
|
|
|
- name: Build CLI debug configuration using MSBuild
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'debug'
|
2021-07-08 21:21:35 +02:00
|
|
|
run: |
|
2022-02-04 19:37:53 +01:00
|
|
|
:: cmake --build build --target check --config Debug || exit /b !errorlevel!
|
2023-09-04 19:40:13 +02:00
|
|
|
msbuild -m cppcheck.sln /p:Configuration=Debug-PCRE;Platform=x64 -maxcpucount || exit /b !errorlevel!
|
2022-02-04 19:37:53 +01:00
|
|
|
|
|
|
|
- name: Run Debug test
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'debug'
|
2022-02-04 19:37:53 +01:00
|
|
|
run: .\bin\debug\testrunner.exe || exit /b !errorlevel!
|
2020-04-16 21:19:57 +02:00
|
|
|
|
2021-02-24 22:41:25 +01:00
|
|
|
- name: Build CLI release configuration using MSBuild
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'release'
|
2021-02-24 22:41:25 +01:00
|
|
|
run: |
|
2022-02-04 19:37:53 +01:00
|
|
|
:: cmake --build build --target check --config Release || exit /b !errorlevel!
|
2023-09-04 19:40:13 +02:00
|
|
|
msbuild -m cppcheck.sln /p:Configuration=Release-PCRE;Platform=x64 -maxcpucount || exit /b !errorlevel!
|
2022-02-04 19:37:53 +01:00
|
|
|
|
|
|
|
- name: Run Release test
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'release'
|
2022-02-04 19:37:53 +01:00
|
|
|
run: .\bin\testrunner.exe || exit /b !errorlevel!
|
2021-04-03 21:22:39 +02:00
|
|
|
|
|
|
|
- name: Run test/cli
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'release'
|
2021-04-03 21:22:39 +02:00
|
|
|
run: |
|
|
|
|
:: since FILESDIR is not set copy the binary to the root so the addons are found
|
2022-02-04 19:37:53 +01:00
|
|
|
:: 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!
|
2021-04-03 21:22:39 +02:00
|
|
|
cd test/cli || exit /b !errorlevel!
|
2023-09-18 13:57:27 +02:00
|
|
|
:: python -m pytest --strict -vv --suppress-no-test-exit-code test-clang-import.py || exit /b !errorlevel!
|
|
|
|
python -m pytest --strict -vv test-helloworld.py || exit /b !errorlevel!
|
|
|
|
python -m pytest --strict -vv test-inline-suppress.py || exit /b !errorlevel!
|
|
|
|
python -m pytest --strict -vv test-more-projects.py || exit /b !errorlevel!
|
|
|
|
python -m pytest --strict -vv test-other.py || exit /b !errorlevel!
|
|
|
|
python -m pytest --strict -vv test-proj2.py || exit /b !errorlevel!
|
|
|
|
python -m pytest --strict -vv test-suppress-syntaxError.py || exit /b !errorlevel!
|
2021-07-07 10:58:13 +02:00
|
|
|
|
|
|
|
- name: Test addons
|
2023-09-01 20:03:53 +02:00
|
|
|
if: matrix.config == 'release'
|
2021-07-07 10:58:13 +02:00
|
|
|
run: |
|
2022-05-31 19:53:50 +02:00
|
|
|
.\cppcheck --addon=threadsafety addons\test\threadsafety || exit /b !errorlevel!
|
|
|
|
.\cppcheck --addon=threadsafety --std=c++03 addons\test\threadsafety || exit /b !errorlevel!
|
2023-05-27 10:24:00 +02:00
|
|
|
.\cppcheck --addon=misra --enable=style --inline-suppr --enable=information --error-exitcode=1 addons\test\misra\misra-ctu-*-test.c || exit /b !errorlevel!
|
2021-07-11 17:23:33 +02:00
|
|
|
cd addons\test
|
2022-05-31 19:53:50 +02:00
|
|
|
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!
|
2023-05-27 10:24:00 +02:00
|
|
|
..\..\cppcheck --addon=misra --enable=style --platform=avr8 --error-exitcode=1 misra\misra-test-avr8.c || exit /b !errorlevel!
|
2022-05-31 19:53:50 +02:00
|
|
|
..\..\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!
|
2021-07-07 10:58:13 +02:00
|
|
|
|