Aller au contenu
CI/CD & Automatisation medium

GitHub CLI (gh) : gérer GitHub depuis le terminal

18 min de lecture

Vous êtes en train de coder, vous voulez créer une PR, vérifier le statut d’un workflow ou lire les commentaires d’une issue. Traditionnellement, vous devez quitter votre terminal, ouvrir le navigateur, naviguer jusqu’au bon endroit…

GitHub CLI (gh) vous permet de faire tout cela sans quitter le terminal. Créer des PRs, déclencher des workflows, gérer les issues — tout est accessible en ligne de commande.

GitHub CLI est l’outil officiel de GitHub pour interagir avec la plateforme depuis le terminal. Il ne remplace pas Git (qui gère le code), mais complète votre workflow avec les fonctionnalités spécifiques à GitHub :

  • Pull requests
  • Issues
  • GitHub Actions (workflows, runs)
  • Releases
  • Gists
  • Repositories (création, fork, clone)
  • Code Spaces
  • Et bien plus
TâcheSans ghAvec gh
Créer une PRNavigateur → New PR → Remplir formulairegh pr create
Voir le statut CIOnglet Actions → Cliquer sur le rungh run list
Merger une PRNavigateur → Bouton Mergegh pr merge
Déclencher un workflowActions → Run workflow → Cliquergh workflow run

Avantages clés :

  • Rapidité : pas de changement de contexte
  • Scriptable : automatisez avec des scripts shell
  • Cohérence : même workflow sur tous vos projets
  • Intégration CI : utilisable dans les workflows GitHub Actions

Avec Homebrew :

Fenêtre de terminal
brew install gh

Vérification de l’installation :

Fenêtre de terminal
gh --version

La commande doit afficher la version installée (ex: gh version 2.67.0).

Avant d’utiliser gh, vous devez vous authentifier auprès de GitHub :

Fenêtre de terminal
gh auth login

Un assistant interactif vous guide :

  1. Où voulez-vous vous authentifier ?

    • GitHub.com (option par défaut)
    • GitHub Enterprise Server
  2. Quel protocole préférez-vous pour Git ?

    • HTTPS (recommandé)
    • SSH
  3. Comment voulez-vous vous authentifier ?

    • Via navigateur (le plus simple)
    • Avec un token d’accès personnel

Si vous choisissez “navigateur”, gh ouvre une page où vous autorisez l’accès.

Vérification de l’authentification :

Fenêtre de terminal
gh auth status

Exemple de sortie :

github.com
✓ Logged in to github.com account your-username
✓ Git operations configured with https protocol
✓ Token: gho_************************************
✓ Token scopes: gist, read:org, repo, workflow

Pour les scripts ou la CI, utilisez un token :

Fenêtre de terminal
# Via variable d'environnement
export GH_TOKEN=ghp_xxxxxxxxxxxx
gh api user
# Ou en passant le token
gh auth login --with-token < token.txt

Dans GitHub Actions, le GITHUB_TOKEN est automatiquement disponible :

- name: Liste des PRs
run: gh pr list
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Fenêtre de terminal
# Interactif : gh pose des questions
gh pr create
# En une ligne
gh pr create --title "Add feature X" --body "Description de la PR"
# Avec labels et reviewers
gh pr create --title "Fix bug" --label "bug" --reviewer "alice,bob"
# PR en draft
gh pr create --draft --title "WIP: New feature"
Fenêtre de terminal
# PRs ouvertes
gh pr list
# PRs avec filtres
gh pr list --state all # Toutes (open, closed, merged)
gh pr list --author "@me" # Mes PRs
gh pr list --label "bug" # Par label
gh pr list --search "is:open draft:false" # Recherche avancée
Fenêtre de terminal
# Afficher les détails
gh pr view 42
# Dans le navigateur
gh pr view 42 --web
# Au format JSON (pour scripts)
gh pr view 42 --json title,state,reviews

Pratique pour tester le code d’une PR localement :

Fenêtre de terminal
gh pr checkout 42

Cela crée une branche locale avec le code de la PR.

Fenêtre de terminal
# Merge standard
gh pr merge 42
# Squash merge
gh pr merge 42 --squash
# Rebase merge
gh pr merge 42 --rebase
# Supprimer la branche après merge
gh pr merge 42 --delete-branch
Fenêtre de terminal
# Approuver
gh pr review 42 --approve
# Demander des changements
gh pr review 42 --request-changes --body "Il faudrait corriger X"
# Commenter sans approuver
gh pr review 42 --comment --body "Bonne approche !"

gh est particulièrement utile pour gérer les workflows GitHub Actions.

Fenêtre de terminal
# Voir les workflows du repo
gh workflow list
# Exemple de sortie :
# NAME STATE ID
# CI active 12345678
# Deploy active 12345679
# Security Scan active 12345680
Fenêtre de terminal
# Déclencher un workflow manuel (workflow_dispatch)
gh workflow run ci.yml
# Avec des inputs
gh workflow run deploy.yml -f environment=staging -f version=1.2.3
# Sur une branche spécifique
gh workflow run ci.yml --ref feature-branch
Fenêtre de terminal
# Derniers runs
gh run list
# Runs d'un workflow spécifique
gh run list --workflow ci.yml
# Runs en cours
gh run list --status in_progress
# Runs échoués
gh run list --status failure
Fenêtre de terminal
# Voir un run spécifique
gh run view 12345678
# Voir les logs
gh run view 12345678 --log
# Logs d'un job spécifique
gh run view 12345678 --log --job 98765432
# Suivre en temps réel
gh run watch 12345678
Fenêtre de terminal
# Re-run complet
gh run rerun 12345678
# Re-run uniquement les jobs échoués
gh run rerun 12345678 --failed
# Re-run avec debug activé
gh run rerun 12345678 --debug
Fenêtre de terminal
gh run cancel 12345678
Fenêtre de terminal
# Lister les artifacts d'un run
gh run view 12345678 --json artifacts
# Télécharger tous les artifacts
gh run download 12345678
# Télécharger un artifact spécifique
gh run download 12345678 -n build-output
Fenêtre de terminal
# Interactif
gh issue create
# En une ligne
gh issue create --title "Bug: crash on login" --body "Description..."
# Avec labels et assignee
gh issue create --title "Feature request" --label "enhancement" --assignee "@me"
Fenêtre de terminal
# Issues ouvertes
gh issue list
# Mes issues
gh issue list --assignee "@me"
# Par label
gh issue list --label "bug" --label "priority:high"
# Recherche
gh issue list --search "is:open label:bug created:>2024-01-01"
Fenêtre de terminal
# Voir
gh issue view 123
# Commenter
gh issue comment 123 --body "Je prends ce bug !"
# Fermer
gh issue close 123
# Rouvrir
gh issue reopen 123
# Éditer
gh issue edit 123 --add-label "in-progress" --add-assignee "alice"
Fenêtre de terminal
# Interactif
gh repo create
# Nouveau repo public
gh repo create my-project --public
# Nouveau repo privé avec description
gh repo create my-project --private --description "Mon super projet"
# Créer depuis le répertoire courant
gh repo create --source=. --public --push
Fenêtre de terminal
# Clone standard
gh repo clone owner/repo
# Clone dans un dossier spécifique
gh repo clone owner/repo ./my-folder
Fenêtre de terminal
# Fork dans votre compte
gh repo fork owner/repo
# Fork et clone
gh repo fork owner/repo --clone
Fenêtre de terminal
# Infos sur le repo courant
gh repo view
# Infos sur un autre repo
gh repo view owner/repo
# Dans le navigateur
gh repo view --web

gh peut appeler n’importe quel endpoint de l’API GitHub :

Fenêtre de terminal
# Votre profil
gh api user
# Un repo spécifique
gh api repos/owner/repo
# Les PRs d'un repo
gh api repos/owner/repo/pulls
Fenêtre de terminal
# Noms des branches
gh api repos/owner/repo/branches --jq '.[].name'
# Titre et état des PRs
gh api repos/owner/repo/pulls --jq '.[] | {title, state}'

Voir le guide jq pour le filtrage JSON.

Fenêtre de terminal
# Créer un commentaire sur une issue
gh api repos/owner/repo/issues/123/comments \
-f body="Commentaire via API"
# Créer un label
gh api repos/owner/repo/labels \
-f name="priority:critical" \
-f color="FF0000"
Fenêtre de terminal
# Toutes les pages de résultats
gh api repos/owner/repo/issues --paginate --jq '.[].title'

gh est préinstallé sur les runners GitHub. Utilisez-le pour des tâches automatisées.

name: Comment on PR
on:
pull_request:
types: [opened]
permissions:
pull-requests: write
jobs:
comment:
runs-on: ubuntu-24.04
steps:
- name: Add welcome comment
run: |
gh pr comment ${{ github.event.pull_request.number }} \
--body "Merci pour cette PR ! L'équipe va la reviewer sous 48h."
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Release
on:
push:
tags: ['v*']
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Create GitHub Release
run: |
gh release create ${{ github.ref_name }} \
--title "Release ${{ github.ref_name }}" \
--generate-notes
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Trigger deploy workflow
run: |
gh workflow run deploy.yml \
-f environment=production \
-f version=${{ github.sha }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Wait for checks to pass
run: |
gh run watch $(gh run list --workflow ci.yml --json databaseId --jq '.[0].databaseId')
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

gh supporte des extensions pour étendre ses fonctionnalités :

Fenêtre de terminal
gh extension browse
Fenêtre de terminal
# Extension pour les copilotes
gh extension install github/gh-copilot
# Extension pour les dashboards
gh extension install dlvhdr/gh-dash
ExtensionDescription
gh-dashDashboard interactif pour PRs et issues
gh-copilotAssistant IA dans le terminal
gh-poiNettoyer les branches mergées
gh-changelogGénérer des changelogs

La configuration est stockée dans ~/.config/gh/config.yml :

git_protocol: https
editor: vim
prompt: enabled
pager: less
aliases:
co: pr checkout
prl: pr list
prv: pr view

Créez des raccourcis pour les commandes fréquentes :

Fenêtre de terminal
# Créer un alias
gh alias set prl 'pr list'
gh alias set co 'pr checkout'
# Alias avec arguments
gh alias set prw 'pr view --web'
# Utiliser l'alias
gh prl
gh co 42
Fenêtre de terminal
gh config set editor "code --wait"

”permission denied” ou “resource not accessible”

Section intitulée « ”permission denied” ou “resource not accessible” »

Symptôme : gh ne peut pas effectuer une action.

Solutions :

Fenêtre de terminal
# Vérifier les scopes du token
gh auth status
# Se réauthentifier avec plus de permissions
gh auth refresh -s workflow,repo,admin:org

Symptôme : gh demande une authentification.

Solution :

Fenêtre de terminal
gh auth login
Fenêtre de terminal
# Configurer le proxy
export HTTPS_PROXY=http://proxy.example.com:8080
gh auth login

Efficacité

Gérez GitHub sans quitter le terminal — PRs, issues, workflows.

Scriptable

Automatisez avec des scripts shell ou dans vos workflows CI.

API complète

Accédez à toute l’API GitHub avec gh api.

Extensible

Ajoutez des extensions pour des fonctionnalités avancées.

Points clés :

  1. gh auth login pour vous authentifier (une seule fois)
  2. gh pr pour tout ce qui concerne les Pull Requests
  3. gh run et gh workflow pour GitHub Actions
  4. gh api pour accéder à n’importe quel endpoint
  5. Utilisez des alias pour vos commandes fréquentes