name: Win tests

on:
  push:
    branches:
      - master
      - 6.*
      - 5.*
    paths:
      - '.github/scripts/*.sh'
      - '.github/workflows/*.yml'
      - 'requirements/*.yml'
      - 'MANIFEST.in'
      - '**.bat'
      - '**.py'
      - '**.sh'
      - '!installers-conda/**'
      - '!.github/workflows/installers-conda.yml'
      - '!.github/workflows/build-subrepos.yml'
      - '!.github/scripts/installer_test.sh'

  pull_request:
    branches:
      - master
      - 6.*
      - 5.*
    paths:
      - '.github/scripts/*.sh'
      - '.github/workflows/*.yml'
      - 'requirements/*.yml'
      - 'MANIFEST.in'
      - '**.bat'
      - '**.py'
      - '**.sh'
      - '!installers-conda/**'
      - '!.github/workflows/installers-conda.yml'
      - '!.github/workflows/build-subrepos.yml'
      - '!.github/scripts/installer_test.sh'

  workflow_dispatch:
    inputs:
      ssh:
        # github_cli: gh workflow run test-win.yml --ref <branch> -f ssh=true
        description: 'Enable ssh debugging'
        required: false
        default: false
        type: boolean

concurrency:
  group: test-win-${{ github.ref }}
  cancel-in-progress: true

env:
  ENABLE_SSH: ${{ github.event_name == 'workflow_dispatch' && inputs.ssh }}

jobs:
  build:
    # Use this to disable the workflow
    # if: false
    name: Windows - Py${{ matrix.PYTHON_VERSION }}, ${{ matrix.INSTALL_TYPE }}, ${{ matrix.TEST_TYPE }}
    runs-on: windows-latest
    env:
      CI: 'true'
      QTCONSOLE_TESTING: 'true'
      CODECOV_TOKEN: "56731c25-9b1f-4340-8b58-35739bfbc52d"
      OS: 'win'
      PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }}
      RUN_SLOW: ${{ matrix.TEST_TYPE == 'slow' }}
      USE_CONDA: ${{ matrix.INSTALL_TYPE == 'conda' }}
    strategy:
      fail-fast: false
      matrix:
        INSTALL_TYPE: ['pip', 'conda']
        PYTHON_VERSION: ['3.11']
        TEST_TYPE: ['fast', 'slow']
    timeout-minutes: 90
    steps:
      - name: Setup Remote SSH Connection
        if: env.ENABLE_SSH == 'true'
        uses: mxschmitt/action-tmate@v3
        timeout-minutes: 60
        with:
          detached: true
      - name: Checkout Pull Requests
        if: github.event_name == 'pull_request'
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Checkout Push
        if: github.event_name != 'pull_request'
        uses: actions/checkout@v4
      - name: Fetch branches
        run: git fetch --prune --unshallow
      - name: Cache conda
        uses: actions/cache@v4
        env:
          # Increase this value to reset cache if requirements/*.txt has not changed
          CACHE_NUMBER: 0
        with:
          path: ~/conda_pkgs_dir
          key: ${{ runner.os }}-cacheconda-install${{ matrix.INSTALL_TYPE }}-${{ matrix.PYTHON_VERSION }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('requirements/*.yml') }}
      - name: Cache pip
        uses: actions/cache@v4
        with:
          path: ~\AppData\Local\pip\Cache
          key: ${{ runner.os }}-cachepip-install${{ matrix.INSTALL_TYPE }}-${{ env.CACHE_NUMBER }}-${{ hashFiles('setup.py') }}
      - name: Create conda test environment
        if: env.USE_CONDA == 'true'
        uses: mamba-org/setup-micromamba@v1
        with:
          micromamba-version: '1.5.10-0'
          environment-file: requirements/main.yml
          environment-name: test
          cache-downloads: true
          create-args: python=${{ matrix.PYTHON_VERSION }}
      - name: Create pip test environment
        if: env.USE_CONDA != 'true'
        uses: mamba-org/setup-micromamba@v1
        with:
          micromamba-version: '1.5.10-0'
          environment-name: test
          cache-downloads: true
          create-args: python=${{ matrix.PYTHON_VERSION }}
          condarc: |
            channels:
              - conda-forge
      - name: Install additional dependencies
        shell: bash -l {0}
        run: bash -l .github/scripts/install.sh
      - name: Show conda test environment
        if: env.USE_CONDA == 'true'
        shell: bash -l {0}
        run: |
          micromamba info
          micromamba list
      - name: Show pip test environment
        if: env.USE_CONDA != 'true'
        shell: bash -l {0}
        run: |
          micromamba info
          micromamba list
          pip list
      - name: Run manifest checks
        shell: bash -l {0}
        run: check-manifest
      - name: Run tests
        shell: bash -l {0}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          rm -f pytest_log.txt  # Must remove any log file from a previous run
          .github/scripts/run_tests.sh || \
          .github/scripts/run_tests.sh || \
          .github/scripts/run_tests.sh || \
          .github/scripts/run_tests.sh
      - name: Coverage
        uses: codecov/codecov-action@v4
        with:
          fail_ci_if_error: false
          verbose: true
