name: Windows.

on:
  push:
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'changelog.txt'
      - 'LEGAL'
      - 'LICENSE'
      - '.github/**'
      - '!.github/workflows/win.yml'
      - 'lib/xdg/**'
      - 'snap/**'
      - 'Telegram/build/docker/**'
      - 'Telegram/Resources/uwp/**'
      - 'Telegram/SourceFiles/platform/linux/**'
      - 'Telegram/SourceFiles/platform/mac/**'
      - 'Telegram/Telegram/**'
      - 'Telegram/configure.sh'
      - 'Telegram/Telegram.plist'
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'changelog.txt'
      - 'LEGAL'
      - 'LICENSE'
      - '.github/**'
      - '!.github/workflows/win.yml'
      - 'lib/xdg/**'
      - 'snap/**'
      - 'Telegram/build/docker/**'
      - 'Telegram/Resources/uwp/**'
      - 'Telegram/SourceFiles/platform/linux/**'
      - 'Telegram/SourceFiles/platform/mac/**'
      - 'Telegram/Telegram/**'
      - 'Telegram/configure.sh'
      - 'Telegram/Telegram.plist'

jobs:

  windows:
    name: Windows
    runs-on: windows-2022

    strategy:
      matrix:
        arch: [Win32, x64]

    env:
      UPLOAD_ARTIFACT: "false"
      ONLY_CACHE: "false"
      PREPARE_PATH: "Telegram/build/prepare/prepare.py"

    defaults:
      run:
        shell: cmd

    steps:
      - name: Prepare directories.
        run: |
          mkdir %userprofile%\TBuild
          mklink /d %GITHUB_WORKSPACE%\TBuild %userprofile%\TBuild
          echo TBUILD=%GITHUB_WORKSPACE%\TBuild>>%GITHUB_ENV%

          mkdir %userprofile%\TBuild Libraries
          mklink /d %userprofile%\TBuild\Libraries %GITHUB_WORKSPACE%\Libraries

      - name: Get repository name.
        shell: bash
        run: echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

      - uses: ilammy/msvc-dev-cmd@v1.12.0
        name: Native Tools Command Prompt.
        with:
          arch: ${{ matrix.arch }}

      - name: Clone.
        uses: actions/checkout@v3.1.0
        with:
          submodules: recursive
          path: ${{ env.TBUILD }}\${{ env.REPO_NAME }}

      - name: Set up environment paths.
        shell: bash
        run: |
          echo "CACHE_KEY=$(sha256sum $TBUILD/$REPO_NAME/$PREPARE_PATH | awk '{ print $1 }')" >> $GITHUB_ENV

          echo "Configurate git for cherry-picks."
          git config --global user.email "you@example.com"
          git config --global user.name "Sample"

      - name: NuGet sources.
        run: |
          nuget sources Disable -Name "Microsoft Visual Studio Offline Packages"
          nuget sources Add -Source https://api.nuget.org/v3/index.json & exit 0

      - name: Libraries cache.
        id: cache-libs
        uses: actions/cache@v3.0.11
        with:
          path: Libraries
          key: ${{ runner.OS }}-${{ matrix.arch }}-libs-${{ env.CACHE_KEY }}
          restore-keys: ${{ runner.OS }}-${{ matrix.arch }}-libs-

      - name: Libraries.
        env:
          GYP_MSVS_OVERRIDE_PATH: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\'
          GYP_MSVS_VERSION: 2022
        run: '%TBUILD%\%REPO_NAME%\Telegram\build\prepare\win.bat skip-release silent'

      - name: Read defines.
        shell: bash
        run: |
          DEFINE=""
          if [ -n "${{ matrix.defines }}" ]; then
            DEFINE="-D ${{ matrix.defines }}=ON"
            echo "Define from matrix: $DEFINE"
            echo "ARTIFACT_NAME=Telegram_${{ matrix.arch }}_${{ matrix.defines }}" >> $GITHUB_ENV
          else
            echo "ARTIFACT_NAME=Telegram_${{ matrix.arch }}" >> $GITHUB_ENV
          fi
          echo "TDESKTOP_BUILD_DEFINE=$DEFINE" >> $GITHUB_ENV

          API="-D TDESKTOP_API_TEST=ON"
          if [ ${{ github.ref == 'refs/heads/nightly' }} ]; then
            echo "Use the open credentials."
            API="-D TDESKTOP_API_ID=611335 -D TDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c"
          fi
          echo "TDESKTOP_BUILD_API=$API" >> $GITHUB_ENV

      - name: Free up some disk space.
        run: |
          del /S Libraries\*.pdb
          del /S Libraries\*.pch
          del /S Libraries\*.obj

      - name: Telegram Desktop build.
        if: env.ONLY_CACHE == 'false'
        run: |
          cd %TBUILD%\%REPO_NAME%\Telegram

          call configure.bat ^
          ${{ matrix.arch }} ^
          %TDESKTOP_BUILD_API% ^
          -D DESKTOP_APP_DISABLE_CRASH_REPORTS=OFF ^
          -D DESKTOP_APP_NO_PDB=ON ^
          %TDESKTOP_BUILD_DEFINE% ^
          -DCMAKE_SYSTEM_VERSION=%SDK%

          cd ..\out
          msbuild -m Telegram.sln /p:Configuration=Debug,Platform=${{ matrix.arch }},DebugSymbols=false,DebugType=none

      - name: Move artifact.
        if: (env.UPLOAD_ARTIFACT == 'true') || ${{ github.ref == 'refs/heads/nightly' }}
        run: |
          mkdir artifact
          move %TBUILD%\%REPO_NAME%\out\Debug\Telegram.exe artifact/
      - uses: actions/upload-artifact@master
        name: Upload artifact.
        if: (env.UPLOAD_ARTIFACT == 'true') || ${{ github.ref == 'refs/heads/nightly' }}
        with:
          name: ${{ env.ARTIFACT_NAME }}
          path: artifact\
