- name
- ci-failure-fixer
- description
- Monitor GitHub Actions CI pipelines for failures and automatically fix common issues. Use when asked to watch CI, fix build failures, monitor GitHub Actions, set up CI auto-repair, or diagnose failed builds. Detects failures via
ghCLI, reads build logs, matches against known fix patterns (dependency issues, snapshot mismatches, lint errors, E2E failures), applies fixes automatically, and reports unfixable issues with diagnosis. Works as a cron job or on-demand. RequiresghCLI authenticated with GitHub.
CI Failure Fixer
Monitor GitHub Actions for failures. Auto-fix what's fixable, report what's not.
How It Works
scripts/check-ci-failures.shpolls repos for new failed runs- If failures found → read build logs via
gh run view --log - Match error against known patterns → auto-fix if safe
- Push fix → wait 90s → verify build passes
- Report results (fixed or diagnosis-only)
Quick Start
On-demand
bash scripts/check-ci-failures.shOutput: OK (no failures) or FAILURES with details.
As Cron Job (OpenClaw)
Set up a cron that runs every 30 minutes:
- Script:
bash scripts/check-ci-failures.sh - Model: Haiku (cheap, sufficient)
- On failure: Read logs, attempt auto-fix, report
Configuration
Environment variables:
GITHUB_OWNER— GitHub username (auto-detected fromghif not set)CI_REPOS— Space-separated repo names (auto-discovers all repos if not set)CI_STATE_FILE— Path to state JSON (tracks last check time)
Auto-Fixable Patterns
| Pattern | Detection | Fix |
|---|---|---|
| Dependency issues | npm ERR! Could not resolve | npm install + push |
| Test snapshots | Snapshot mismatch | npm test -- --update + push |
| Lint errors | eslint, Formatting | eslint --fix + push |
| E2E snapshots | Playwright snapshot diff | playwright --update-snapshots + push |
Report-Only (Human Needed)
- Token/auth errors (secrets rotation)
- TypeScript errors (complex type issues)
- Build timeouts (resource/loop issues)
- Unknown errors
Fix Patterns Reference
Read references/fix-patterns.md for detailed decision tree, log reading commands, and all known patterns with fix scripts.
Reading Logs
# Latest failed run logs
gh run view --repo OWNER/REPO --log 2>&1 | tail -50
# Filter for errors
gh run view <run-id> --repo OWNER/REPO --log 2>&1 | grep -A5 "error\|FAIL"After Fixing
Always verify the fix worked:
sleep 90 # Wait for new CI run
gh run list --repo OWNER/REPO --limit 1 --json conclusion -q '.[0].conclusion'
# Should be "success"