setup
Set up rr for a project - creates configs, verifies SSH connectivity, tests remote execution, and ensures dependencies are available on remote hosts.
Automates the full release workflow: PR creation, merge, tagging, changelog update, and GitHub release.
> /plugin marketplace add rileyhilliard/rr > /plugin install rr@rr
How it fires
How this command gets triggered: by you, by Claude, or both.
/merge-releaseContext preview
What this command does when you run it.
Automates the full release workflow: PR creation, merge, tagging, changelog update, and GitHub release.
Automates the full release workflow: PR creation, merge, tagging, changelog update, and GitHub release.
Before starting, verify:
1. **Working directory state**: Check for uncommitted changes
git status --porcelain
2. **Branch state**: Determine current branch and unpushed commits
git branch --show-current git log origin/main..HEAD --oneline 2>/dev/null || git log origin/$(git branch --show-current)..HEAD --oneline
3. **Get latest tags for version calculation**
git tag --sort=-v:refname | head -5
4. **Verify tests pass** (skip if user explicitly says to skip)
make test
If on main with unpushed commits:
# Create feature branch from commit message
BRANCH_NAME=$(git log -1 --format=%s | sed 's/[^a-zA-Z0-9]/-/g' | tr '[:upper:]' '[:lower:]' | cut -c1-50)
git checkout -b "release/${BRANCH_NAME}"
git push -u origin "release/${BRANCH_NAME}"Create PR:
# Get commit message for PR title TITLE=$(git log -1 --format=%s) gh pr create --title "$TITLE" --body "$(cat <<'EOF' ## Summary Auto-generated release PR. ## Changes See commit history for details. EOF )"
# Get PR number from current branch PR_NUMBER=$(gh pr view --json number -q .number) gh pr merge $PR_NUMBER --squash --delete-branch
If merge fails, try rebase:
gh pr merge $PR_NUMBER --rebase --delete-branch
git checkout main git fetch origin git reset --hard origin/main
Parse current version and bump accordingly:
LATEST_TAG=$(git tag --sort=-v:refname | head -1) # Parse and increment based on $ARGUMENTS or default to patch
COMMIT_MSG=$(git log -1 --format=%s) git tag -a $NEW_TAG -m "$COMMIT_MSG" git push origin $NEW_TAG
Read existing changelog and insert new version entry at the top (after header).
Get changes for this version:
git log $PREVIOUS_TAG..$NEW_TAG --format="%s" --reverse
Categorize commits by conventional commit type:
Insert new section following Keep a Changelog format:
## [$VERSION] - $DATE ### Added - New features... ### Fixed - Bug fixes... ### Changed - Other changes...
**Important**: Most repos have branch protection rules. Always create a PR for the changelog instead of pushing directly to main.
# Create changelog branch git checkout -b "docs/changelog-$NEW_TAG" git add CHANGELOG.md git commit -m "docs: update changelog for $NEW_TAG" git push -u origin "docs/changelog-$NEW_TAG" # Create and merge PR gh pr create --title "docs: update changelog for $NEW_TAG" --body "Update CHANGELOG.md for $NEW_TAG release." PR_NUMBER=$(gh pr view --json number -q .number) gh pr merge $PR_NUMBER --squash --delete-branch # Sync local main git checkout main git fetch origin git reset --hard origin/main
gh release create $NEW_TAG --title "$NEW_TAG" --notes "$(cat <<'EOF' ## What's New [Generated from changelog entries] ## Full Changelog https://github.com/OWNER/REPO/compare/$PREVIOUS_TAG...$NEW_TAG EOF )"
On success, report:
/merge-release # patch bump (default) /merge-release patch # explicit patch bump /merge-release minor # minor version bump /merge-release major # major version bump
Run heavy workloads on remote machines without the hassle. rr syncs your code to a remote machine and runs commands there. One command, no context switching. Your project rsyncs to the remote, the command runs, and output streams back.
Repo: rileyhilliard/rr
Set up rr for a project - creates configs, verifies SSH connectivity, tests remote execution, and ensures dependencies are available on remote hosts.