¿Conoces GitHub CLI?

27 nov. 2020
·
  • Git
  • What is code
·
  • cli
  • github
  • terminal

GitHub CLI es el proyecto oficial de GitHub para gestionar repositorios en GitHub desde la línea de comandos. Hasta ahora hub era el proyecto más conocido para gestionarlos de esta manera pero GitHub ya ha lanzado GitHub CLI mientras que hub muere lentamente.

Una vez instalado (es muy fácil), ya podemos usar el comando gh para realizar acciones sobre el repositorio que estamos usando en ese momento en la carpeta actual.

$ gh --version

gh version 1.2.0 (2020-10-27)
https://github.com/cli/cli/releases/latest

Issues

Podemos mostrar un listado de issues en nuestro repositorio: (Nota: Aquí no aparecen colorines pero se ve más claro en pantalla)

$ gh issue list

Showing 30 of 291 open issues in cli/cli

#2487  Update all links to the labels in CONTRIBUTING.md                                                                                 about 1 day ago
#2485  Alerting on new release for every invocation is excessive                           (enhancement, help wanted)                    about 1 day ago
#2477  gh-repo-clone can't find Github project wikis                                       (enhancement, good first issue, help wanted)  about 1 day ago
#2475  PR creation with --assignee flag does not assign                                    (bug, p2)                                     about 1 day ago
#2471  gh gist edit completion                                                             (enhancement)                                 about 15 hours ago
#2470  Config storage overhaul                                                             (help wanted, tracking issue)                 about 2 days ago
#2458  `gh repo info`                                                                      (core, enhancement)                           about 4 days ago

Podemos usar multitud de parámetros para filtrar tal y como si estuviéramos en GitHub:

  -a, --assignee string    Filter by assignee
  -A, --author string      Filter by author
  -l, --label strings      Filter by labels
  -L, --limit int          Maximum number of issues to fetch (default 30)
      --mention string     Filter by mention
  -m, --milestone number   Filter by milestone number or `title`
  -s, --state string       Filter by state: {open|closed|all} (default "open")
  -w, --web                Open the browser to list the issue(s)

Además, con gh issue view podemos ver directamente ese issue con su descripción. Si queremos verlo en el navegador, gh issue view --web nos lo abrirá ahí mismo.

Otros subcomandos de issue son create, reopen, close o status, también muy interesantes si queremos trabajar con los issues de GitHub desde el terminal.

Pull Requests

Es quizás el que más uso, gh pr. Tiene varios subcomandos al igual que issue:

gh pr list: Muestra una lista de los últimos PRs. También podemos filtrar tal y como haríamos en la web

  -a, --assignee string   Filter by assignee
  -B, --base string       Filter by base branch
  -l, --label strings     Filter by labels
  -L, --limit int         Maximum number of items to fetch (default 30)
  -s, --state string      Filter by state: {open|closed|merged|all} (default "open")
  -w, --web               Open the browser to list the pull requests

gh pr create. Lo uso muchísimo y ya prácticamente no abro PRs desde GitHub. Si no se le pasan parámetros, creará un nuevo PR de la rama actual contra la rama master pero además nos hace preguntas como el título, el contenido y si por ejemplo queremos añadir etiquetas y abrirlo inmediatamente o continuar en el navegador. A mí me resulta muy cómodo.

? Title This is a test
? Body <Received>
? What's next? Add metadata
? What would you like to add?  [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
> [ ]  Reviewers
  [ ]  Assignees
  [ ]  Labels
  [ ]  Projects
  [ ]  Milestone

Al igual que con issue, hay comandos para abrir, cerrar, ver o hacer merges o lo que nos dé la gana hacer pero estos dos de arriba son los que suelo utilizar más a menudo.

Alias

Un comando bastante útil es el de definir alias para distintos comandos. Tengo que decir que yo prefiero utilizar los alias de Bash en mi perfil de Bash pero puede que alguien le venga bien definirlos a nivel de GitHub CLI.

Para hacer un listado de las issues que tengo asignadas, tendría que ejecutar el siguiente comando:

gh issue list -a=igmoweb 

Pero puedo crear un alias así:

gh alias set il 'issue list -a=igmoweb'

Y de esta forma, la próxima vez que quiera sacar el listado, sólo tendría que ejecutar la siguiente orden:

gh il

En mi caso prefiero definir alias de una sola palabra, por eso uso los alias de Bash. Tengo varios pero uno de ellos es crear un nuevo PR con gnpr o gprl para sacar una lista de PRs.

En fin, que GitHub CLI ofrece un montón de comandos (ver documentación) para realizar acciones sobre GitHub de forma programática. Si quieres aumentar la eficiencia a la que trabajas desde el terminal con GitHub creo que es una gran herramienta.