name: CI-Windows

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

  # Allows you to run this workflow manually from the Actions tab.
  workflow_dispatch:
    inputs:
      debug_enabled:
        type: boolean
        description: 'Run the build with tmate debugging enabled'
        required: false
        default: false

env:
    VNOTE_VER: 3.19.2

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

    strategy:
      fail-fast: false
      matrix:
        config:
          - name: "Build on Win64 Qt 6"
            arch: win64_msvc2022_64
            vs_version: 2022
            vs_cmd: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Auxiliary\\Build\\vcvars64.bat"
            qt: 6.8.3
            qt_modules: "qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat"
            qt_tools: tools_opensslv3_x64
            qt_major: 6
            suffix: ""

    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@v4
        with:
          path: ${{runner.workspace}}/Qt
          key: ${{runner.os}}-${{matrix.config.arch}}-QtCache-${{matrix.config.qt}}

      - name: Install Qt Official Build
        uses: jurplel/install-qt-action@v3
        with:
          version: ${{matrix.config.qt}}
          target: desktop
          arch: ${{matrix.config.arch}}
          modules: ${{matrix.config.qt_modules}}
          tools: ${{matrix.config.qt_tools}}
          cache: 'true'

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

      # Enable tmate debugging of manually-triggered workflows if the input option was provided
      - name: Setup tmate session
        uses: mxschmitt/action-tmate@v3
        if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}

      - name: Configure and Build Project
        shell: cmd
        run: |
          cmake --version
          call "${{matrix.config.vs_cmd}}"
          cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DQT_DEFAULT_MAJOR_VERSION=${{matrix.config.qt_major}} -DOPENSSL_EXTRA_LIB_DIR=${{runner.workspace}}\build\openssl-utils.git\1.1.1j\Win_x64 %GITHUB_WORKSPACE%
          cmake --build .
          cmake --build . --target=pack
          7z x VNote*.zip -o*
          dir
        working-directory: ${{runner.workspace}}/build

      - name: Archive Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}
          path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}

      - name: Archive Installer
        uses: actions/upload-artifact@v4
        with:
          name: VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}.msi
          path: ${{runner.workspace}}/build/VNote*.msi

      - 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 }}
          # glob not supported
          files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}.zip
          release: Continuous Build
          tag: continuous-build

      - name: Release
        if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')
        uses: ncipollo/release-action@v1.11.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          # glob not supported
          artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}
          commit: master
          tag: v${{env.VNOTE_VER}}
          allowUpdates: true
          draft: true
