List more CI runs for pr-test (#18650)

This commit is contained in:
Liangsheng Yin
2026-02-11 18:36:45 -08:00
committed by GitHub
parent 41e1fd0be7
commit 10c6bee74f
+77 -13
View File
@@ -1,4 +1,4 @@
name: List Active PR Runs name: List Active Runs
on: on:
workflow_dispatch: workflow_dispatch:
@@ -15,13 +15,13 @@ permissions:
pull-requests: read pull-requests: read
jobs: jobs:
list-active-pr-runs: list-active-runs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Install GitHub CLI - name: Install GitHub CLI
run: sudo apt-get install -y gh jq run: sudo apt-get install -y gh jq
- name: List active PR runs grouped by PR - name: List active runs grouped by PR
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }} REPO: ${{ github.repository }}
@@ -31,7 +31,7 @@ jobs:
set -euo pipefail set -euo pipefail
echo "=========================================" echo "========================================="
echo "🔍 Active PR Workflow Runs Report" echo "🔍 Active Workflow Runs Report"
echo "=========================================" echo "========================================="
echo "" echo ""
@@ -54,7 +54,7 @@ jobs:
--workflow "$workflow_file" \ --workflow "$workflow_file" \
--json databaseId,status,event,headBranch,createdAt,updatedAt,headSha,number,attempt \ --json databaseId,status,event,headBranch,createdAt,updatedAt,headSha,number,attempt \
--limit 500 \ --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 if [ -z "$active_runs" ]; then
continue continue
@@ -64,6 +64,7 @@ jobs:
echo "$active_runs" | while read -r run; do echo "$active_runs" | while read -r run; do
run_id=$(echo "$run" | jq -r '.databaseId') run_id=$(echo "$run" | jq -r '.databaseId')
run_status=$(echo "$run" | jq -r '.status') run_status=$(echo "$run" | jq -r '.status')
run_event=$(echo "$run" | jq -r '.event')
created_at=$(echo "$run" | jq -r '.createdAt') created_at=$(echo "$run" | jq -r '.createdAt')
head_sha=$(echo "$run" | jq -r '.headSha') head_sha=$(echo "$run" | jq -r '.headSha')
run_number=$(echo "$run" | jq -r '.number') run_number=$(echo "$run" | jq -r '.number')
@@ -83,12 +84,12 @@ jobs:
continue continue
fi 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}" \ pr_number=$(gh api "repos/$REPO/pulls?state=open&head=${head_owner}:${head_branch}" \
--jq '.[0].number // empty' 2>/dev/null || true) --jq '.[0].number // empty' 2>/dev/null || true)
if [ -z "$pr_number" ]; then if [ -z "$pr_number" ]; then
continue pr_number="NO_PR"
fi fi
# Get jobs for this run (with pagination to avoid missing jobs) # Get jobs for this run (with pagination to avoid missing jobs)
@@ -106,25 +107,25 @@ jobs:
queue_time=$((current_time - created_time)) queue_time=$((current_time - created_time))
queue_minutes=$((queue_time / 60)) queue_minutes=$((queue_time / 60))
# Store data in temporary 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" >> "$pr_data_file" 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
done done
echo "" echo ""
echo "=========================================" echo "========================================="
echo "📊 Active PRs Summary" echo "📊 Active Runs Summary"
echo "=========================================" echo "========================================="
echo "" echo ""
if [ ! -s "$pr_data_file" ]; then if [ ! -s "$pr_data_file" ]; then
echo "✅ No active PR runs found" echo "✅ No active runs found"
rm -f "$pr_data_file" rm -f "$pr_data_file"
exit 0 exit 0
fi fi
# Get unique PR numbers # Get unique PR numbers (exclude NO_PR entries)
pr_numbers=$(cat "$pr_data_file" | cut -d'|' -f1 | sort -u) pr_numbers=$(cut -d'|' -f1 < "$pr_data_file" | grep -v '^NO_PR$' | sort -u || true)
# Separate high priority and normal PRs # Separate high priority and normal PRs
high_priority_prs=() high_priority_prs=()
@@ -240,11 +241,74 @@ jobs:
echo "" echo ""
done 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 # Overall summary
echo "=========================================" echo "========================================="
echo "📈 Overall Summary" echo "📈 Overall Summary"
echo "=========================================" echo "========================================="
echo "Total PRs with active runs: $pr_count" 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 running jobs: $total_running"
echo "Total queued jobs: $total_queued" echo "Total queued jobs: $total_queued"
echo "=========================================" echo "========================================="