github-pr-merge
Scannednpx machina-cli add skill fvadicamo/dev-agent-skills/github-pr-merge --openclawGitHub PR merge
Merges Pull Requests after validating pre-merge checklist and handling post-merge cleanup.
Current PR
!gh pr view --json number,title,state -q '"PR #\(.number): \(.title) (\(.state))"' 2>/dev/null
Core workflow
1. Check comments status
Verify all review comments have at least one reply:
REPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner')
PR=$(gh pr view --json number -q '.number')
# Find unreplied comment IDs
gh api repos/$REPO/pulls/$PR/comments --jq '
[.[] | select(.in_reply_to_id) | .in_reply_to_id] as $replied |
[.[] | select(.in_reply_to_id == null) | select(.id | IN($replied[]) | not) | .id]
'
If unreplied comments exist:
- STOP the merge process
- Inform user: "Found unreplied comments: [IDs]. Run github-pr-review first."
- NEVER reply to comments from this skill
2. Check milestone
gh pr view $PR --json milestone -q '.milestone.title // "none"'
- If milestone is assigned: include it in the checklist summary (step 3)
- If no milestone: check for open milestones and warn the user
gh api repos/$REPO/milestones --jq '[.[] | select(.state=="open")] | length'
If open milestones exist but the PR has none, surface a warning in the checklist:
- Milestone: ⚠ not assigned (open milestones exist)
Do NOT block the merge for a missing milestone. It is a warning only.
3. Run validation
Run tests, linting, and verify CI checks. All MUST pass before proceeding.
gh pr checks $PR
4. Confirm with user
ALWAYS show checklist summary and ask before merging:
Pre-merge checklist:
- Comments: all replied
- Tests: passing
- Lint: passing
- CI: green
- Milestone: v0.1.0 (or ⚠ not assigned)
Ready to merge PR #X. Proceed?
5. Execute merge
gh pr merge $PR --merge --delete-branch --body "$(cat <<'EOF'
- Key change 1
- Key change 2
- Key change 3
Reviews: N/N addressed
Tests: X passed (Y% cov)
Refs: Task N, Req M
EOF
)"
Merge strategy: always --merge (merge commit), never squash or rebase.
--delete-branch automatically deletes the remote branch after merge.
6. Post-merge cleanup
git checkout develop && git pull origin develop
7. Check milestone completion
If the PR had a milestone, check whether all items are now closed:
MILESTONE=$(gh pr view $PR --json milestone -q '.milestone.number // empty')
if [ -n "$MILESTONE" ]; then
gh api repos/$REPO/milestones/$MILESTONE \
--jq '"Open: \(.open_issues) | Closed: \(.closed_issues) | \(.title)"'
fi
- If
open_issues == 0: inform the user and ask whether to close the milestone
gh api repos/$REPO/milestones/$MILESTONE --method PATCH --field state="closed"
- If
open_issues > 0: report remaining open items count. No action needed. - NEVER close a milestone automatically without explicit user confirmation.
Merge message format
Concise format for a clean git log:
- Key change 1 (what was added/fixed)
- Key change 2
- Key change 3
Reviews: 7/7 addressed (Gemini 5, Codex 2)
Tests: 628 passed (88% cov)
Refs: Task 8, Req 14-15
- 3-5 bullet points max for changes
- One line each for reviews summary, test results, and task references
- No headers (##), no verbose sections
- Total: ~10 lines max
Important rules
- ALWAYS run tests, lint, and CI checks before merging
- ALWAYS verify all review comments have replies
- ALWAYS check milestone assignment before merging (warn if missing, do not block)
- ALWAYS confirm with user before executing merge
- ALWAYS use merge commit (
--merge), never squash/rebase - ALWAYS delete feature branch after successful merge
- ALWAYS check milestone completion after merge and report open items count
- NEVER merge with failing tests, lint, or CI checks
- NEVER skip user confirmation
- NEVER close a milestone without explicit user confirmation
- NEVER reply to PR comments from this skill - use github-pr-review instead
- STOP merge if unreplied comments exist and direct user to review skill
Source
git clone https://github.com/fvadicamo/dev-agent-skills/blob/main/skills/github-pr-merge/SKILL.mdView on GitHub Overview
Automates merging GitHub Pull Requests after validating a pre-merge checklist. It verifies review comments, required milestones, tests, lint, and CI checks, then prompts for confirmation. Once approved, it performs a merge with a proper merge commit and handles post-merge cleanup.
How This Skill Works
The skill inspects the PR state using gh and GitHub API to ensure all comments are replied and checks pass. It presents a pre-merge checklist to the user for confirmation and executes the merge with a standard merge commit and delete-branch option. After merging, it switches back to develop and assesses milestone completion for potential closure.
When to Use It
- When a PR has passed all tests, lint, and CI checks and is ready to be merged after review.
- When you need to finalize a PR with a clean, non-squash merge commit and automatic branch cleanup.
- When you want to approve a PR and merge only after confirming the approval status and milestone, if any.
- When you require post-merge cleanup steps such as updating branches and validating milestone state.
- When you want to ensure unreplied comments do not block the merge and want a guided, user-confirmed flow.
Quick Start
- Step 1: Validate pre-merge conditions (comments replied, milestone status, tests and CI passing).
- Step 2: Present and confirm the pre-merge checklist with the user.
- Step 3: Execute the merge with gh pr merge --merge --delete-branch and perform post-merge cleanup.
Best Practices
- Always run tests, lint, and CI checks before merging.
- Always verify that all review comments have at least one reply.
- Always show and confirm the pre-merge checklist with the user before proceeding.
- Always use a merge commit and delete the source branch after merging.
- Never auto close milestones without explicit user confirmation; warn if missing.
Example Use Cases
- Merging a feature PR after passing all checks with a completed review and a milestone of v1.2.0.
- Approving and merging a bugfix PR with a clean merge commit and deleting the feature branch.
- Handling a PR with an open milestone: warning shown but merge proceeds after user confirmation.
- Encountering unreplied comments: process stops and user is prompted to run a review first.
- Post-merge cleanup includes switching to develop and verifying milestone completion.