Aumente sua produtividade com a Github CLI
Tags: github, braziliandevs, cli, productivity
Published: 2024-02-26 22:18:07

Se você usa o Github no dia e ainda não conhece a CLI do Github, eu recomendo que você continue lendo esse artigo. Hoje vamos aprender como aumentar nossa produtividade e qualidade de vida ao trabalhar com issues, pull requests, actions, e mais!

## Sumário
- [Instalação](#instalação)
- [Autenticando](#autenticando)
- [Repositórios](#repositórios)
- [Issues](#issues)
- [Pull requests](#pull-requests)
- [Apelidos](#apelidos)
- [Actions](#actions)
- [Descobrindo mais](#descobrindo-mais)
- [Extensões](#extensões)
- [Conclusão](#conclusão)

## Instalação

Antes de tudo, precisamos instalar a CLI para podermos usar ela, como existem diversos sistemas operacionais neste belo mundo, deixarei aqui um link para o [guia de instalação](https://github.com/cli/cli?tab=readme-ov-file#installation) do próprio Github.

Com a ferramenta instalada, podemos verificar a versão com o comando:

```bash
gh --version
```

## Autenticando

Depois de instalado, precisamos nos autenticar para conseguir desfrutar da ferramenta, isso é feito com o comando:

```bash
gh auth login
```

Para verificar que está logado, use o comando:

```bash
gh auth status
```

Uma mensagem deve aparecer dizendo que você esta logado no github na sua conta.

# Repositórios

Com a CLI do Github, conseguimos clonar, dar fork, listar, ver um repositório, e muito mais.

Digamos que gostaríamos de ver todos nossos repositórios, podemos usar o comando `gh repo list`.

![Lista dos meus repositórios](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/awbcmjlrbxq4we0gu6hn.png)


Esse é o output do comando, uma tabelinha bem simpática que nos mostra os nomes, descrições e algumas outras informações de todos os meus repositórios, note que ele diz que está mostrando 30 de 31, isto é porque esse comando só mostra repositórios nos quais eu sou o dono, o 31º é um repositório que eu sou somente contribuidor, por isso não é mostrado.

Podemos também criar um repositório, com `gh repo create`, esse comando ajuda muito a simplificar o processo de criar e configurar um repositório totalmente novo:

![Comando perguntando nome do repositório, dono, visibilidade etc](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cfi213e2jgv7cax7rzm5.png)

Clonar um repositório também é simples, podemos fazer do jeito que já estamos acostumados com git, usando a URL do repositório:

![Clonando um repositório com sucesso usando a url](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oah1z2niiyzeldajjwn4.png)

Ou melhor ainda, fazendo `gh repo clone OWNER/REPO`:

![Clonando um repositório com sucesso usando a sintaxe OWNER/REPO](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5l7lmffskrugujz0l8t.png)

Para fazer forks, com `gh repo fork`, a sintaxe é a mesma.

Com esse comando, podemos ainda arquivar, deletar, renomear e sincronizar repositórios e mais!
## Issues

Diariamente trabalhamos muito com issues diferentes, a CLI também facilita a nossa vida nesse quesito, tirando a necessidade de sair do terminal para abrir/ver/listar/comentar etc.

Como é de se esperar, para criar uma issue, usamos `gh issue create`:

![Questionário perguntando título, corpo e se quer submeter a issue, terminar no browser ou cancelar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j0p5f9n33xsm65i8atr3.png)


Analogamente, se quisermos ver as issues criadas, usamos um `gh issue list`:

![Lista das issues no meu repositório](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2prm92fem4j5efxirbgm.png)

Também é possível filtrar issues com uma label específica, podemos usar a flag `--label`, por exemplo para ver só as issues com a label "bug", podemos fazer `gh issue list --label=bug` (no meu caso a única issue já é de bug, mas funciona!).

Para conseguir mais informações de uma issue específica (por exemplo, a issue de verdade ao invés de só o título e label), usamos o comando `gh issue view <numero_issue>`:

![Terminal mostrando o título, corpo e status da issue](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bdb7ohbtcc4xxh9wpz3.png)

Nesse caso as informações são facilmente entendidas pelo terminal mesmo, entretanto, as vezes temos mídias ou textos maiores e ver a issue pelo github seria melhor, para isso podemos usar a flag `--web`.

![A issue é aberta no seu browser](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c6ts9mc3p0h465omhmx6.png)

É possível comentar em issues abertas usando o comando `gh issue comment <numero_issue>`:

![Questionário perguntando o conteúdo do comentário e se quer postar ou não](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/brm3rg85mexoggxhsdyg.png)

Adicionalmente, também é possível fechar, reabrir, deletar, fixar issues e muito mais.

## Pull requests

De longe, o que eu mais gosto ao usar a CLI, é o quanto ela simplifica trabalhar com pull requests, por exemplo, digamos que temos uma nova branch com alterações já commitadas e agora queremos criar uma PR para o repositório, ao invés de passar pela dor de cabeça de subir uma nova branch e criar pelo site, podemos simplesmente fazer `gh pr create`.

![Questionário perguntando título, texto do pr e o que fazer depois](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tg34o27ypp8tp7kf2i6s.png)
Se precisarmos adicionar algum tipo de mídia, podemos simplesmente continuar no browser, mas toda a informação já vai estar lá.

Assim como em issues, também podemos usar `gh pr list` e `gh pr view`, para listar todos os pull requests e ver mais detalhes sobre uma específica respectivamente.

Imagine que alguém acabou de abrir um PR no see repositório, e agora? como testar o código? É possível dar um checkout localmente com `gh pr checkout <numero_pr>`, assim seu git vai criar uma nova branch no seu repositório local, com todas as mudanças apresentadas no pull request:

![Isso cria uma nova branch com o código apresentado no pr](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/poxr0vpxiobd4b73snvh.png)

Também é possível comentar em um pr com `gh pr comment <numero_pr>`:

![Mesma coisa do issue comment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kweh5itu4fvqybq1tg4d.png)

Agora digamos que você tenha sim checks configurados para nova pull requests, como linters ou testes automatizados, é possível verificar a situação de um pr específico com `gh pr checks <numero_pr>`:

![Tabela mostrando um check de linter que passou com sucesso, demorou 2min e 19 sec e um link pra ele](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/471npomjw3phn7e8rmyh.png)

Ademais, também podemos fazer review, marcar um pull request como pronto para review, fechar, reabrir, dar merge, e mais, só pelo terminal.

## Apelidos

Como qualquer ferramenta de terminal, é sempre bom criar aliases (apelidos) para comandos que você usa frequentemente, podemos fazer isso usando o comando `gh alias set`. Por exemplo, vamos criar um alias chamado "bugs", que vai nos mostrar só as issues com a label "bug", para alcançar isso basta digitar no terminal:

```bash
gh alias set bugs 'issue list --label=bug'
```

Agora podemos a qualquer momento digitar "gh bugs" no terminal e ver todas as issues relacionadas :)

Adicionalmente, podemos deletar um alias existente com `gh alias delete <nome>` ou ver todos os alias criados com `gh alias list`.

## Actions

Se você usa Github Actions, um outro poder da CLI é a habilidade de controlar e ver informações relevantes diretamente no terminal, com `gh run` e `gh workflow`, a diferença é que `workflow`se refere aos arquivos e `run` as runs que as actions já tiveram.

Para listar todas as recentes runs, usamos `gh run list`:

![Tabelinha mostrando o status, nome, quanto tempo demorou, qual workflow foi e mais das últimas runs](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ihkimj7bitgril2f5ofv.png)

Também podemos ver detalhes de uma run ou jobs dela usando `gh run view`:

![Questionário perguntando qual workflow e qual run, mostra os jobs e o tempo passado e o id](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o1c2czuof5vm8fjzxteu.png)

O mesmo vale para `workflow`, porém, com esse subcomando também podemos usar `enable` e `disable`, ativar e desativar um arquivo de workflow específico.

Caso seu workflow receba o evento `workflow_dispatch`, é possível ativar ele manualmente com o comando:

```bash
gh workflow run
```

# Descobrindo mais

Apenas vimos a superfície de o que a CLI do Github é capaz de fazer, alguns dos outros recursos que podemos manipular com essa ferramenta incluem: releases, projects, organizations, labels, gists, variáveis do Github Actions e mais!

Para entender melhor como ela pode te ajudar no seu dia a dia como desenvolvedor, recomendo explorar os comandos existentes com `gh help`:

![Comando mostrando todos os principais comandos e uma descrição do que fazem, além dos seus alias e qual comando eles representam](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99qqeze2pgnp1ffcwlxw.png)

Note que nossos comandos de alias também aparecem por aqui, o que é uma adição bem legal.

Caso nossa dúvida seja acerca de um comando ou subcomando específico, podemos sempre usar a sintaxe `gh help <comando> <subcomando>`, como, por exemplo:

![Descrição de o que o pr create faz](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s07h4e6y4e9ucak31bz2.png)
![Flags](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tsmlvltw89j3fa87u80z.png)
![Exemplos e onde ler mais](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s6jvvj6leph8q3k32ryh.png)

Conseguimos uma descrição super detalhada de exatamente o que esse comando faz, as flags disponíveis, os apelidos, exemplos e mais informações!

## Extensões

Toda boa ferramenta precisa ter extensões feitas pela comunidade, e aqui não é diferente, temos diversas extensões oficiais e feitas pela comunidade para turbinar ainda mais sua CLI. Para começar use o comando:

```bash
gh extensions browse
```

![Uma lista das extensões disponíveis com um pequeno preview do readme de cada do lado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4dm43vq8pc08s5bemhre.png)

Aqui podemos ver todas as extensões, ver seus repositórios e instalar elas se quisermos, se você quer achar uma extensão específica, você pode usar o subcomando `search`:

![Aqui eu pesquisei por "star" e ele mostra as extensões relacionadas](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2xg2lksfwj4yf7u7h6d.png)

Instalou uma extensão e agora decidiu que não quer mais ela? Tudo bem, basta usar o comando `gh extensions list` para ver todas as extensões instaladas e `gh extensions remove` para remover uma delas:

![Removendo a extensão dash com sucesso](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/flkkyv6hstpaazltu7pr.png)

## Conclusão

Espero que você tenha gostado desse artigo! Eu pessoalmente uso essa ferramenta diariamente e me ajudou muito, principalmente em projetos open source, espero que possa te ajudar também.

Caso queira ler mais sobre, aqui está o [manual oficial](https://cli.github.com/manual/).

Se tiver alguma dúvida, sugestão ou feedback, sinta-se à vontade para deixar um comentário, ficarei feliz em responder, obrigado por ler!