name: Tests (self hosted)

on:
  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.1-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-self-hosted-${{ github.ref }}
  cancel-in-progress: true

jobs:
  test:
    # Run all private AMMR forks on self-hosted runners
    if: ${{ (github.event_name == 'workflow_dispatch')  || (github.repository_owner == 'anybody' && github.repository != 'anybody/ammr') }}

    strategy:
      fail-fast: false
      matrix:
        test_group: [1, 2, 3, 4, 5]

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

    runs-on: [self-hosted, Windows, AnyBody]
    
    steps:
      - uses: actions/checkout@v4
        
      - uses: prefix-dev/setup-pixi@v0.8.7
        with:
          environments: test
          pixi-bin-path: ${{ runner.temp }}\Scripts\pixi.exe
          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/AnyBodyConCustom.exe

      - name: Set custom AnyBodyCon environment variable
        if: inputs.use-custom-anybodycon
        run: |
          echo "ANYBODYCON=.pixi/envs/test/bin/AnyBodyConCustom.exe" >> $GITHUB_ENV

      - name: Run AMMR tests
        run: |
          cd Tests
          pytest -n 5 --dist worksteal `
            --splits 5 --group ${{ matrix.test_group }} --splitting-algorithm=least_duration `
            --durations=10 `
            --anybodycon="$Env:ANYBODYCON" `
            --runslow `
          ${{ github.event.inputs.custom-pytest-arg  || '' }}
