name: Build on Windows with MSVC

on:
  push:
    branches:
    - '*'
    paths:
    - .github/workflows/build-windows-msvc.yml
    - build/CMakeLists.txt
    - build/cmake_modules/**
    - daemon/**
    - i18n/**
    - libi2pd/**
    - libi2pd_client/**
    - Win32/**
    tags:
    - '*'
  pull_request:
    branches:
    - '*'

jobs:
  build:
    name: Build
    runs-on: windows-latest
    env:
      boost_path: ${{ github.workspace }}\boost_1_83_0
      openssl_path: ${{ github.workspace }}\openssl_3_2_1

    strategy:
      fail-fast: false

    steps:
    - name: Checkout
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Build and install zlib
      run: |
        powershell -Command "(Invoke-WebRequest -Uri https://raw.githubusercontent.com/r4sas/zlib.install/master/install.bat -OutFile install_zlib.bat)"
        powershell -Command "(Get-Content install_zlib.bat) | Set-Content install_zlib.bat" # fixing line endings
        set BUILD_TYPE=Debug
        ./install_zlib.bat
        set BUILD_TYPE=Release
        ./install_zlib.bat
        del install_zlib.bat

    - name: Install Boost
      run: |
        powershell -Command "(Start-BitsTransfer -Source https://sourceforge.net/projects/boost/files/boost-binaries/1.83.0/boost_1_83_0-msvc-14.3-64.exe/download -Destination boost_1_83_0-msvc-14.3-64.exe)"
        ./boost_1_83_0-msvc-14.3-64.exe /DIR="${{env.boost_path}}" /VERYSILENT /SUPPRESSMSGBOXES /SP-

    - name: Install OpenSSL
      run: |
        powershell -Command "(Start-BitsTransfer -Source https://slproweb.com/download/Win64OpenSSL-3_2_1.exe -Destination Win64OpenSSL-3_2_1.exe)"
        ./Win64OpenSSL-3_2_1.exe /DIR="${{env.openssl_path}}" /TASKS="copytobin" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-

    - name: Make copy of the OpenSSL libraries for CMake
      run: |
        dir ${{ github.workspace }}
        dir ${{env.openssl_path}}\lib\VC
        dir ${{env.openssl_path}}\lib\VC\x64\
        dir ${{env.openssl_path}}\lib\VC\x64\MTd\
        xcopy /s /y "${{env.openssl_path}}\lib\VC\x64\MTd" "${{env.openssl_path}}\lib"

    - name: Configure
      working-directory: build
      run: cmake -DBoost_ROOT="${{env.boost_path}}" -DOPENSSL_ROOT_DIR="${{env.openssl_path}}" -DWITH_STATIC=ON .

    - name: Build
      working-directory: build
      run: cmake --build . --config Debug -- -m

    - name: Upload artifacts
      uses: actions/upload-artifact@v4
      with:
        name: i2pd-msvc
        path: build/Debug/i2pd.*