AgentSkillsCN

pr-merge

在严格的 CI 验证下合并 GitHub Pull Request。绝不绕过失败的检查。适用于合并 PR,或当用户输入“/pr-merge”时使用。

SKILL.md
--- frontmatter
name: pr-merge
description: Merge GitHub pull requests with strict CI validation. Never bypasses failed checks. Use when merging PRs or when user says /pr-merge.
user-invocable: true
allowed-tools: [Bash, Read]
hooks:
  Stop:
    - type: command
      command: "task claude:validate-skill -- --skill pr-merge"

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
  • Stop hook: task claude:validate-skill -- --skill pr-merge

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.

code
┌─────────────────────────────────────────────────────────────────────────────┐
│   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

bash
# 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

StateAction
MERGED"PR already merged" - done
CLOSED"PR is closed" - stop
OPENContinue to CI check

Step 3: Check CI Status

For each check in statusCheckRollup:

StatusAction
IN_PROGRESSWait 30s, retry (max 5 retries)
FAILURESTOP. Display failed check name. Investigate.
SUCCESSContinue

CRITICAL: On FAILURE, do NOT offer to bypass. Say:

"CI check '<name>' failed. Please investigate before merging."

Step 4: Check Merge State

mergeStateStatusAction
CLEANProceed to merge
BEHINDUpdate branch, re-check CI
BLOCKEDIf all checks pass → ask "Bypass review?"
DIRTY"Conflicts detected. Resolve before merging."

Step 5: Execute Merge

bash
gh pr merge <number> --squash

Update Behind Branch

When mergeStateStatus is BEHIND:

bash
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.