name: "Get number of shards"
description: "Get the number of nf-test shards for the current CI job"
inputs:
  max_shards:
    description: "Maximum number of shards allowed"
    required: true
  paths:
    description: "Component paths to test"
    required: false
  tags:
    description: "Tags to pass as argument for nf-test --tag parameter"
    required: false
outputs:
  shard:
    description: "Array of shard numbers"
    value: ${{ steps.shards.outputs.shard }}
  total_shards:
    description: "Total number of shards"
    value: ${{ steps.shards.outputs.total_shards }}
runs:
  using: "composite"
  steps:
    - name: Install nf-test
      uses: nf-core/setup-nf-test@4069fbbaabe94c08faba4ad261bfa88225ba133f # v2
      with:
        version: ${{ env.NFT_VER }}
    - name: Get number of shards
      id: shards
      shell: bash
      run: |
        # Run nf-test with dynamic parameter
        nftest_output=$(nf-test test \
          --profile +docker \
          $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \
          --dry-run \
          --ci \
          --changed-since HEAD^) || {
            echo "nf-test command failed with exit code $?"
            echo "Full output: $nftest_output"
            exit 1
        }
        echo "nf-test dry-run output: $nftest_output"

        # Default values for shard and total_shards
        shard="[]"
        total_shards=0

        # Check if there are related tests
        if echo "$nftest_output" | grep -q 'No tests to execute'; then
          echo "No related tests found."
        else
          # Extract the number of related tests
          number_of_shards=$(echo "$nftest_output" | sed -n 's|.*Executed \([0-9]*\) tests.*|\1|p')
          if [[ -n "$number_of_shards" && "$number_of_shards" -gt 0 ]]; then
            shards_to_run=$(( $number_of_shards < ${{ inputs.max_shards }} ? $number_of_shards : ${{ inputs.max_shards }} ))
            shard=$(seq 1 "$shards_to_run" | jq -R . | jq -c -s .)
            total_shards="$shards_to_run"
          else
            echo "Unexpected output format. Falling back to default values."
          fi
        fi

        # Write to GitHub Actions outputs
        echo "shard=$shard" >> $GITHUB_OUTPUT
        echo "total_shards=$total_shards" >> $GITHUB_OUTPUT

        # Debugging output
        echo "Final shard array: $shard"
        echo "Total number of shards: $total_shards"
