name: debug-ci description: Debug failed CI tests by fetching workflow logs from GitHub Actions and analyzing failures. Use when the user mentions CI failures, test failures, or wants to understand why their PR's CI is failing.
Debug CI
Debug failed CI tests by fetching workflow logs and analyzing failures.
Prerequisites
ghCLI installed and authenticated (gh auth login)
Instructions
Step 1: Identify Current PR
Get PR info for current branch:
gh pr view --json number,title --jq '"\(.number) \(.title)"' 2>/dev/null || echo "no-pr"
If no PR exists, use branch name for the log directory.
Step 2: Get Latest Workflow Run
Get latest "Rust" workflow run for current branch:
BRANCH=$(git branch --show-current)
gh run list --workflow=Rust --branch=$BRANCH --limit=1 --json databaseId,conclusion,headSha,createdAt
Step 3: Get Job Information
List all jobs from the run:
gh run view <run-id> --json jobs --jq '.jobs[] | {id: .databaseId, name: .name, conclusion: .conclusion}'
Step 4: Download Logs
Create directory and download all job logs, stripping ANSI color codes:
mkdir -p ci-logs/pr-<PR_NUMBER>/
# or: mkdir -p ci-logs/branch-<BRANCH_NAME>/
gh run view --job <job-id> --log | perl -pe 's/\e\[[0-9;]*m//g' > ci-logs/pr-<PR_NUMBER>/<job_name>_<job_id>.log
Sanitize job names for filenames (replace spaces/special chars with underscores).
Step 5: Analyze Failures
- Read downloaded log files
- Search for failure patterns:
FAILED,error[E,panicked at,assertion failed - Extract test names and error messages
- Read PR diff (
gh pr diff) to correlate failures with changes - Categorize failures:
- Real failure: Error in code touched by PR
- Flaky test: Known flaky or unrelated to changes
- Infrastructure: Network/timeout issues
Step 6: Report
Provide summary:
- PR number and title
- Run status and commit SHA
- List of downloaded log file paths
- Categorized failures with file:line references
- Recommendations for next steps
Notes
- The
ci-logs/directory should be in.gitignore - Focus on relevant log sections; files can be large