CI Fix
Diagnose CI failures and implement fixes with minimal, targeted diffs. Pushes fixes to a dedicated branch without creating PRs.
Prerequisites
Verify GitHub CLI authentication before proceeding:
gh auth status
If not authenticated, instruct the user to run gh auth login first.
Workflow
- Locate the Failing Run
Determine the failing workflow run. If working on a PR branch:
gh pr view --json statusCheckRollup --jq '.statusCheckRollup[] | select(.conclusion == "FAILURE")'
If working from a branch or run ID:
gh run list --branch <branch> --status failure --limit 5 gh run view <run-id> --verbose
- Extract Failure Logs
Pull logs from failed steps to identify the root cause:
gh run view <run-id> --log-failed
For deeper inspection:
gh run view <run-id> --log --job <job-id> gh run download <run-id> -D .artifacts/<run-id>
- Identify Root Cause
Analyze logs for common failure patterns:
-
Build/compilation errors: Missing dependencies, type errors, syntax issues
-
Test failures: Assertion failures, timeouts, flaky tests
-
Linting/formatting: Style violations, unused imports
-
Environment issues: Missing secrets, permissions, resource limits
Prefer the smallest fix that resolves the issue. Deterministic code fixes are better than workflow plumbing changes.
- Implement the Fix
Make minimal, scoped changes matching the repository's existing style:
-
Fix only what's broken—avoid unrelated refactoring
-
Keep changes to the failing job/step when possible
-
If modifying workflow files, preserve existing permissions and avoid expanding token access
- Push to Fix Branch
Create or update a dedicated fix branch:
git checkout -b ci-fix/<original-branch> git add -A git commit -m "fix: resolve CI failure in <job-name>
Co-Authored-By: Warp <agent@warp.dev>" git push -u origin ci-fix/<original-branch>
If the fix branch already exists, update it:
git checkout ci-fix/<original-branch> git pull origin <original-branch>
make fixes
git commit -m "fix: <description>
Co-Authored-By: Warp <agent@warp.dev>" git push
- Verify the Fix
Trigger CI on the fix branch and monitor:
gh run list --branch ci-fix/<original-branch> --limit 1 gh run watch <new-run-id> --exit-status
To rerun only failed jobs:
gh run rerun <run-id> --failed
Safety Notes
-
Avoid pull_request_target unless explicitly requested—it can expose secrets to untrusted code
-
Keep workflow permissions: minimal; don't broaden access to make tests pass
-
For flaky tests, prefer deterministic fixes over blind reruns
Deliverable
After fixing, provide a brief summary:
-
Failing run: Link or ID
-
Root cause: What broke and why
-
Fix: What changed
-
Verification: New run link showing green status