cppcheck/.github/workflows/CI-windows.yml

196 lines
7.2 KiB
YAML

# 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, windows-2022]
arch: [x64, x86]
qt_ver: ['', 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.15
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: Set up Visual Studio environment
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.arch }}
- 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: |
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: |
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: Run CMake
if: false && matrix.qt_ver == ''
run: |
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: |
set ARCH=${{ matrix.arch }}
if "${{ matrix.arch }}" == "x86" (
set ARCH=Win32
)
:: cmake --build build --target check --config Debug || exit /b !errorlevel!
msbuild -m cppcheck.sln /p:Configuration=Debug-PCRE;Platform=%ARCH% -maxcpucount || exit /b !errorlevel!
- name: Run Debug test
if: matrix.qt_ver == ''
run: .\bin\debug\testrunner.exe || exit /b !errorlevel!
- name: Build CLI release configuration using MSBuild
if: matrix.qt_ver == ''
run: |
set ARCH=${{ matrix.arch }}
if "${{ matrix.arch }}" == "x86" (
set ARCH=Win32
)
:: cmake --build build --target check --config Release || exit /b !errorlevel!
msbuild -m cppcheck.sln /p:Configuration=Release-PCRE;Platform=%ARCH% -maxcpucount || exit /b !errorlevel!
- name: Run Release test
if: matrix.qt_ver == ''
run: .\bin\testrunner.exe || 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!
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-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