name: Windows Build and Test

on:
  push:
    paths-ignore:
      - 'doc/**'
      - 'docker/**'
      - 'traces/**'
      - '.vscode/**'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - 'docker/**'
      - 'traces/**'
      - '.vscode/**'


jobs:
  proxspace:
    runs-on: windows-latest
    defaults:
      run:
        shell: pwsh
    env:
      PATH: C:/ProxSpace/msys2/mingw64/bin;C:/ProxSpace/msys2/usr/local/bin;C:/ProxSpace/msys2/usr/bin;C:/ProxSpace/msys2/bin
      MSYSTEM: MINGW64
      PYTHONHOME: /mingw64

    steps:
      - name: ProxSpace download
        run: Invoke-WebRequest "https://github.com/Gator96100/ProxSpace/archive/master.zip" -outfile "C:\proxspace.zip" -Passthru

      - name: ProxSpace extract
        run: Expand-Archive -LiteralPath "C:\proxspace.zip" -DestinationPath "C:\"

      - name: ProxSpace delete zip
        run: Remove-Item "C:\proxspace.zip"

      - name: ProxSpace rename folder
        run: Get-ChildItem -Path "C:\ProxSpace-*" | Rename-Item -NewName (Split-Path C:\ProxSpace -Leaf)

      - name: ProxSpace version
        run: |
          $psversion = (Select-String -Pattern 'PSVERSION=' -SimpleMatch -Path "C:\ProxSpace\setup\09-proxspace_setup.post").Line.Split("""")[1]
          Write-Host "ProxSpace version: $psversion"

      - name: ProxSpace initial startup
        working-directory: C:\ProxSpace
        run: ./runme64.bat -c "exit"

      - uses: actions/checkout@v4

      - name: make clean
        run: make clean

      - name: Build
        run: make -j $([System.Environment]::ProcessorCount + 1) V=1

      - name: Test
        run: make check

      - name: make clean
        run: make clean

      - name: Build btaddon
        run: make -j $([System.Environment]::ProcessorCount + 1) V=1 PLATFORM_EXTRAS=BTADDON

      - name: Test btaddon
        run: make check

      - name: make clean
        run: make clean

      - name: Prepare cmake build folders
        run: |
          mkdir -p client/build
          ln -s ../cmdscripts client/build/
          ln -s ../luascripts client/build/
          ln -s ../pyscripts client/build/
          ln -s ../lualibs client/build/

      - name: Initiate cmake environment
        run: cmake -G"MSYS Makefiles" ..
        working-directory: client/build/

      - name: Build cmake
        run: make -j $([System.Environment]::ProcessorCount + 1) VERBOSE=1
        working-directory: client/build/

      - name: Test cmake
        run: make client/check CHECKARGS="--clientbin ./client/build/proxmark3"

  wsl:
    runs-on: windows-latest
    defaults:
      run:
        shell: wsl-bash {0}

    steps:
      - name: WSL setup
        uses: Vampire/setup-wsl@v3
        with:
          distribution: Ubuntu-22.04
          update: "true"
          additional-packages: git
            ca-certificates
            build-essential
            pkg-config
            libreadline-dev
            gcc-arm-none-eabi
            libnewlib-dev
            libbz2-dev
            liblz4-dev
            qtbase5-dev
            cmake
            libpython3-dev
            python3
            python3-pip
            python3-dev
            libpython3-all-dev
            libssl-dev
            libgd-dev

      - name: Install Python dependencies
        run: |
          python3 -m pip install --upgrade pip
          python3 -m pip install setuptools
          python3 -m pip install ansicolors sslcrypto

      - name: WSL QT fix
        run: sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5

      - name: Set git to use LF
        shell: bash
        run: |
          git config --global core.autocrlf false
          git config --global core.eol lf

      - uses: actions/checkout@v4

      - name: make clean
        run: make clean

      - name: Build
        run: make -j$((`nproc` + 1)) V=1

      - name: Test
        run: make check

      - name: make clean
        run: make clean

      - name: Build btaddon
        run: make -j$((`nproc` + 1)) V=1 PLATFORM_EXTRAS=BTADDON

      - name: Test btaddon
        run: make check

      - name: make clean
        run: make clean

      - name: Prepare cmake build folders
        run: |
          mkdir -p client/build
          ln -s ../cmdscripts client/build/
          ln -s ../luascripts client/build/
          ln -s ../pyscripts client/build/
          ln -s ../lualibs client/build/

      - name: Initiate cmake environment
        run: cmake ..
        working-directory: client/build/

      - name: Build cmake
        run: make -j$((`nproc` + 1)) VERBOSE=1
        working-directory: client/build/

      - name: Test cmake
        run: make client/check CHECKARGS="--clientbin ./client/build/proxmark3"
