name: CI-Windows

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab.
  workflow_dispatch:

env:
    VNOTE_VER: 3.15.1

jobs:
  build:
    name: ${{ matrix.config.name }}
    runs-on: windows-2019
    timeout-minutes: 120

    strategy:
      matrix:
        config:
          - {
            name: "Build On Win64 Qt 5.12",
            arch: win64_msvc2017_64,
            platform: x64,
            qt: 5.12.11
          }
          - {
            name: "Build On Win32 Qt 5.12",
            arch: win32_msvc2017,
            platform: x86,
            qt: 5.12.11
          }
          - {
            name: "Build On Win64 Qt 5.15",
            arch: win64_msvc2019_64,
            platform: x64,
            qt: 5.15.2
          }
          - {
            name: "Build On Win32 Qt 5.15",
            arch: win32_msvc2019,
            platform: x86,
            qt: 5.15.2
          }

    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE.
      - uses: actions/checkout@v2
        with:
          fetch-depth: 1

      - name: Init Submodules
        shell: bash
        run: |
          auth_header="$(git config --local --get http.https://github.com/.extraheader)"
          git submodule sync --recursive
          git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1

      - name: Cache Qt
        id: cache-qt
        uses: actions/cache@v1  # not v2!
        with:
          path: ../Qt
          key: ${{ runner.os }}-${{matrix.config.arch}}-QtCache-5.12-1

      - name: Install Qt Official Build
        uses: jurplel/install-qt-action@v2
        with:
          version: ${{matrix.config.qt}}
          target: desktop
          arch: ${{matrix.config.arch}}
          modules: qtwebengine
          tools: tools_openssl_${{matrix.config.platform}},1.1.1-4,qt.tools.openssl.win_${{matrix.config.platform}}
          cached: ${{ steps.cache-qt.outputs.cache-hit }}

      - name: Create Build Dir
        shell: bash
        run: mkdir build
        working-directory: ${{runner.workspace}}

      - name: Clone OpenSSL
        shell: bash
        run: |
          git clone https://github.com/tamlok/openssl-utils.git openssl-utils.git --depth=1
        working-directory: ${{runner.workspace}}/build

      - name: Configure and Build Project
        shell: cmd
        run: |
          qmake --version
          call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.config.platform}}
          qmake -r -spec win32-msvc CONFIG-=debug CONFIG+=release %GITHUB_WORKSPACE%\vnote.pro
          nmake
        working-directory: ${{runner.workspace}}/build

      - name: Package Project
        shell: cmd
        run: |
          qmake --version
          mkdir "%DISTRIB_PATH%"
          call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.config.platform}}
          windeployqt.exe --dir "%DISTRIB_PATH%" .\src\release\vnote.exe
          copy .\src\release\vnote.exe "%DISTRIB_PATH%\vnote.exe"
          copy .\src\release\vnote_extra.rcc "%DISTRIB_PATH%\vnote_extra.rcc"
          copy .\libs\vtextedit\src\libs\syntax-highlighting\release\VSyntaxHighlighting.dll "%DISTRIB_PATH%\VSyntaxHighlighting.dll"
          copy .\libs\vtextedit\src\editor\release\VTextEdit.dll "%DISTRIB_PATH%\VTextEdit.dll"
          rem set qt_dir=%Qt5_Dir:/=\%
          rem for %%I in ("%qt_dir%\..\..") do set "qt_topdir=%%~fI"
          rem set openssl_dir=%qt_topdir%\Tools\OpenSSL\Win_${{matrix.config.platform}}\bin
          set openssl_dir=openssl-utils.git\1.1.1j\Win_${{matrix.config.platform}}
          copy %openssl_dir%\lib*.dll "%DISTRIB_PATH%\"
          copy "%GITHUB_WORKSPACE%\README.md" "%DISTRIB_PATH%\README.md"
          copy "%GITHUB_WORKSPACE%\src\data\core\icons\vnote.ico" "%DISTRIB_PATH%\vnote.ico"
          copy "%GITHUB_WORKSPACE%\COPYING.LESSER" "%DISTRIB_PATH%\COPYING.LESSER"
          echo %GITHUB_SHA% > "%DISTRIB_PATH%\commit"
          del /F /Q "%DISTRIB_PATH%\translations\qt_*.qm"
          7z a vnote-win-${{matrix.config.platform}}-qt${{matrix.config.qt}}.zip "%DISTRIB_PATH%"
        working-directory: ${{runner.workspace}}/build
        env:
          DISTRIB_PATH: ${{runner.workspace}}/build/distrib/vnote

      - name: Package Installer
        shell: cmd
        run: |
          git clone https://github.com/vnotex/mkmsi.git mkmsi.git --depth=1
          python .\mkmsi.git\mkmsi.py --auto-create qt --source-dir "%DISTRIB_PATH%" --wix-root "C:\Program Files (x86)\WiX Toolset v3.11" --merge-module "C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC140_CRT_${{matrix.config.platform}}.msm" --add-desktop-shortcut --project-version ${{env.VNOTE_VER}} --license %GITHUB_WORKSPACE%\package\lgpl-3.0.rtf --executable vnote.exe --wix-banner %GITHUB_WORKSPACE%\package\wix_banner.png --wix-dialog %GITHUB_WORKSPACE%\package\wix_dialog.png VNote
          move VNote.msi .\distrib\VNote-win-${{matrix.config.platform}}-qt${{matrix.config.qt}}_v${{env.VNOTE_VER}}.msi
        working-directory: ${{runner.workspace}}/build
        env:
          DISTRIB_PATH: ${{runner.workspace}}/build/distrib/vnote

      - name: Archive Artifacts
        uses: actions/upload-artifact@v2
        with:
          name: vnote-win-${{matrix.config.platform}}-qt${{matrix.config.qt}}_v${{env.VNOTE_VER}}
          path: ${{env.DISTRIB_PATH}}
        env:
          DISTRIB_PATH: ${{runner.workspace}}/build/distrib/vnote

      - name: Archive Installer
        uses: actions/upload-artifact@v2
        with:
          name: VNote-win-${{matrix.config.platform}}-qt${{matrix.config.qt}}_v${{env.VNOTE_VER}}.msi
          path: ${{runner.workspace}}/build/distrib/VNote*.msi
        env:
          DISTRIB_PATH: ${{runner.workspace}}/build/distrib/vnote

      - name: Update Tag
        if: github.ref == 'refs/heads/master'
        shell: bash
        run: |
          git tag --force continuous-build ${GITHUB_SHA}
          git push --force --tags

      - name: Update Continuous Build Release
        if: github.ref == 'refs/heads/master'
        uses: johnwbyrd/update-release@v1.0.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          files: ${{runner.workspace}}/build/vnote-win-${{matrix.config.platform}}-qt${{matrix.config.qt}}.zip
          release: Continuous Build
          tag: continuous-build

      - name: Rlease
        if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')
        uses: johnwbyrd/update-release@v1.0.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          files: ${{runner.workspace}}/build/vnote-win-${{matrix.config.platform}}-qt${{matrix.config.qt}}.zip ${{runner.workspace}}/build/distrib/VNote*.msi
          release: Release v${{env.VNOTE_VER}}
          tag: v${{env.VNOTE_VER}}
