Atualizando forks no Github com um bot 🤖😱
Tags: github, forks, update, pull
Published: 2020-04-07 02:23:04

Já faz um tempo que queria escrever um artigo, mas sempre acabava esbarrando em algumas "barreiras" que eu mesmo colocava: falta de tempo, dúvida sobre o que escrever, insegurança, etc, etc. 🤔🤔🤔

![thinking-batman](https://media.giphy.com/media/a5viI92PAF89q/giphy.gif)
<figcaption>Fonte: Giphy</figcaption>

Mas hoje isso mudou e vou falar de uma ferramenta bem bacana, disponível no Github chamada: <b>[pull](https://github.com/apps/pull)</b>.

# Pull? Wat?

Se você em algum momento já trabalho com controle de versionamento, já deve estar familíarizado com a seguinte rotina: você chega cedo no trabalho, pega seu café, e começa o dia com um git push.

![typing-guy](https://media.giphy.com/media/llKJGxQ1ESmac/giphy.gif)
<figcaption>Fonte: Giphy</figcaption>

Só que ...

```shell
To github.com:MateusAndrade/use-cep-hook.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:MateusAndrade/use-cep-hook.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```

Claro, o bom e velho `git pull`, ou caso você queria dar pull de outra branch com `git pull origin minha-branch-topper` já resolveriam seu problema. 😊

Porém, ao usar forks esse processo acaba sendo um pouco diferente.

# O que é um fork?

Segundo a própria documentação do Github:

> After using GitHub by yourself for a while, you may find yourself wanting to contribute to someone else’s project. Or maybe you’d like to use someone’s project as the starting point for your own. This process is known as forking.

Traduzindo: após uma bom tempo mexendo nos próprios projetos, você pode querer ajudar no projeto de outra pessoa com um "cópia" sua. Esse processo recebe o nome de forking(ou apenas fork).

Em resumo, ao fazer fork de um projeto <b>X</b> você cria uma cópia desse projeto associada a sua conta, algo como `SeuNomeDeUsuario/X`. 

![fork-image](https://miro.medium.com/max/2696/1*a9cDsKIG0JFXkN0yVfG82Q.png)
<figcaption>Fonte: https://miro.medium.com/max/2696/1*a9cDsKIG0JFXkN0yVfG82Q.png</figcaption>
# Atualizando forks manualmente... 💬

Bem, como todo processo processo que já foi automatizado, também existe a maneira manual de fazer o mesmo que pode ser vista [aqui](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork).

Em resumo: se trata de trackear a `base` do seu fork, usando o comando ```
git remote add upstream https://github.com/userName/repo.git
```

# Atualizando forks automaticamente 😱

Mas indo ao ponto que vim falar hoje, vamos fazer sobre o [<b>pull</b>](https://github.com/apps/pull)(bot).

Basicamente é um bot/[app](https://github.com/apps) Github que trackeia as alterações na `base` do seu fork, envia uma PR pro seu fork e faz o merge sem nenhuma interação. 

Pra configurar ele na sua conta, basta acessar a url dele na listagem de apps do Github: https://github.com/apps/pull e seguir com o processo de configuração.

Após isso...depois de algumas horas, o bot vai verificar as diferenças entre a `base` do seu fork e vai criar uma PR automaticamente. Um exemplo: https://github.com/MateusAndrade/react-native-share/pull/20

<a href="https://ibb.co/nR58YmC"><img src="https://i.ibb.co/pn9rMwy/Screen-Shot-2020-04-06-at-23-12-23.png" alt="Screen-Shot-2020-04-06-at-23-12-23" border="0" /></a>
<figcaption>Fonte: https://ibb.co/nR58YmC</figcaption>

Com isso você vai economizar alguns `git pull` durante o seu dia. Lembrando, que o bot faz essa atualização após algumas horas. 

![gif](https://media.giphy.com/media/8g63zqQ5RPt60/giphy.gif)
<figcaption>Fonte: Giphy</figcaption>

Fontes: 
  * Pull: https://github.com/wei/pull
  * Fork a Repo: https://help.github.com/en/github/getting-started-with-github/fork-a-repo.