Initial commit
This commit is contained in:
250
skills/github-ops/references/pr_operations.md
Normal file
250
skills/github-ops/references/pr_operations.md
Normal file
@@ -0,0 +1,250 @@
|
||||
# Pull Request Operations Reference
|
||||
|
||||
Comprehensive examples for GitHub pull request operations using gh CLI.
|
||||
|
||||
## Creating Pull Requests
|
||||
|
||||
### Basic PR Creation
|
||||
|
||||
```bash
|
||||
# Create PR with NOJIRA prefix (bypasses JIRA enforcement checks)
|
||||
gh pr create --title "NOJIRA: Your PR title" --body "PR description"
|
||||
|
||||
# Create PR with JIRA ticket reference
|
||||
gh pr create --title "GR-1234: Your PR title" --body "PR description"
|
||||
|
||||
# Create PR targeting specific branch
|
||||
gh pr create --title "NOJIRA: Feature" --body "Description" --base main --head feature-branch
|
||||
|
||||
# Create PR with body from file
|
||||
gh pr create --title "NOJIRA: Feature" --body-file pr-description.md
|
||||
```
|
||||
|
||||
### PR Title Convention
|
||||
|
||||
- **With JIRA ticket**: `GR-1234: Descriptive title`
|
||||
- **Without JIRA ticket**: `NOJIRA: Descriptive title` (bypasses enforcement check)
|
||||
|
||||
---
|
||||
|
||||
## Viewing Pull Requests
|
||||
|
||||
### Listing PRs
|
||||
|
||||
```bash
|
||||
# List all PRs
|
||||
gh pr list
|
||||
|
||||
# List PRs with custom filters
|
||||
gh pr list --state open --limit 50
|
||||
gh pr list --author username
|
||||
gh pr list --label bug
|
||||
|
||||
# List PRs as JSON for parsing
|
||||
gh pr list --json number,title,state,author
|
||||
```
|
||||
|
||||
### Viewing Specific PRs
|
||||
|
||||
```bash
|
||||
# View specific PR details
|
||||
gh pr view 123
|
||||
|
||||
# View PR in browser
|
||||
gh pr view 123 --web
|
||||
|
||||
# View PR diff
|
||||
gh pr diff 123
|
||||
|
||||
# View PR checks/status
|
||||
gh pr checks 123
|
||||
|
||||
# View PR with comments
|
||||
gh pr view 123 --comments
|
||||
|
||||
# Get PR info as JSON for parsing
|
||||
gh pr view 123 --json number,title,state,author,reviews
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Managing Pull Requests
|
||||
|
||||
### Editing PRs
|
||||
|
||||
```bash
|
||||
# Edit PR title/body
|
||||
gh pr edit 123 --title "New title" --body "New description"
|
||||
|
||||
# Add reviewers
|
||||
gh pr edit 123 --add-reviewer username1,username2
|
||||
|
||||
# Add labels
|
||||
gh pr edit 123 --add-label "bug,priority-high"
|
||||
|
||||
# Remove labels
|
||||
gh pr edit 123 --remove-label "wip"
|
||||
```
|
||||
|
||||
### Merging PRs
|
||||
|
||||
```bash
|
||||
# Merge PR (various strategies)
|
||||
gh pr merge 123 --merge # Regular merge commit
|
||||
gh pr merge 123 --squash # Squash and merge
|
||||
gh pr merge 123 --rebase # Rebase and merge
|
||||
|
||||
# Auto-merge after checks pass
|
||||
gh pr merge 123 --auto --squash
|
||||
```
|
||||
|
||||
### PR Lifecycle Management
|
||||
|
||||
```bash
|
||||
# Close PR without merging
|
||||
gh pr close 123
|
||||
|
||||
# Reopen closed PR
|
||||
gh pr reopen 123
|
||||
|
||||
# Checkout PR locally for testing
|
||||
gh pr checkout 123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PR Comments and Reviews
|
||||
|
||||
### Adding Comments
|
||||
|
||||
```bash
|
||||
# Add comment to PR
|
||||
gh pr comment 123 --body "Your comment here"
|
||||
|
||||
# Add comment from file
|
||||
gh pr comment 123 --body-file comment.txt
|
||||
```
|
||||
|
||||
### Reviewing PRs
|
||||
|
||||
```bash
|
||||
# Add review comment
|
||||
gh pr review 123 --comment --body "Review comments"
|
||||
|
||||
# Approve PR
|
||||
gh pr review 123 --approve
|
||||
|
||||
# Approve with comment
|
||||
gh pr review 123 --approve --body "LGTM! Great work."
|
||||
|
||||
# Request changes
|
||||
gh pr review 123 --request-changes --body "Please fix X"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Advanced PR Operations
|
||||
|
||||
### Checking PR Status
|
||||
|
||||
```bash
|
||||
# Check CI/CD status
|
||||
gh pr checks 123
|
||||
|
||||
# Watch PR checks in real-time
|
||||
gh pr checks 123 --watch
|
||||
|
||||
# Get checks as JSON
|
||||
gh pr checks 123 --json name,status,conclusion
|
||||
```
|
||||
|
||||
### PR Metadata Operations
|
||||
|
||||
```bash
|
||||
# Add assignees
|
||||
gh pr edit 123 --add-assignee username
|
||||
|
||||
# Add to project
|
||||
gh pr edit 123 --add-project "Project Name"
|
||||
|
||||
# Set milestone
|
||||
gh pr edit 123 --milestone "v2.0"
|
||||
|
||||
# Mark as draft
|
||||
gh pr ready 123 --undo
|
||||
|
||||
# Mark as ready for review
|
||||
gh pr ready 123
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Output Formatting
|
||||
|
||||
### JSON Output for Scripting
|
||||
|
||||
```bash
|
||||
# Get PR data as JSON
|
||||
gh pr view 123 --json number,title,state,author,reviews,comments
|
||||
|
||||
# List PRs with specific fields
|
||||
gh pr list --json number,title,author,updatedAt
|
||||
|
||||
# Process with jq
|
||||
gh pr list --json number,title | jq '.[] | select(.title | contains("bug"))'
|
||||
```
|
||||
|
||||
### Template Output
|
||||
|
||||
```bash
|
||||
# Custom format with Go templates
|
||||
gh pr list --template '{{range .}}#{{.number}}: {{.title}} (@{{.author.login}}){{"\n"}}{{end}}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Bulk Operations
|
||||
|
||||
### Operating on Multiple PRs
|
||||
|
||||
```bash
|
||||
# Close all PRs with specific label
|
||||
gh pr list --label "wip" --json number -q '.[].number' | \
|
||||
xargs -I {} gh pr close {}
|
||||
|
||||
# Add label to all open PRs
|
||||
gh pr list --state open --json number -q '.[].number' | \
|
||||
xargs -I {} gh pr edit {} --add-label "needs-review"
|
||||
|
||||
# Approve all PRs from specific author
|
||||
gh pr list --author username --json number -q '.[].number' | \
|
||||
xargs -I {} gh pr review {} --approve
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Creating Effective PRs
|
||||
|
||||
1. **Use descriptive titles** - Include ticket reference and clear description
|
||||
2. **Write meaningful descriptions** - Explain what, why, and how
|
||||
3. **Keep PRs focused** - One feature/fix per PR
|
||||
4. **Request specific reviewers** - Tag people with relevant expertise
|
||||
5. **Link related issues** - Use "Closes #123" in description
|
||||
|
||||
### Review Workflow
|
||||
|
||||
1. **Review promptly** - Don't let PRs sit for days
|
||||
2. **Be constructive** - Focus on code quality, not personal style
|
||||
3. **Test locally** - Use `gh pr checkout 123` to test changes
|
||||
4. **Approve clearly** - Use explicit approval, not just comments
|
||||
5. **Follow up** - Check that your feedback was addressed
|
||||
|
||||
### Automation Tips
|
||||
|
||||
1. **Use templates** - Create PR description templates
|
||||
2. **Auto-assign** - Set up CODEOWNERS for automatic reviewers
|
||||
3. **Branch protection** - Require reviews before merging
|
||||
4. **CI/CD integration** - Ensure checks pass before merge
|
||||
5. **Auto-merge** - Use `--auto` flag for trusted changes
|
||||
Reference in New Issue
Block a user