name: Tests


on:
  push:
    branches: [master]
  pull_request:

  workflow_dispatch:
    inputs:
      use-custom-anybodycon:
          type: boolean
          description: 'Use a custom version of AnyBody from AMS build system.'
          default: false
      custom-anybodycon-name:
          description: 'Name of the custom AnyBody version to use. (E.g. path on the I:\ drive)'
          required: false
          default: 'AnyBody.8.0-CI-master.AnyBody.8.1.x/AnyBodyCon.exe'
      custom-pytest-arg:
          description: 'Specify which test to run. E.g. `Tests/test_example.any`. Default is entire test suite.'
          required: false
          default: ''

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

jobs:
  test:
    if: ${{ !github.event.pull_request.head.repo.fork && github.repository == 'anybody/ammr' }}
    strategy:
      fail-fast: false
      matrix:
        test_group: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

    env:
      # Triggers a warning at 20 deg
      ShortestPathMaxAngle: 0.3491 

    runs-on: windows-latest
    
    steps:

      - uses: actions/checkout@v4

      - uses: prefix-dev/setup-pixi@v0.8.7
        with:
          environments: test
          cache-write: ${{ github.event_name == 'push' && github.ref_name == 'master' }}
          activate-environment: test
        
      - name: Patch with custom version
        if: inputs.use-custom-anybodycon
        uses: ./.github/actions/custom-anybodycon
        with:
          custom-anybodycon: ${{ inputs.custom-anybodycon-name }}
          connection-string:  ${{ secrets.AZURE_CONN_STR }}
          target-path: .pixi/envs/test/bin/AnyBodyCon.exe
            
      - name: Run AMMR tests
        run: |
          cd Tests
          pytest -n auto --dist worksteal `
          --splits 20 --group ${{ matrix.test_group }} --splitting-algorithm=least_duration `
          --durations=10 `
          --runslow
          ${{ github.event.inputs.custom-pytest-arg  || '' }}

        env:
          RLM_LICENSE: ${{ secrets.LICENSE_SERVER }}
          RLM_LICENSE_PASSWORD: ${{ secrets.LICENSE_PASSWORD }}
