Claude-project-skills-template pr-merge
Merge GitHub pull requests with strict CI validation. Never bypasses failed checks. Use when merging PRs or when user says /pr-merge.
install
source · Clone the upstream repo
git clone https://github.com/dohernandez/claude-project-skills-template
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dohernandez/claude-project-skills-template "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/pr-merge" ~/.claude/skills/dohernandez-claude-project-skills-template-pr-merge && rm -rf "$T"
manifest:
.claude/skills/pr-merge/SKILL.mdsource content
PR Merge
Purpose
Merge GitHub pull requests with strict CI validation and merge state checking. Enforces the rule: NEVER bypass failed CI checks. Only offers bypass for missing reviews when all checks pass.
Quick Reference
- Merges: GitHub PR via
gh pr merge --squash - Requires: GitHub CLI installed and authenticated, PR exists for branch
Critical Rule
NEVER offer to bypass failed CI checks.
Failed checks mean broken code. The only acceptable bypass is for missing review when ALL checks pass.
All checks pass + CLEAN -> Auto-merge All checks pass + BEHIND -> Update branch, re-check All checks pass + BLOCKED -> Ask: "Bypass review?" Any check FAILED -> STOP. Investigate failure. Conflicts (DIRTY) -> Cannot auto-merge Checks still running -> Wait and re-check
Merge Flow
Step 1: Get PR
# If PR number provided, use it gh pr view 123 --json state,mergeable,mergeStateStatus,statusCheckRollup # Otherwise, find PR for current branch gh pr list --head $(git branch --show-current) --json number,state
Step 2: Check PR State
| State | Action |
|---|---|
| "PR already merged" - done |
| "PR is closed" - stop |
| Continue to CI check |
Step 3: Check CI Status
For each check in
statusCheckRollup:
| Status | Action |
|---|---|
| Wait 30s, retry (max 5 retries) |
| STOP. Display failed check name. Investigate. |
| Continue |
CRITICAL: On FAILURE, do NOT offer to bypass. Say:
"CI check '<name>' failed. Please investigate before merging."
Step 4: Check Merge State
| mergeStateStatus | Action |
|---|---|
| Proceed to merge |
| Update branch, re-check CI |
| If all checks pass -> ask "Bypass review?" |
| "Conflicts detected. Resolve before merging." |
Step 5: Execute Merge
gh pr merge <number> --squash
Update Behind Branch
When
mergeStateStatus is BEHIND:
git fetch origin main git merge origin/main --no-edit git push # Then re-check from Step 3
Automation
See
skill.yaml for the full procedure and patterns.
See sharp-edges.yaml for common failure modes.