# Install and Authenticate GitHub CLI (gh) You are helping the user install and authenticate the GitHub CLI tool. ## Your tasks: 1. **Check if gh is already installed:** ```bash which gh gh --version ``` If already installed and authenticated: ```bash gh auth status ``` 2. **Install GitHub CLI (if not installed):** **Method 1: Using official repository (recommended):** ```bash # Add the GPG key sudo mkdir -p -m 755 /etc/apt/keyrings wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg # Add the repository echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null # Install sudo apt update sudo apt install gh ``` **Method 2: Using snap:** ```bash sudo snap install gh ``` **Method 3: Using Homebrew (if installed):** ```bash brew install gh ``` 3. **Verify installation:** ```bash gh --version which gh ``` 4. **Authenticate with GitHub:** **Interactive authentication (recommended):** ```bash gh auth login ``` This will prompt for: - GitHub.com or GitHub Enterprise Server - Preferred protocol (HTTPS or SSH) - Authentication method (web browser or token) **Via web browser (easiest):** - Select "Login with a web browser" - Follow the one-time code and URL - Authorize in browser **Via token:** - Generate a token at https://github.com/settings/tokens - Select "Login with authentication token" - Paste the token 5. **Verify authentication:** ```bash gh auth status ``` Should show: - Logged in to github.com - Account name - Token scopes 6. **Configure gh settings:** **Set default editor:** ```bash gh config set editor vim # or gh config set editor nano # or gh config set editor code # VS Code ``` **Set default protocol:** ```bash gh config set git_protocol ssh # or gh config set git_protocol https ``` **View all config:** ```bash gh config list ``` 7. **Set up SSH key (if using SSH protocol):** ```bash # Generate SSH key if needed ssh-keygen -t ed25519 -C "your_email@example.com" # Add to ssh-agent eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 # Add to GitHub gh ssh-key add ~/.ssh/id_ed25519.pub --title "My Ubuntu Desktop" # Or copy public key to GitHub manually cat ~/.ssh/id_ed25519.pub ``` 8. **Test GitHub connectivity:** ```bash # Test SSH connection ssh -T git@github.com # Test gh CLI gh repo list gh auth status ``` 9. **Configure git to use gh for credentials:** ```bash gh auth setup-git ``` This configures git to use gh as a credential helper. 10. **Show basic gh commands:** **Repository operations:** - `gh repo create` - Create a repository - `gh repo clone ` - Clone a repository - `gh repo view` - View repository details - `gh repo list` - List your repositories - `gh repo fork` - Fork a repository **Pull requests:** - `gh pr create` - Create a pull request - `gh pr list` - List pull requests - `gh pr view ` - View a PR - `gh pr checkout ` - Checkout a PR - `gh pr merge ` - Merge a PR - `gh pr review ` - Review a PR **Issues:** - `gh issue create` - Create an issue - `gh issue list` - List issues - `gh issue view ` - View an issue - `gh issue close ` - Close an issue **Workflows:** - `gh workflow list` - List workflows - `gh workflow view ` - View workflow - `gh workflow run ` - Trigger a workflow - `gh run list` - List workflow runs - `gh run view ` - View a run **Gists:** - `gh gist create ` - Create a gist - `gh gist list` - List gists - `gh gist view ` - View a gist 11. **Set up shell completion:** **For bash:** ```bash gh completion -s bash > ~/.gh-completion.bash echo 'source ~/.gh-completion.bash' >> ~/.bashrc source ~/.bashrc ``` **For zsh:** ```bash gh completion -s zsh > ~/.gh-completion.zsh echo 'source ~/.gh-completion.zsh' >> ~/.zshrc source ~/.zshrc ``` 12. **Configure multiple accounts (if needed):** ```bash # Add another account GH_HOST=github.com gh auth login # Switch between accounts gh auth switch ``` 13. **Set up aliases (optional):** ```bash gh alias set pv 'pr view' gh alias set co 'pr checkout' gh alias set bugs 'issue list --label=bug' ``` List aliases: ```bash gh alias list ``` 14. **Authenticate with GitHub Enterprise (if applicable):** ```bash gh auth login --hostname github.example.com ``` 15. **Troubleshooting common issues:** **Permission denied:** - Check auth status: `gh auth status` - Re-authenticate: `gh auth login` - Check token scopes **SSH issues:** - Verify SSH key: `ssh -T git@github.com` - Add SSH key to GitHub: `gh ssh-key add` - Check ssh-agent: `ssh-add -l` **Rate limiting:** - Check rate limit: `gh api rate_limit` - Use authentication to increase limits 16. **Update gh:** ```bash sudo apt update sudo apt upgrade gh # or brew upgrade gh # or sudo snap refresh gh ``` 17. **Advanced configuration:** **Custom API endpoint:** ```bash gh config set api_endpoint https://api.github.com ``` **Disable prompts:** ```bash gh config set prompt disabled ``` **Configure pager:** ```bash gh config set pager less ``` 18. **Security best practices:** - Use SSH keys instead of HTTPS when possible - Use tokens with minimal required scopes - Rotate tokens regularly - Don't share tokens - Use different tokens for different machines - Enable 2FA on GitHub account - Review authorized applications regularly 19. **Provide workflow examples:** **Create a repo and push:** ```bash mkdir my-project cd my-project git init echo "# My Project" > README.md git add README.md git commit -m "Initial commit" gh repo create my-project --public --source=. --push ``` **Fork and clone:** ```bash gh repo fork owner/repo --clone ``` **Create PR from current branch:** ```bash gh pr create --title "My changes" --body "Description of changes" ``` 20. **Report findings:** Summarize: - Installation status - Authentication status - Configured settings - Available accounts - Next steps ## Important notes: - gh is the official GitHub CLI - Requires GitHub account - Can use HTTPS or SSH protocol - SSH is generally more secure and convenient - gh can replace many git operations with simpler syntax - Shell completion is very helpful - Keep gh updated for latest features - Multiple accounts are supported - Works with both GitHub.com and GitHub Enterprise - Tokens should have minimal required scopes