# This file is used to configure the AppVeyor CI system, for testing on Windows machines.
#
# Code loosely based on https://github.com/ogrisel/python-appveyor-demo
#
# To test with AppVeyor:
#    Register on appveyor.com with your GitHub account.
#    Create a new appveyor project, using the GitHub details.
#    Ideally, configure notifications to post back to GitHub. (Untested)

branches:
  only:
    - main

image:
  - Visual Studio 2022

environment:
    matrix:

        # VARIABLES
        #    NAME: just a comment for distinguishing builds in Appveyor.
        #    PYQT_VERSION: Determines PyQt versions installation
        #    PY_QT: Determines Pyside version installation (if present), and is used by
        #           Enaml.


        # 64-bit versions, are tested on Github actions

        # 32-bit versions, PyQt and PySide2, latest

        - NAME: "32-bit, Latest "
          PYTHON: "C:\\Python39"
          PYTHON_VERSION: "3.9"
          PYTHON_ARCH: "32"
          QT_BINDING: "pyqt"
          QT_VERSION: "5"

        - NAME: "PySide2"
          PYTHON: "C:\\Python39"
          PYTHON_VERSION: "3.9"
          PYTHON_ARCH: "32"
          QT_BINDING: "pyside2"
          QT_VERSION: "5"


install:
  # If there is a newer build queued for the same PR, cancel this one.
  # The AppVeyor 'rollout builds' option is supposed to serve the same
  # purpose but it is problematic because it tends to cancel builds pushed
  # directly to main instead of just PR builds (or the converse).
  # credits: JuliaLang developers.
  - ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
        https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
        Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
          throw "There are newer queued builds for this pull request, failing early." }

  # Dump some debugging information about the machine.
  - ECHO "Filesystem root:"
  - ps: "ls \"C:/\""

  - ECHO "Build Folder:"
  - ps: ls $env:APPVEYOR_BUILD_FOLDER

  - ECHO "Environment Variables"
  - set

  # Python 3
  # Prepend desired Python to the PATH of this build (this cannot be
  # done from inside the powershell script as it would require to restart
  # the parent CMD process).
  # Upgrade to the latest version of pip to avoid it displaying warnings
  # about it being out of date.
  - "if not %PYTHON_VERSION%==2.7.15SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
  - if not %PYTHON_VERSION%==2.7.15 python -m pip install -U pip

  # Allow the building of wheels.
  - pip install wheel

  # Check that we have the expected set-up.
  - ECHO "We specified %PYTHON_VERSION% win%PYTHON_ARCH%"
  - "python --version"
  - "python -c \"import struct; print('Architecture is win'+str(struct.calcsize('P') * 8))\""
  - pip --version

  # At the time of writing, the setup.py says Enaml depends on a dev version
  # of Atom which is not on PyPI. Install straight from GitHub.
  - pip install git+https://github.com/nucleic/atom@main
  - pip install git+https://github.com/nucleic/kiwi@main

  - if "%QSCINTILLA%"=="Yes" pip install QScintilla

  # We should be able to install the test dependencies via setup.py, but in the meantime, do it manually:
  - pip install pytest pytest-cov pytest-qt

build_script:

  - cd %APPVEYOR_BUILD_DIR%
  - if "%QT_BINDING%"=="pyqt" pip install -e .[qt5-pyqt]
  - if "%QT_BINDING%"=="pyside2" pip install -e .[qt5-pyside]
  - pip list

test_script:

  # Run the project tests
  - cd %APPVEYOR_BUILD_DIR%
  - pytest tests -rs --cov enaml --cov-report xml
