Automatizando seu código com Git Hooks: fique por dentro

Neste artigo você vai ver:

Você vai sair desse artigo automatizando seu código com Git Hooks, além de saber o que é e para que serve esse componente do Git. Vamos nessa?

Primeiro, a plataforma do Git, amplamente utilizada por pessoas desenvolvedoras, é um ecossistema que permite o gerenciamento de projetos de forma simples e eficaz.

Por meio dessa plataforma, é possível compartilhar e colaborar de maneira direta e fácil, tanto com código quanto com documentação.

No artigo de hoje, vamos falar sobre como é possível automatizar o gerenciamento do código por meio do uso de Git Hooks, um componente presente no Git que auxilia na modificação de processos como push, commit, pull e outros comandos.

O projeto final pode ser encontrado no repositório presente no meu GitHub.

Análise de código

O Detekt é uma biblioteca que analisa o código na linguagem Kotlin. É possível verificar a indentação de código, identificar métodos longos, implementações incorretas, entre outras personalizações possíveis. 

Como exemplo, será utilizada essa biblioteca para realizarmos a verificação do código automaticamente toda vez que algo for commitado, por meio da utilização do Git Hooks.

Implementando Detekt

Abra o projeto no Android Studio e acesse o arquivo build.gradle em nível de projeto. Em seguida, importe a biblioteca para as dependências:

classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:lastversion"

Clique aqui para acessar a documentação oficial do Detekt com as versões disponíveis. 

O que é Git Hooks?

O Git Hooks permite que regras sejam definidas em qualquer processo de versionamento de código, como commit, push e pull

É possível automatizar a maioria das tarefas dentro do fluxo do Git Hooks. Nós podemos configurar para executar testes unitários ou verificar bibliotecas, por exemplo.

Nesse contexto, como o Detekt é uma biblioteca de análise de código, vamos executar no pre commit, ou seja, quando qualquer pessoa desenvolvedora fizer o comando git commit irá executar o Detekt.

Client-Side vs Server-Side

É importante entender a diferença desses dois lados, pois interfere em quais fluxos de trabalho vai fazer sentido ser alterado por você.

Processos que são executados no Client-Side, mesmo que seja modificado, se por acaso alguma outra pessoa desenvolvedora clonar o projeto, não são copiados. 

Por outro lado, processos chamados no Server-Side, caso alterados, são impostos no projeto todo, sendo copiado quando outra pessoa clonar o repositório.

Fluxos de trabalho do Git

  1. Client-Side hooks
    1. pre-commit: executado antes de digitar a mensagem do commit.
    2. commit-msg: fluxo efetuado após a pessoa desenvolvedora digitar a mensagem do commit.
    3. prepare-commit-msg: processo que roda após o pre-commit.
    4. pre-push: cumprido antes do git push.
    5. pre-rebase: concretizado antes do merge.
  2. Server-Side hooks
    1. pre-commit: executado antes de digitar a mensagem do commit.
    2. pre-receive: tarefa realizada antes do git push.
    3. update: chamado após o pre-rebase.

Automatizando seu código com Git Hooks

Será necessário acessar o seu projeto através de um terminal de comando, aqui irei utilizar o git bash. Para acessar uma pasta, use o seguinte comando:

cd C:\Users\ada\AndroidStudioProjects\myproject

Iremos navegar até o arquivo hooks presente no nosso projeto:

cd C:\Users\ada\AndroidStudioProjects\myproject>cd .git/hooks

Resta agora criar o arquivo pre-commit:

cd C:\Users\ada\AndroidStudioProjects\myproject\.git\hooks>nano pre-commit

Feito isso, colocamos o trecho de código dentro da pasta pre-commit:

#!/usr/bin/env bash
# começando a executar a tarefa
echo "Running detekt check..."
OUTPUT="/tmp/detekt-$(date +%s)"
./gradlew detekt > $OUTPUT
EXIT_CODE=$?
# exibindo a mensagem de erro customizada caso o detect ache alguma   # falha no código
if [ $EXIT_CODE -ne 0 ]; then
  cat $OUTPUT
  rm $OUTPUT
  echo "*************************************************"
  echo "                 detekt falhou                   "
  echo " Por favor verifique os erros antes de committar "
  echo "*************************************************"
  exit $EXIT_CODE
fi
rm $OUTPUT

Por último, ativamos a nossa pasta, utilizando o comando:

cd C:\Users\ada\AndroidStudioProjects\myproject\.git\hooks>chmod +x pre-commit  

Prontinho, agora o Git irá executar o Detekt e exibir um erro caso não passe nos parâmetros de aceite.

Um exemplo do que será exibido:

***************************************************
"                 detekt falhou                   "
" Por favor verifique os erros antes de committar "
***************************************************

Conclusão

O exemplo acima mostra a utilização da biblioteca Detekt, mas a imaginação é o limite! Você pode automatizar qualquer outra tarefa do projeto, aprimorando o seu projeto.

O uso do Git Hooks somado aos frameworks de CI/CD permite que você tenha controle de qualidade do seu código de uma forma muito simples e concreta, diminuindo as chances de erros na produção.

Inclusive, todo código-fonte estará no repositório presente no meu GitHub.

Caso queira aprofundar seus conhecimentos sobre automação de processos no seu código, indico os seguintes artigos:

Tem alguma dúvida sobre como automatizar seu código utilizando o Git Hooks? Deixe nos comentários ou fique à vontade para me mandar mensagem!

Referências

Capa do artigo de uma foto de uma mulher em frente a dois computadores com códigos em tela, com uma mão ela escreve no teclado e com a outra segura um celular.
image (11)
Desenvolvedora Android
Programadora que adora filmes, livros e cafezinho da tarde. Acredito firmemente que, como seres humanos, temos a responsabilidade de cultivar a empatia e lutar por equidade. Com a revolução e a tecnologia adequada, podemos transformar nossa sociedade em um lugar cada vez melhor.

Artigos relacionados

Imagem onde aparece a mão de uma pessoa branca segurando um celular com códigos na tela.
Mobile
Postado em:
Capa do artigo sobre bibliotecas Android. Na foto, aparece um celular, um notebook, um óculos, um caderno de anotações, um café e fones de ouvido em cima de uma mesa.
Mobile
Postado em:

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.