← Marketplace
DevOps & Shipping

merge-prv0.1.0

PR merge workflow: verify CI and review status, sync with base branch, confirm, squash merge, and clean up

By harnessprotocolApache-2.0Source ↗
OfficialVerified

Install

Add the marketplace once, then install the plugin:

/plugin marketplace add harnessprotocol/harness-kit
/plugin install merge-pr@harness-kit
pull-requestci-cdmergeworkflow

Environment

GH_TOKENrequiredsensitive

GitHub personal access token — used by gh CLI for CI status checks and merging

Used when: All merge-pr operations require GitHub access

Security & permissions

Verified1 info

Declared capabilities

Network accessNo
File writesNo
Environment variablesGH_TOKEN
External URLsNone
Filesystem patternsNone

Scan observations

  • info.claude-plugin/plugin.json

    Plugin declares access to sensitive environment variable: GH_TOKEN

    Ensure GH_TOKEN is only used for its intended purpose and never sent to untrusted external services.

Scanned at build time from source. How trust signals work →

Skill1

merge-prskills/merge-pr/SKILL.md
merge-pr

Merge PR

Takes a ready PR and lands it: verify → sync → confirm → squash merge → cleanup.

Announce at start: "I'm using the merge-pr skill to merge this PR."


Step 1: Identify the PR

Check for an open PR on the current branch, or use a user-specified PR number:

# Current branch
gh pr view --json number,title,url,state,baseRefName,headRefName 2>/dev/null

# Or if user specified #N:
gh pr view <N> --json number,title,url,state,baseRefName,headRefName

No PR found: Stop and redirect:

"No open PR found on this branch. Use /open-pr to create one first."

PR found: Note the PR number, title, base branch, and URL. Continue.


Step 2: Verify Readiness

Check CI status and review state:

gh pr checks <N>
gh pr view <N> --json reviews --jq '.reviews[] | select(.state == "CHANGES_REQUESTED")'

CI failing: Stop and report which checks are failing. Do not merge.

"CI is failing on [check names]. Fix these before merging, or use /open-pr to address them."

CHANGES_REQUESTED review: Stop and report who requested changes.

"PR has CHANGES_REQUESTED from [reviewer]. Resolve this before merging."

All clear: Continue.


Step 3: Base Branch Sync

Check whether the base branch has moved since branching:

BASE=$(gh pr view <N> --json baseRefName --jq '.baseRefName')
git fetch origin $BASE
git log HEAD..origin/$BASE --oneline

New commits exist: Rebase and force-push:

git rebase origin/$BASE
git push --force-with-lease

If rebase has conflicts, resolve them, then git rebase --continue. After force-push, re-verify CI passes before continuing.

No new commits: Skip.


Step 4: Confirm with User

Before merging, confirm:

Ready to squash merge PR #<N> ("<title>") into <base>.
All checks passed. Proceed?

Wait for confirmation. If the user says to always proceed without asking (e.g. "auto-merge", "no need to confirm"), skip this prompt for the rest of the session.


Step 5: Squash Merge and Cleanup

Once confirmed:

gh pr merge <N> --squash --delete-branch

After merge, sync locally:

git checkout $BASE
git pull
git branch -d <feature-branch> 2>/dev/null || true

Report: "PR #<N> merged. Branch cleaned up. Done."


Quick Reference

StepActionBlock on failure?
1. Identify PRCurrent branch or #NYes — redirect to /open-pr
2. Verify readinessCI + review stateYes — fix first
3. Base syncRebase if behindYes — resolve conflicts
4. ConfirmWait for userYes — wait
5. Squash mergegh pr merge --squash + cleanup

Rules

Never:

  • Merge with failing CI
  • Merge with CHANGES_REQUESTED
  • Force-push to main/master directly
  • Skip user confirmation (unless user explicitly opted out for the session)

Always:

  • Squash merge
  • Delete the branch after merge
  • Sync locally after merge
  • If no PR exists, redirect to /open-pr