name: Cancel Duplicates
on:
  workflow_run:
    workflows:
      - "Miscellaneous"
    types:
      - requested

jobs:
  cancel-duplicate-runs:
    name: Cancel duplicate workflow runs
    runs-on: ubuntu-22.04
    permissions:
      actions: write
      contents: read
    steps:
      - name: Check number of queued tasks
        id: check_queued
        env:
          GITHUB_TOKEN: ${{ github.token }}
          GITHUB_REPO: ${{ github.repository }}
        run: |
          get_count() {
            echo $(curl -s -H "Authorization: token $GITHUB_TOKEN" \
                    "https://api.github.com/repos/$GITHUB_REPO/actions/runs?status=$1" | \
                    jq ".total_count")
          }
          count=$(( `get_count queued` + `get_count in_progress` ))
          echo "Found $count unfinished jobs."
          echo "count=$count" >> $GITHUB_OUTPUT

      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
        if: steps.check_queued.outputs.count >= 20
        uses: actions/checkout@v4

      - name: Cancel duplicate workflow runs
        if: steps.check_queued.outputs.count >= 20
        env:
          GITHUB_TOKEN: ${{ github.token }}
          GITHUB_REPOSITORY: ${{ github.repository }}
        run: |
          pip install click requests typing_extensions python-dateutil
          python ./scripts/cancel_github_workflows.py
