- name
- gh
- description
- GitHub CLI (gh) for repository management, rulesets, releases, PRs, and issues. This skill is triggered when the user says things like "create a GitHub PR", "list GitHub issues", "set up branch protection", "create a ruleset", "configure GitHub rulesets", "create a GitHub release", "clone this repo", or "manage GitHub repository settings".
GitHub CLI (gh)
The GitHub CLI brings GitHub to your terminal for seamless workflows.
Repository Rulesets
Rulesets protect branches and tags with configurable rules.
Create a Branch Protection Ruleset
gh api repos/{owner}/{repo}/rulesets --method POST --input - <<'EOF'
{
"name": "Protect main",
"target": "branch",
"enforcement": "active",
"conditions": {
"ref_name": {
"include": ["refs/heads/main"],
"exclude": []
}
},
"rules": [
{"type": "pull_request", "parameters": {"required_approving_review_count": 1, "dismiss_stale_reviews_on_push": false, "require_code_owner_review": false, "require_last_push_approval": false, "required_review_thread_resolution": false}},
{"type": "deletion"},
{"type": "non_fast_forward"}
],
"bypass_actors": [
{"actor_id": 5, "actor_type": "RepositoryRole", "bypass_mode": "always"}
]
}
EOFCreate a Tag Protection Ruleset
gh api repos/{owner}/{repo}/rulesets --method POST --input - <<'EOF'
{
"name": "Protect tags",
"target": "tag",
"enforcement": "active",
"conditions": {
"ref_name": {
"include": ["~ALL"],
"exclude": []
}
},
"rules": [
{"type": "creation"},
{"type": "update"},
{"type": "deletion"}
],
"bypass_actors": [
{"actor_id": 5, "actor_type": "RepositoryRole", "bypass_mode": "always"}
]
}
EOFBypass Actors
Add bypass_actors to allow certain roles to bypass rules:
"bypass_actors": [
{"actor_id": 5, "actor_type": "RepositoryRole", "bypass_mode": "always"}
]Repository Role IDs:
| ID | Role |
|---|---|
| 1 | Read |
| 2 | Triage |
| 3 | Write |
| 4 | Maintain |
| 5 | Admin |
Bypass Modes:
always- Can always bypass the rulespull_request- Can only bypass via pull request
View Rulesets
# List all rulesets
gh ruleset list
# View a specific ruleset
gh api repos/{owner}/{repo}/rulesets/{ruleset_id}
# View in browser
gh ruleset view {ruleset_id} --webUpdate a Ruleset
gh api repos/{owner}/{repo}/rulesets/{ruleset_id} --method PUT --input - <<'EOF'
{
"name": "Updated name",
"enforcement": "active",
...
}
EOFDelete a Ruleset
gh api repos/{owner}/{repo}/rulesets/{ruleset_id} --method DELETEAvailable Rule Types
Branch Rules
pull_request- Require pull requests before mergingrequired_status_checks- Require status checks to passcommit_message_pattern- Enforce commit message formatcommit_author_email_pattern- Enforce author email formatcommitter_email_pattern- Enforce committer email formatbranch_name_pattern- Enforce branch naming conventionsnon_fast_forward- Prevent force pushesdeletion- Prevent branch deletioncreation- Restrict branch creationupdate- Restrict branch updatesrequired_linear_history- Require linear historyrequired_signatures- Require signed commits
Tag Rules
creation- Restrict tag creationupdate- Prevent moving tagsdeletion- Prevent tag deletion
Releases
# Create a release
gh release create v1.0.0 --title "v1.0.0" --notes "Release notes here"
# Create release with auto-generated notes
gh release create v1.0.0 --generate-notes
# Create a draft release
gh release create v1.0.0 --draft
# List releases
gh release list
# View a release
gh release view v1.0.0
# Download release assets
gh release download v1.0.0Pull Requests
# Create a PR
gh pr create --title "Title" --body "Description"
# Create PR with template
gh pr create --fill
# List PRs
gh pr list
# View PR
gh pr view 123
# Checkout a PR locally
gh pr checkout 123
# Merge a PR
gh pr merge 123 --squashIssues
# Create an issue
gh issue create --title "Bug" --body "Description"
# List issues
gh issue list
# View issue
gh issue view 123
# Close an issue
gh issue close 123Repository
# Clone a repo
gh repo clone owner/repo
# Create a repo
gh repo create my-repo --public
# Fork a repo
gh repo fork owner/repo
# View repo in browser
gh repo view --web