diff --git a/.github/workflows/list-active-pr-runs.yml.yml b/.github/workflows/list-active-pr-runs.yml.yml index e8f21297c..10deab837 100644 --- a/.github/workflows/list-active-pr-runs.yml.yml +++ b/.github/workflows/list-active-pr-runs.yml.yml @@ -1,4 +1,4 @@ -name: List Active PR Runs +name: List Active Runs on: workflow_dispatch: @@ -15,13 +15,13 @@ permissions: pull-requests: read jobs: - list-active-pr-runs: + list-active-runs: runs-on: ubuntu-latest steps: - name: Install GitHub CLI run: sudo apt-get install -y gh jq - - name: List active PR runs grouped by PR + - name: List active runs grouped by PR env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} REPO: ${{ github.repository }} @@ -31,7 +31,7 @@ jobs: set -euo pipefail echo "=========================================" - echo "🔍 Active PR Workflow Runs Report" + echo "🔍 Active Workflow Runs Report" echo "=========================================" echo "" @@ -54,7 +54,7 @@ jobs: --workflow "$workflow_file" \ --json databaseId,status,event,headBranch,createdAt,updatedAt,headSha,number,attempt \ --limit 500 \ - | jq -c '.[] | select(.status=="queued" or .status=="waiting" or .status=="in_progress") | select(.event=="pull_request")') + | jq -c '.[] | select(.status=="queued" or .status=="waiting" or .status=="in_progress")') if [ -z "$active_runs" ]; then continue @@ -64,6 +64,7 @@ jobs: echo "$active_runs" | while read -r run; do run_id=$(echo "$run" | jq -r '.databaseId') run_status=$(echo "$run" | jq -r '.status') + run_event=$(echo "$run" | jq -r '.event') created_at=$(echo "$run" | jq -r '.createdAt') head_sha=$(echo "$run" | jq -r '.headSha') run_number=$(echo "$run" | jq -r '.number') @@ -83,12 +84,12 @@ jobs: continue fi - # Find PR number + # Find PR number (may be empty for non-PR runs) pr_number=$(gh api "repos/$REPO/pulls?state=open&head=${head_owner}:${head_branch}" \ --jq '.[0].number // empty' 2>/dev/null || true) if [ -z "$pr_number" ]; then - continue + pr_number="NO_PR" fi # Get jobs for this run (with pagination to avoid missing jobs) @@ -106,25 +107,25 @@ jobs: queue_time=$((current_time - created_time)) queue_minutes=$((queue_time / 60)) - # Store data in temporary file - echo "$pr_number|$workflow_file|$run_id|$run_status|$running_jobs|$queued_jobs|$runners|$queue_minutes|$created_at|$head_sha|$run_attempt" >> "$pr_data_file" + # Store data in temporary file (unified format with event and branch) + echo "$pr_number|$workflow_file|$run_id|$run_status|$running_jobs|$queued_jobs|$runners|$queue_minutes|$created_at|$head_sha|$run_attempt|$run_event|$head_branch" >> "$pr_data_file" done done echo "" echo "=========================================" - echo "📊 Active PRs Summary" + echo "📊 Active Runs Summary" echo "=========================================" echo "" if [ ! -s "$pr_data_file" ]; then - echo "✅ No active PR runs found" + echo "✅ No active runs found" rm -f "$pr_data_file" exit 0 fi - # Get unique PR numbers - pr_numbers=$(cat "$pr_data_file" | cut -d'|' -f1 | sort -u) + # Get unique PR numbers (exclude NO_PR entries) + pr_numbers=$(cut -d'|' -f1 < "$pr_data_file" | grep -v '^NO_PR$' | sort -u || true) # Separate high priority and normal PRs high_priority_prs=() @@ -240,11 +241,74 @@ jobs: echo "" done + # --- Non-PR Runs Section --- + non_pr_runs=$(grep '^NO_PR|' "$pr_data_file" 2>/dev/null || true) + non_pr_running=0 + non_pr_queued=0 + + if [ -n "$non_pr_runs" ]; then + echo "=========================================" + echo "📦 Non-PR Runs (manual / scheduled / other)" + echo "=========================================" + echo "" + + echo "$non_pr_runs" | while read -r line; do + workflow=$(echo "$line" | cut -d'|' -f2) + run_id=$(echo "$line" | cut -d'|' -f3) + status=$(echo "$line" | cut -d'|' -f4) + running=$(echo "$line" | cut -d'|' -f5) + queued=$(echo "$line" | cut -d'|' -f6) + runners=$(echo "$line" | cut -d'|' -f7) + queue_min=$(echo "$line" | cut -d'|' -f8) + created=$(echo "$line" | cut -d'|' -f9) + attempt=$(echo "$line" | cut -d'|' -f11) + event=$(echo "$line" | cut -d'|' -f12) + branch=$(echo "$line" | cut -d'|' -f13) + + run_url="https://github.com/$REPO/actions/runs/$run_id" + + retry_count=$((attempt - 1)) + retry_indicator="" + if [ "$retry_count" -gt 0 ]; then + retry_indicator=" 🔄 Retry #$retry_count" + fi + + echo " 📦 Workflow: $workflow (Run #$run_id)$retry_indicator" + echo " Event: $event" + echo " Branch: $branch" + echo " Status: $status" + echo " 🟢 Running jobs: $running" + echo " 🟡 Queued jobs: $queued" + + if [ "$running" -gt 0 ] && [ "$runners" != "" ]; then + echo " 🖥️ Runners: $runners" + fi + + if [ "$queue_min" -gt 0 ]; then + echo " ⏱️ Queue time: ${queue_min} minutes" + fi + + echo " 🔗 Run URL: $run_url" + echo "" + done + + non_pr_running=$(echo "$non_pr_runs" | cut -d'|' -f5 | awk '{sum+=$1} END {print sum+0}') + non_pr_queued=$(echo "$non_pr_runs" | cut -d'|' -f6 | awk '{sum+=$1} END {print sum+0}') + non_pr_count=$(echo "$non_pr_runs" | wc -l | tr -d ' ') + + total_running=$((total_running + non_pr_running)) + total_queued=$((total_queued + non_pr_queued)) + + echo " 📊 Non-PR Total: $non_pr_running running, $non_pr_queued queued" + echo "" + fi + # Overall summary echo "=========================================" echo "📈 Overall Summary" echo "=========================================" echo "Total PRs with active runs: $pr_count" + echo "Total non-PR active runs: ${non_pr_count:-0}" echo "Total running jobs: $total_running" echo "Total queued jobs: $total_queued" echo "========================================="