# Only test the minimum supported Python version for each major version. i.e
# test python=3.7 until summer 2023 and test python=4.0 if released. python=2
# is not supported.

trigger:
  branches:
    include:
    - master
  paths:
    exclude:
    - 'docs/'
    - '/.*'
    - '/*.rst'
    - '/*.md'
    - '.travis.yml'

jobs:

# NO CUDA RUNNER AVAILABLE
# - job: CUDA_Linux
#   pool:
#     name: Default
#     demands:
#     - CUDA_VERSION
#     - Agent.OS -equals Linux
#   strategy:
#     matrix:
#       Python38:
#         python.version: '38'
#     maxParallel: 4
#   steps:
#   - script: echo "CUDA version is $(CUDA_VERSION)"
#     displayName: Print CUDA version
#   - script: |
#       conda update --yes --quiet -n base conda
#       conda install -n base conda-libmamba-solver
#       conda config --set solver libmamba
#     displayName: Update conda
#   - script: >
#       conda env remove --yes
#       -n tomopy
#     displayName: Remove existing build environment
#   - script: >
#       conda env create --quiet --force
#       -n tomopy
#       -f envs/linux-$(python.version).yml
#     displayName: Create build environment
#   - script: conda list -n tomopy
#     displayName: List build environment
#   - script: |
#       source activate tomopy
#       pip install . --no-deps
#       cmake -S . -B build -GNinja -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_BUILD_TYPE=Release
#       cmake --build build
#       cmake --install build
#     displayName: Setup and install
#   - script: |
#       source activate tomopy
#       export CUDA_VERSION="$(CUDA_VERSION)"
#       pytest --cov tomopy test -v
#     displayName: Run tests

- job: Linux
  pool:
    vmImage: 'ubuntu-latest'
  strategy:
    matrix:
      Python-nomkl:
        python.version: 'nomkl'
        use.mkl: 'OFF'
        use.cuda: 'OFF'
      Python-38:
        python.version: '38'
        use.mkl: 'ON'
        use.cuda: 'OFF'
      Python-cuda:
        python.version: 'cuda'
        use.mkl: 'ON'
        use.cuda: 'ON'
    maxParallel: 4
  steps:
  - bash: echo "##vso[task.prependpath]$CONDA/bin"
    displayName: Add conda to PATH
  - script: |
      conda env create -n tomopy --quiet -f envs/linux-$(python.version).yml --solver=libmamba
    displayName: Create build environment
  - script: conda list -n tomopy
    displayName: List build environment
  - script: |
      source activate tomopy
      export CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}:${CONDA_PREFIX}"
      export CC=$(which gcc)
      export CXX=$(which g++)
      echo "C compiler is ${CC}"
      echo "C++ compiler is ${CXX}"
      pip install . --no-deps
      cmake -S . -B build -GNinja -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_BUILD_TYPE=Release -DTOMOPY_USE_MKL:BOOL=$(use.mkl) -DTOMOPY_USE_CUDA:BOOL=$(use.cuda)
      cmake --build build -v
      cmake --install build -v
    displayName: Setup and install
  - script: |
      source activate tomopy
      pytest --cov=tomopy test -v
    displayName: Run tests

- job: macOS
  pool:
    vmImage: 'macOS-latest'
  strategy:
    matrix:
      Python-38:
        python.version: '38'
    maxParallel: 4
  steps:
  - script: |
      mkdir -p ~/miniconda
      curl https://repo.anaconda.com/miniconda/Miniconda3-py39_24.5.0-0-MacOSX-x86_64.sh -o ~/miniconda/miniconda.sh
      bash ~/miniconda/miniconda.sh -b -u -p ~/miniconda
      rm ~/miniconda/miniconda.sh
      ~/miniconda/bin/conda init bash
    displayName: Install miniconda in runner
  - bash: echo "##vso[task.prependpath]~/miniconda/bin"
    displayName: Add conda to PATH
  - script: |
      conda env create -n tomopy --quiet -f envs/osx-$(python.version).yml --solver=libmamba
    displayName: Create build environment
  - script: conda list -n tomopy
    displayName: List build environment
  - script: |
      source activate tomopy
      export CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}:${CONDA_PREFIX}"
      export CC=$(which clang)
      export CXX=$(which clang++)
      echo "C compiler is ${CC}"
      echo "C++ compiler is ${CXX}"
      pip install . --no-deps
      cmake -S . -B build -GNinja -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_BUILD_TYPE=Release
      cmake --build build
      cmake --install build
    displayName: Setup and install
  - script: |
      source activate tomopy
      pytest --cov=tomopy test -v
    displayName: Run tests

- job: Windows
  pool:
    vmImage: 'windows-latest'
  strategy:
    matrix:
      Python-38:
        python.version: '38'
    maxParallel: 4
  steps:
  - powershell: Write-Host "##vso[task.prependpath]$env:CONDA\Scripts"
    displayName: Add conda to PATH
  - script: |
      conda env create -n tomopy --quiet -f envs/win-ci.yml --solver=libmamba
    displayName: Create build environment
  - script: conda list -n tomopy
    displayName: List build environment
  - script: |
      call activate tomopy
      pip install . --no-deps
      cmake -S . -B build -GNinja -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX%\Library -DTOMOPY_USE_OPENCV=ON -DCMAKE_BUILD_TYPE=Release
      cmake --build build
      cmake --install build
    displayName: Setup and install
  - script: |
      call activate tomopy
      pytest --cov=tomopy test -v
    displayName: Run tests
