# Some convenient links: # - https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md # name: CI-windows on: [push,pull_request] defaults: run: shell: cmd jobs: build: strategy: matrix: os: [windows-2019] arch: [x64, x86] qt_ver: ['', 5.9.9, 5.15.2] fail-fast: false runs-on: ${{ matrix.os }} env: # see https://www.pcre.org/original/changelog.txt PCRE_VERSION: 8.45 # see https://github.com/Z3Prover/z3/releases: Z3_VERSION: 4.8.10 steps: - uses: actions/checkout@v2 if: matrix.arch == 'x64' || matrix.qt_ver == '' - name: Set up Python 3.10 if: matrix.qt_ver == '' uses: actions/setup-python@v2 with: python-version: '3.10' - name: Setup msbuild.exe if: matrix.qt_ver == '' uses: microsoft/setup-msbuild@v1.0.2 - name: Cache PCRE id: cache-pcre uses: actions/cache@v2 if: matrix.arch == 'x64' || matrix.qt_ver == '' with: path: pcre-${{ env.PCRE_VERSION }}.zip key: pcre-${{ env.PCRE_VERSION }} - name: Download PCRE if: (matrix.arch == 'x64' || matrix.qt_ver == '') && 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: matrix.arch == 'x64' || matrix.qt_ver == '' run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch }} || exit /b !errorlevel! 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! if "${{ matrix.arch }}" == "x86" ( copy pcre.lib ..\externals\pcre.lib || exit /b !errorlevel! ) else ( copy pcre.lib ..\externals\pcre64.lib || exit /b !errorlevel! ) env: CL: /MP - name: Cache Z3 Library id: cache-z3 uses: actions/cache@v2 if: matrix.arch == 'x64' || matrix.qt_ver == '' with: path: z3-${{ env.Z3_VERSION }}-${{ matrix.arch }}-win.zip key: z3-${{ env.Z3_VERSION }}-${{ matrix.arch }}-win - name: Download Z3 library if: (matrix.arch == 'x64' || matrix.qt_ver == '') && steps.cache-z3.outputs.cache-hit != 'true' run: | curl -fsSL https://github.com/Z3Prover/z3/releases/download/z3-%Z3_VERSION%/z3-%Z3_VERSION%-${{ matrix.arch }}-win.zip -o z3-%Z3_VERSION%-${{ matrix.arch }}-win.zip || exit /b !errorlevel! - name: Install Z3 library if: matrix.arch == 'x64' || matrix.qt_ver == '' run: | 7z x z3-%Z3_VERSION%-${{ matrix.arch }}-win.zip -oexternals -r -y || exit /b !errorlevel! move externals\z3-%Z3_VERSION%-${{ matrix.arch }}-win externals\z3 || exit /b !errorlevel! - name: Cache Qt ${{ matrix.qt_ver }} if: matrix.qt_ver != '' && matrix.arch == 'x64' id: cache-qt uses: actions/cache@v1 # not v2! with: path: ../Qt key: Windows-QtCache-${{ matrix.qt_ver }}-qtcharts # no 32-bit Qt available - name: Install Qt ${{ matrix.qt_ver }} if: matrix.qt_ver != '' && matrix.arch == 'x64' uses: jurplel/install-qt-action@v2 with: version: ${{ matrix.qt_ver }} modules: 'qtcharts' cached: ${{ steps.cache-qt.outputs.cache-hit }} - name: Install missing Python packages if: matrix.qt_ver == '' 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! - name: Build GUI release if: matrix.qt_ver != '' && matrix.arch == 'x64' run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch }} || exit /b !errorlevel! cd gui || exit /b !errorlevel! qmake HAVE_QCHART=yes || exit /b !errorlevel! nmake release || exit /b !errorlevel! env: CL: /MP - name: Deploy GUI if: matrix.qt_ver != '' && matrix.arch == 'x64' 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: Configure MSBuild if: matrix.qt_ver == '' run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch }} || exit /b !errorlevel! set ARCH=${{ matrix.arch }} if "${{ matrix.arch }}" == "x86" ( set ARCH=Win32 ) rm -rf build mkdir build cd build cmake -DBUILD_TESTS=On .. || exit /b !errorlevel! - name: Build CLI debug configuration using MSBuild if: matrix.qt_ver == '' run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch }} || exit /b !errorlevel! set ARCH=${{ matrix.arch }} if "${{ matrix.arch }}" == "x86" ( set ARCH=Win32 ) cmake --build build --target check --config Debug || exit /b !errorlevel! - name: Build CLI release configuration using MSBuild if: matrix.qt_ver == '' run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch }} || exit /b !errorlevel! set ARCH=${{ matrix.arch }} if "${{ matrix.arch }}" == "x86" ( set ARCH=Win32 ) cmake --build build --target check --config Release || exit /b !errorlevel! - name: Run test/cli if: matrix.qt_ver == '' 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! 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-proj2.py || exit /b !errorlevel! python -m pytest test-suppress-syntaxError.py || exit /b !errorlevel! - name: Test addons if: matrix.qt_ver == '' run: | .\cppcheck.exe --addon=misra --inline-suppr --enable=information --error-exitcode=1 addons\test\misra\misra-ctu-*-test.c cd addons\test ..\..\cppcheck.exe --dump -DDUMMY --suppress=uninitvar --inline-suppr misra\misra-test.c --std=c89 --platform=unix64 && python3 ..\misra.py -verify misra\misra-test.c.dump