name: Cancel All PR Test Runs on: workflow_dispatch: inputs: workflows: description: 'Space-separated list of workflow filenames to cancel' required: true type: string default: 'pr-test.yml' permissions: actions: write # Needed to cancel runs contents: read # Needed to read repo info jobs: cancel-pr-test: runs-on: ubuntu-latest steps: - name: Install GitHub CLI run: sudo apt-get install -y gh jq - name: Cancel all PR-associated runs for specified workflows env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} REPO: ${{ github.repository }} run: | # Read the space-separated string from the input into a bash array WORKFLOW_FILES=(${{ github.event.inputs.workflows }}) echo "Targeting ${#WORKFLOW_FILES[@]} workflow(s): ${{ github.event.inputs.workflows }}" for workflow_file in "${WORKFLOW_FILES[@]}"; do echo "--- Checking workflow: $workflow_file ---" gh run list \ --repo "$REPO" \ --workflow "$workflow_file" \ --json databaseId,status,event \ --limit 1000 \ | jq -r '.[] | select((.status=="in_progress" or .status=="queued" or .status=="waiting") and .event=="pull_request") | .databaseId' \ | while read run_id; do echo "Attempting to cancel run ID: $run_id for workflow: $workflow_file" # The "|| echo ..." part prevents the script from crashing if cancellation fails gh run cancel "$run_id" --repo "$REPO" || echo "⚠️ Could not cancel run $run_id (it may have already completed). Continuing..." done done