# Some convenient links:
# - https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md
#

name: release-windows

on:
  push:
    tags:
      - '2.*'
  schedule:
    - cron:  '0 0 * * *'
  workflow_dispatch:

defaults:
  run:
    shell: cmd

jobs:

  build:

    runs-on: windows-2019

    steps:
      - uses: actions/checkout@v2

      - name: Setup msbuild.exe
        uses: microsoft/setup-msbuild@v1.0.2

      - name: Install PCRE
        run: |
          curl -fsSL https://github.com/pfultz2/pcre/archive/refs/tags/8.45.zip -o pcre-8.45.zip
          7z x pcre-8.45.zip
          cd pcre-8.45
          cmake . -G "Visual Studio 16 2019" -A x64
          msbuild -m PCRE.sln /p:Configuration=Release /p:Platform=x64
          dir
          dir Release
          dir x64
          dir x64\Release
          copy pcre.h ..\externals
          copy Release\pcre.lib ..\externals\pcre64.lib

      - name: Install Z3 library
        run: |
          curl -fsSL https://github.com/Z3Prover/z3/releases/download/z3-4.8.7/z3-4.8.7-x64-win.zip -o z3-4.8.7-win.zip
          7z x z3-4.8.7-win.zip -oexternals -r -y
          move externals\z3-4.8.7-x64-win externals\z3

      - name: Install Qt
        uses: jurplel/install-qt-action@v2
        with:
          version: '5.15.2'
          modules: 'qtcharts qthelp'

      - name: Create .qm
        run: |
          cd gui
          lupdate gui.pro
          lrelease gui.pro -removeidentical

      - name: Matchcompiler
        run: python tools\matchcompiler.py --write-dir lib

      - name: Build x64 release GUI
        run: |
          call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          cd gui
          qmake HAVE_QCHART=yes
          nmake release
        env:
          CL: /MP

      - name: Deploy app
        run: |
          windeployqt Build\gui
          del Build\gui\cppcheck-gui.ilk
          del Build\gui\cppcheck-gui.pdb

      - name: Build CLI x64 release configuration using MSBuild
        run: msbuild -m cppcheck.sln /t:cli /p:Configuration=Release-PCRE /p:Platform=x64

      - name: Collect files
        run: |
          move Build\gui win_installer\files
          mkdir win_installer\files\addons
          copy addons\*.* win_installer\files\addons
          mkdir win_installer\files\cfg
          copy cfg\*.cfg win_installer\files\cfg
          mkdir win_installer\files\platforms
          copy platforms\*.xml win_installer\files\platforms
          copy bin\cppcheck.exe win_installer\files
          copy bin\cppcheck-core.dll win_installer\files
          copy externals\z3\bin\libz3.dll win_installer\files
          mkdir win_installer\files\help
          xcopy /s gui\help win_installer\files\help
          del win_installer\files\translations\*.qm
          move gui\*.qm win_installer\files\translations


      - name: Build Installer
        run: |
          call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          cd win_installer
          REM Read ProductVersion
          for /f "tokens=4 delims= " %%a in ('find "ProductVersion" productInfo.wxi') do set PRODUCTVER=%%a
          REM Remove double quotes
          set PRODUCTVER=%PRODUCTVER:"=%
          echo ProductVersion=%PRODUCTVER%
          msbuild -m cppcheck.wixproj /p:Platform=x64,ProductVersion=%PRODUCTVER%.${{ github.run_number }}

      - uses: actions/upload-artifact@v2
        with:
          name: installer
          path: win_installer/Build/

      - uses: actions/upload-artifact@v2
        with:
          name: deploy
          path: win_installer\files