release-windows #1896
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
# 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: release-windows | |
on: | |
push: | |
tags: | |
- '2.*' | |
schedule: | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
permissions: | |
contents: read | |
defaults: | |
run: | |
shell: cmd | |
jobs: | |
build: | |
runs-on: windows-2022 | |
if: ${{ github.repository_owner == 'danmar' }} | |
env: | |
# see https://www.pcre.org/original/changelog.txt | |
PCRE_VERSION: 8.45 | |
QT_VERSION: 6.8.1 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- name: Set up Visual Studio environment | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Cache PCRE | |
id: cache-pcre | |
uses: actions/cache@v4 | |
with: | |
path: | | |
externals\pcre.h | |
externals\pcre64.lib | |
key: pcre-${{ env.PCRE_VERSION }}-bin-x64-win-release-job | |
- 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 "Visual Studio 17 2022" -A x64 -DPCRE_BUILD_PCRECPP=OFF -DPCRE_BUILD_PCREGREP=OFF -DPCRE_BUILD_TESTS=OFF || exit /b !errorlevel! | |
msbuild -m PCRE.sln -p:Configuration=Release -p:Platform=x64 || exit /b !errorlevel! | |
copy pcre.h ..\externals || exit /b !errorlevel! | |
copy Release\pcre.lib ..\externals\pcre64.lib || exit /b !errorlevel! | |
# available modules: https://github.com/miurahr/aqtinstall/blob/master/docs/getting_started.rst#installing-modules | |
# available tools: https://github.com/miurahr/aqtinstall/blob/master/docs/getting_started.rst#installing-tools | |
- name: Install Qt ${{ env.QT_VERSION }} | |
uses: jurplel/install-qt-action@v4 | |
with: | |
version: ${{ env.QT_VERSION }} | |
modules: 'qtcharts' | |
tools: 'tools_opensslv3_x64' | |
cache: true | |
# TODO: build with multiple threads | |
- name: Build x64 release GUI | |
run: | | |
:: TODO: enable rules? | |
:: specify Release build so matchcompiler is used | |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_GUI=On -DUSE_QT6=On -DWITH_QCHART=On -DBUILD_ONLINE_HELP=On || exit /b !errorlevel! | |
cmake --build build --target cppcheck-gui --config Release || exit /b !errorlevel! | |
# TODO: package PDBs | |
- name: Deploy app | |
run: | | |
windeployqt build\bin\Release || exit /b !errorlevel! | |
del build\bin\Release\cppcheck-gui.ilk || exit /b !errorlevel! | |
del build\bin\Release\cppcheck-gui.pdb || exit /b !errorlevel! | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: deploy | |
path: build\bin\Release | |
- name: Matchcompiler | |
run: python tools\matchcompiler.py --write-dir lib || exit /b !errorlevel! | |
# TODO: build with multiple threads | |
# TODO: build with boost enabled | |
- name: Build CLI x64 release configuration using MSBuild | |
run: msbuild -m cppcheck.sln -t:cli -p:Configuration=Release-PCRE -p:Platform=x64 || exit /b !errorlevel! | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: bin | |
path: bin | |
- name: Install missing Python packages | |
run: | | |
pip install -U pyinstaller || exit /b !errorlevel! | |
# TODO: include in installer? | |
- name: Compile misra.py executable | |
run: | | |
cd addons || exit /b !errorlevel! | |
pyinstaller --hidden-import xml --hidden-import xml.etree --hidden-import xml.etree.ElementTree misra.py || exit /b !errorlevel! | |
del *.spec || exit /b !errorlevel! | |
# TODO: include in installer? | |
- name: Compile cppcheck-htmlreport executable | |
run: | | |
cd htmlreport || exit /b !errorlevel! | |
pyinstaller cppcheck-htmlreport || exit /b !errorlevel! | |
del *.spec || exit /b !errorlevel! | |
# TODO: test the compiled Python files | |
- name: Collect files | |
run: | | |
@echo on | |
move build\bin\Release win_installer\files || exit /b !errorlevel! | |
copy AUTHORS win_installer\files\authors.txt || exit /b !errorlevel! | |
copy readme.txt win_installer\files\ || exit /b !errorlevel! | |
copy win_installer\GPLv3.txt win_installer\files\ || exit /b !errorlevel! | |
copy externals\picojson\LICENSE win_installer\files\picojson-license.txt || exit /b !errorlevel! | |
copy externals\simplecpp\LICENSE win_installer\files\simplecpp-license.txt || exit /b !errorlevel! | |
copy externals\tinyxml2\LICENSE win_installer\files\tinyxml2-license.txt || exit /b !errorlevel! | |
copy addons\dist\misra\*.* win_installer\files\addons || exit /b !errorlevel! | |
copy bin\cppcheck.exe win_installer\files || exit /b !errorlevel! | |
copy bin\cppcheck-core.dll win_installer\files || exit /b !errorlevel! | |
:: mkdir win_installer\files\help || exit /b !errorlevel! | |
xcopy /s gui\help win_installer\files\help || exit /b !errorlevel! | |
copy gui\help\online-help.qhc win_installer\files\ || exit /b !errorlevel! | |
copy gui\help\online-help.qch win_installer\files\ || exit /b !errorlevel! | |
del win_installer\files\cfg\*.rng || exit /b !errorlevel! | |
del win_installer\files\platforms\*.rng || exit /b !errorlevel! | |
del win_installer\files\translations\*.qm || exit /b !errorlevel! | |
move build\gui\*.qm win_installer\files\translations || exit /b !errorlevel! | |
copy htmlreport\dist\cppcheck-htmlreport\*.* win_installer\files || exit /b !errorlevel! | |
:: copy libcrypto-3-x64.dll and libssl-3-x64.dll | |
copy %RUNNER_WORKSPACE%\Qt\Tools\OpenSSLv3\Win_x64\bin\lib*.dll win_installer\files || exit /b !errorlevel! | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: collect | |
path: win_installer\files | |
- name: Build Installer | |
run: | | |
cd win_installer || exit /b !errorlevel! | |
:: Read ProductVersion | |
for /f "tokens=4 delims= " %%a in ('find "ProductVersion" productInfo.wxi') do set PRODUCTVER=%%a | |
:: Remove double quotes | |
set PRODUCTVER=%PRODUCTVER:"=% | |
@echo ProductVersion="%PRODUCTVER%" || exit /b !errorlevel! | |
msbuild -m cppcheck.wixproj -p:Platform=x64,ProductVersion=%PRODUCTVER%.${{ github.run_number }} || exit /b !errorlevel! | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: installer | |
path: win_installer/Build/ | |
- name: Clean up deploy | |
run: | | |
@echo on | |
:: del win_installer\files\addons\*.dll || exit /b !errorlevel! | |
del win_installer\files\addons\*.doxyfile || exit /b !errorlevel! | |
del win_installer\files\addons\*.md || exit /b !errorlevel! | |
:: del win_installer\files\addons\*.pyd || exit /b !errorlevel! | |
:: del win_installer\files\addons\base_library.zip || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\addons\test || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\addons\doc || exit /b !errorlevel! | |
:: rmdir /s /q win_installer\files\bearer || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\generic || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\help || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\iconengines || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\imageformats || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\networkinformation || exit /b !errorlevel! | |
:: rmdir /s /q win_installer\files\printsupport || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\sqldrivers || exit /b !errorlevel! | |
rmdir /s /q win_installer\files\tls || exit /b !errorlevel! | |
ren win_installer\files\translations lang || exit /b !errorlevel! | |
del win_installer\files\d3dcompiler_47.dll || exit /b !errorlevel! | |
del win_installer\files\dxcompiler.dll || exit /b !errorlevel! | |
del win_installer\files\dxil.dll || exit /b !errorlevel! | |
del win_installer\files\dmake.exe || exit /b !errorlevel! | |
del win_installer\files\dmake.pdb || exit /b !errorlevel! | |
:: del win_installer\files\libEGL.dll || exit /b !errorlevel! | |
:: del win_installer\files\libGLESv2.dll || exit /b !errorlevel! | |
del win_installer\files\opengl32sw.dll || exit /b !errorlevel! | |
del win_installer\files\Qt6Svg.dll || exit /b !errorlevel! | |
del win_installer\files\vc_redist.x64.exe || exit /b !errorlevel! | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: portable | |
path: win_installer\files |