Automatizando seu Github usando Shell Script

Rebecca Oliveira
4 min readFeb 6, 2019

--

Github

O problema

Alguns dias atrás eu tive um "probleminha" com a minha conta no Github… vou explicar rapidamente, para entendermos como cheguei ao Shell Script.

A minha conta do Github era um pouco antiga (não tão antiga), foi criada em uma época que eu usava para gerenciar projetos e zero códigos. Em 2018 quando comecei a estudar programação, voltei a usa-lá agora para criar meus repositórios e códigos.

Eis que semana passada resolvi formatar meu computador, tranquila de que as coisas que tinha feito estavam salvas no Github. Porém, depois do computador formatado, ao acessar o Github começou uma série de 💩:

  1. Precisava do Two Factor Authentication (Ai ai ai! Nem lembrava que isto estava ativado)
  2. O celular que eu usava na época (2012) já não é mais o mesmo que uso em 2019 e…. claro que o 2FA do meu Github não estava no meu celular
  3. Opa, tem o Recovery Codes, que estava a onde?! É... não sei, provavelmente ficou salvo na máquina que eu usava na antiga empresa… se perdeu né!
  4. Abri um chamado no suporte do Github e a resposta foi "Desculpa não podemos fazer nada, cancelar seu 2FA vai contra nossa política de segurança"

OK… minha conta do Github ficou bloqueada mesmo. Como nem tudo é tempestade, por sorte eu não tinha nenhum repositório privado — fica de lição pra você que assim como eu está começando mas tem repositórios privados, confira sempre se está tudo realmente seguro.

Solução: Criar uma nova conta no Github e clonar todos os repositórios para essa nova conta.

Chamei os amigos no Twitter:

Amigoossss….me ajudem!!!!

Graças à Nossa Senhora da Internet e das Comunidades de Programação o Celso Fernandes me apresentou o Shell Script, e eu não precisei clonar os repositórios um a um manualmente.

Mas afinal, o que é Shell Script?

Shell Script é uma ferramenta de automação de instruções, que executa uma sequência de comandos.

É o shell quem interpreta a linha de comando digitada pelo usuário no terminal e chama os programas desejados.

Como estas são as características de uma linguagem de programação, o shell é uma ferramenta muito poderosa para desenvolver scripts e programinhas rápidos para automatizar tarefas do dia-a-dia.

Conheci o blog do Aurelio, ele é fera em Shell Script, escreveu um livro sobre esta tecnologia (que eu tenho em casa — obrigada marido por ter comprado anos atrás! rsrsr) e é possível tirar muitas dúvidas sobre o assunto no site dele.

Cirando repositórios via terminal

Vamos começar por automatizar a criação dos repositórios.

Pelo terminal é possível criar repositórios, usando a API do Github:

curl -u 'username' https://api.github.com/user/repos -d '{"name":"repository name"}'

Onde 'username' é o seu usuário do Github, e no campo o "repository name" inclui o nome do repositório a ser criado. Na sequencia é pedido a senha do Github e pronto, repositório criado.

Mas e se eu tiver que criar 100 repositórios? E aí que o Shell Script entra:

Todos os arquivos a seguir serão criados dentro do mesmo diretório. Vamos criar um arquivo ~/.secrets.shque salvaremos o nosso usuário e senha do Github:

#!/bin/bashexport GITHUB_PASSWORD='AdventureTime'export GITHUB_USERNAME='Finn'

A partir daqui, vamos criar um novo documento .sh que daremos o nome decreate_repo.sh com o comando para criar um novo repositório importando o usuário e senha do nosso Github:

#!/bin/bash curl curl -u "$GITHUB_USERNAME:$GITHUB_PASSWORD" https://api.github.com/user/repos -d "{\"name\":\"${1}\"}"

E para criar vários repositórios usamos um outro doc .shcom o nome de create_repos.sh:

#!/bin/bashfor repo in repo1 repo2 repo2
do
./create_repo.sh $repo
done

Arquivos criados, damos o comando no nosso terminal:

$ source ~/.secrets.sh 
$ ./create_repos.sh

Clonando repositórios de uma mesma conta

Como foi o meu caso, tive que clonar todos os repositórios da minha antiga conta para a nova.

Após criar todos os novos repositórios (usei o mesmo nome para eles na minha nova conta do Github), adicionei um novo arquivo .sh com o nome de clone_repos.shpara clonar os repositórios da antiga conta.

#!/bin/bashAPP_ROOT=`pwd`
for repo in repoA repoB repoC repoD repoE repoF
do
cd ~/src
git clone https://github.com/PrincessBubblegum/${repo}.git
cd ~/src/${repo}
git remote rm origin
git remote add origin git@github.com:Finn/${repo}.git
git push --set-upstream origin master
done
cd $APP_ROOT

Na parte do código for repo in repoA repoB...é necessário colocar o nome exato do repositório o qual você está clonando, neste exemplo o nome dos repositórios seriam os criados na conta da 'PrincessBubblegum' que o Phinn está clonando.

Arquivo criado, agora rodamos no terminal o código:

$ ./clone_repos.sh

E seu Github estará com todos os novos repositórios clonados, com apenas uma linha de comando no terminal.

Lições aprendidas

Algumas lições aprendidas neste processo todo:

  1. Conheça a sua ferramenta de trabalho: Seu computador, seus arquivos, seu Github. Foi muito bom pra eu aprender que meu Github tinha Two Factor Authentication e eu nem sabia. Que existem chaves públicas e privadas e que salvar o Recovery Codes em um lugar seguro e acessível é muito importante.
  2. Se você está fazendo algum trabalho repetitivo em computação, por exemplo: criando vários repositórios manualmente ou usando Crtl C + Ctrl V excessivamente, pare e pesquise porque com certeza alguém já criou um modo de automatizar.
  3. Do not underestimate your ability, even being a beginner in programming. Research, read, ask to an experienced developers, participate in communities, this is how knowledge is built

E você que chegou até aqui, usa Shell Script para automatizar algum processo? Como você costuma automatizar algumas tarefas? Compartilha com a gente aqui! :D

You can read this post in English here!

--

--