# 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:
        # windows 2016 should default to VS 2017. Not supported by setup-msbuild
        os: [windows-2019]
      fail-fast: true

    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v2

      - name: Setup msbuild.exe
        uses: microsoft/setup-msbuild@v1.0.0
                  
      - name: Install PCRE
        run: |
          curl -fsSL https://ftp.pcre.org/pub/pcre/pcre-8.44.zip -o pcre-8.44.zip
          7z x pcre-8.44.zip
          cd pcre-8.44
          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:
          modules: 'qtcharts'

      - name: Build GUI x64 release
        run: |
          call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" 
          cd gui
          qmake HAVE_QCHART=yes
          nmake release
      
      - name: Deploy GUI
        run: |
          dir Build
          dir Build\gui
          windeployqt Build\gui
          dir Build\gui
          del Build\gui\cppcheck-gui.ilk
          del Build\gui\cppcheck-gui.pdb
          
      - name: Build CLI x64 debug configuration using MSBuild
        run: msbuild -m cppcheck.sln /p:Configuration=Debug-PCRE /p:Platform=x64

      - name: Run Debug test
        run: .\bin\debug\testrunner.exe

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

      - name: Run Release test
        run: .\bin\testrunner.exe
 
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_gui
          path: Build\gui
          
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_gui
          path: ./**/cfg/*.cfg
        
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_gui
          path: ./**/platforms/*.xml  
          
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_gui
          path: externals\z3\bin\*.dll
        
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_cli
          path: ./bin/cppcheck.exe
        
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_cli
          path: ./bin/cppcheck-core.dll
          
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_cli
          path: externals\z3\bin\*.dll
          
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_cli
          path: ./**/cfg/*.cfg
        
      - uses: actions/upload-artifact@v2
        with:
          name: cppcheck_cli
          path: ./**/platforms/*.xml