GitHub CLI
SKILL.md
GitHub CLI (gh)
Expert guidance for GitHub CLI operations and workflows.
Installation & Setup
# Login to GitHub
gh auth login
# Check authentication status
gh auth status
# Configure git to use gh as credential helper
gh auth setup-git
Pull Requests
Creating PRs
# Create PR interactively
gh pr create
# Create PR with title and body
gh pr create --title "Add feature" --body "Description"
# Create PR to specific branch
gh pr create --base main --head feature-branch
# Create draft PR
gh pr create --draft
# Create PR from current branch
gh pr create --fill # Uses commit messages
Viewing PRs
# List PRs
gh pr list
# List my PRs
gh pr list --author @me
# View PR details
gh pr view 123
# View PR in browser
gh pr view 123 --web
# View PR diff
gh pr diff 123
# Check PR status
gh pr status
Managing PRs
# Checkout PR locally
gh pr checkout 123
# Review PR
gh pr review 123 --approve
gh pr review 123 --comment --body "Looks good!"
gh pr review 123 --request-changes --body "Please fix X"
# Merge PR
gh pr merge 123
gh pr merge 123 --squash
gh pr merge 123 --rebase
gh pr merge 123 --merge
# Close PR
gh pr close 123
# Reopen PR
gh pr reopen 123
# Ready draft PR
gh pr ready 123
PR Checks
# View PR checks
gh pr checks 123
# Watch PR checks
gh pr checks 123 --watch
Issues
Creating Issues
# Create issue interactively
gh issue create
# Create issue with title and body
gh issue create --title "Bug report" --body "Description"
# Create issue with labels
gh issue create --title "Bug" --label bug,critical
# Assign issue
gh issue create --title "Task" --assignee @me
Viewing Issues
# List issues
gh issue list
# List my issues
gh issue list --assignee @me
# List by label
gh issue list --label bug
# View issue details
gh issue view 456
# View in browser
gh issue view 456 --web
Managing Issues
# Close issue
gh issue close 456
# Reopen issue
gh issue reopen 456
# Edit issue
gh issue edit 456 --title "New title"
gh issue edit 456 --add-label bug
gh issue edit 456 --add-assignee @user
# Comment on issue
gh issue comment 456 --body "Update"
Repository Operations
Repository Info
# View repository
gh repo view
# View in browser
gh repo view --web
# Clone repository
gh repo clone owner/repo
# Fork repository
gh repo fork owner/repo
# List repositories
gh repo list owner
Repository Management
# Create repository
gh repo create my-repo --public
gh repo create my-repo --private
# Delete repository
gh repo delete owner/repo
# Sync fork
gh repo sync owner/repo
# Set default repository
gh repo set-default
Workflows & Actions
Viewing Workflows
# List workflows
gh workflow list
# View workflow runs
gh run list
# View specific run
gh run view 789
# Watch run
gh run watch 789
# View run logs
gh run view 789 --log
Managing Workflows
# Trigger workflow
gh workflow run workflow.yml
# Cancel run
gh run cancel 789
# Rerun workflow
gh run rerun 789
# Download artifacts
gh run download 789
Releases
Creating Releases
# Create release
gh release create v1.0.0
# Create release with notes
gh release create v1.0.0 --notes "Release notes"
# Create release with files
gh release create v1.0.0 dist/*.tar.gz
# Create draft release
gh release create v1.0.0 --draft
# Generate release notes automatically
gh release create v1.0.0 --generate-notes
Managing Releases
# List releases
gh release list
# View release
gh release view v1.0.0
# Download release assets
gh release download v1.0.0
# Delete release
gh release delete v1.0.0
Version Management (pki-manager specific)
IMPORTANT: When creating a new release for this project, you MUST bump the version in ALL THREE package.json files:
package.json(root - authoritative source)frontend/package.jsonbackend/package.json
Version Bump Types (Semantic Versioning)
| Type | When to use | Example |
|---|---|---|
| patch | Bug fixes, minor changes | 1.2.0 → 1.2.1 |
| minor | New features, backwards compatible | 1.2.0 → 1.3.0 |
| major | Breaking changes | 1.2.0 → 2.0.0 |
Pre-Release Workflow
Before creating a release, you MUST:
- Check current version in root package.json
- Determine bump type based on changes since last release
- Update ALL package.json files with the new version
- Commit version changes with message:
chore: bump version to vX.Y.Z - Create git tag:
git tag vX.Y.Z - Push tag:
git push origin vX.Y.Z - Create GitHub release:
gh release create vX.Y.Z --generate-notes
Complete Release Workflow
# 1. Determine current version
cat package.json | grep '"version"'
# Output: "version": "1.2.0"
# 2. Update versions in all package.json files
# For patch bump (1.2.0 → 1.2.1):
NEW_VERSION="1.2.1"
# Edit package.json (root)
# Edit frontend/package.json
# Edit backend/package.json
# All three must have the same version!
# 3. Commit version bump
git add package.json frontend/package.json backend/package.json
git commit -m "chore: bump version to v${NEW_VERSION}"
# 4. Create and push tag
git tag "v${NEW_VERSION}"
git push origin main
git push origin "v${NEW_VERSION}"
# 5. Create GitHub release with auto-generated notes
gh release create "v${NEW_VERSION}" --generate-notes
# Or with custom notes
gh release create "v${NEW_VERSION}" --notes "## What's Changed
- Feature A
- Bug fix B
- Improvement C"
Version Synchronization Rules
CRITICAL: All three package.json files MUST have matching versions:
| File | Path | Must Match Root |
|---|---|---|
| Root | package.json |
✓ (authoritative) |
| Frontend | frontend/package.json |
✓ |
| Backend | backend/package.json |
✓ |
Checking Version Consistency
# Quick check all versions
echo "Root: $(cat package.json | grep '"version"' | head -1)"
echo "Frontend: $(cat frontend/package.json | grep '"version"' | head -1)"
echo "Backend: $(cat backend/package.json | grep '"version"' | head -1)"
Release Checklist
Before releasing, verify:
- All tests pass (
pnpm test) - Build succeeds (
pnpm build) - All three package.json versions match
- Changes are committed to main branch
- No uncommitted changes (
git status) - Previous release tag exists for comparison
Gists
# Create gist
gh gist create file.txt
# Create gist from stdin
echo "content" | gh gist create -
# List gists
gh gist list
# View gist
gh gist view <gist-id>
# Edit gist
gh gist edit <gist-id>
# Delete gist
gh gist delete <gist-id>
Advanced Features
Aliases
# Create alias
gh alias set pv "pr view"
gh alias set bugs "issue list --label bug"
# List aliases
gh alias list
# Use alias
gh pv 123
API Access
# Make API call
gh api repos/:owner/:repo/issues
# With JSON data
gh api repos/:owner/:repo/issues -f title="Bug" -f body="Description"
# Paginated results
gh api --paginate repos/:owner/:repo/issues
Extensions
# List extensions
gh extension list
# Install extension
gh extension install owner/gh-extension
# Upgrade extensions
gh extension upgrade --all
Common Workflows
Code Review Workflow
# List PRs assigned to you
gh pr list --assignee @me
# Checkout PR for testing
gh pr checkout 123
# Run tests, review code...
# Approve PR
gh pr review 123 --approve --body "LGTM!"
# Merge PR
gh pr merge 123 --squash
Quick PR Creation
# Create feature branch, make changes, commit
git checkout -b feature/new-feature
# ... make changes ...
git add .
git commit -m "Add new feature"
git push -u origin feature/new-feature
# Create PR from commits
gh pr create --fill
# View PR
gh pr view --web
Issue Triage
# List open issues
gh issue list
# Add labels to issues
gh issue edit 456 --add-label needs-triage
gh issue edit 456 --add-label bug
# Assign issue
gh issue edit 456 --add-assignee @developer
Configuration
# Set default editor
gh config set editor vim
# Set default git protocol
gh config set git_protocol ssh
# View configuration
gh config list
# Set browser
gh config set browser firefox
Tips
- Use
--webflag: Open items in browser for detailed view - Interactive prompts: Most commands work interactively if you omit parameters
- Filters: Use
--author,--label,--stateto filter lists - JSON output: Add
--jsonflag for scriptable output - Template repos: Use
gh repo create --templatefor templates - Auto-merge: Enable with
gh pr merge --auto