Como adicionar hooks aos commits de seu projeto utilizando Husky
Marcus Ícaro
Posted on December 7, 2023
Foto por Leon Seibert em Unsplash
Glossário
Introdução
Em qualquer projeto de desenvolvimento de software, é importante que os commits sejam consistentes e atendam a padrões predefinidos. Isso ajuda a melhorar a legibilidade e a manutenção do código, além de facilitar a colaboração entre os desenvolvedores.
O Husky é uma ferramenta que permite adicionar git hooks personalizados aos seus projetos. Git hooks são scripts que são executados antes ou depois de certas ações do sistema git, como fazer um commit ou enviar um push. As utilidades de Husky incluem lint de mensagens de commit, execução de testes, lint de código e muito mais.
Neste tutorial, ensinarei como fazer com que só seja possível realizar commits após passar nos testes.
Setup do projeto
Para começar, vamos precisar de um de um repositório com o pacote npm inicializado. Para isso, crie um repositório novo (mkdir **NOME DO REPOSITÓRIO**
no Ubuntu), navegue para o repositório criado no seu terminal (cd **NOME DO REPOSITÓRIO**
) e então insira o comando npm init -y
no terminal para inicializar o pacote npm.
Caso não saiba o que é ou não tenha o Node instalado em sua máquina, acesse (aqui)[https://kinsta.com/pt/blog/como-instalar-o-node-js/] para ler um tutorial.
Agora, vamos agora instalar o Husky como uma devDependencies
. Para isso, utilizaremos o comando npm install husky --save-dev
.
Apenas um breve adendo:
devDependencies
são dependências necessárias durante o desenvolvimento da aplicação, mas não necessárias para seu código funcionar em produção. Um uso de caso bem comum para isso é quando você tem um servidor com baixo limite de armazenamento. Sua pasta node_modules, se for muito grande, pode não ser aceita com todas as dependências dela. Neste caso, para reduzirmos o espaço armazenamento necessário para nossa aplicação rodar no nosso servidor, instalamos alguns pacotes comodevDependencies
e, quando formos instalar as dependências para nossa aplicação rodar no servidor, utilizamos o comando:npm install --production
, garantindo assim que asdevDependencies
não sejam instaladas também.
Em seguida, habilitaremos os git hooks com o comando npx husky install
.
Para garantir que toda vez que seu projeto for instalado você tenha git hooks habilitados, utilize o comando npm pkg set scripts.prepare="husky install"
. Este comando irá adicionar na propriedade "scripts" de seu package.json a seguinte linha: "prepare": "husky install"
.
Primeiros comandos nos hooks
Agora, iremos adicionar comandos aos hooks de nossa aplicação. Digite os comandos abaixo em seu terminal.
npx husky add .husky/pre-commit "npm test"
git add .husky/pre-commit
Feito isso, será criado um arquivo na pasta .husky
com o seguinte conteúdo:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm test
Não se esqueça de adicionar o script correto para o comando npm test
. No caso deste tutorial, iremos utilizar o Jest, portanto, insira o seguinte comando no seu terminal, caso queira utilizar o Jest também npm pkg set scripts.test="jest"
. Este comando adiciona nos scripts do package.json o comando "test".
Esse arquivo contém comandos para executar o shell script husky.sh
para validar se o Husky está funcionando corretamente, e por fim, define que deverá ser executado o npm test
para que o commit seja aceito. Caso falhe, o commit não irá funcionar e uma mensagem de erro será exibida.
É possível "burlar" a verificação executada pelo hook com o seguinte comando:
git commit -m "*NOME DO SEU COMMIT AQUI*" --no-verify
. O--no-verify
ou-n
desabilitam a verificação do commit.
Criando um teste
Agora, vamos para a parte favorita de todo desenvolvedor: escrever testes.
Utilizarei Jest como ferramenta de teste neste exemplo, mas fique à vontade para escolher a que for mais adequada para suas necessidades.
Inicialmente, rodaremos o comando npm install --save-dev jest
para instalar o Jest no seu projeto.
Depois, criaremos um arquivo na raíz do projeto com o nome sum.js
. Copie e cole o código abaixo nele:
function sum(a, b) {
return a + b;
}
module.exports = sum;
Agora criaremos o arquivo de testes dele sum.test.js
.
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Pronto. Agora é só tentar fazer um commit. Primeiro, vamos adicionar os arquivos na index do Git com o comando git add .
. Depois vamos tentar escrever uma mensagem de commit utilizando git commit -m '*SUA MENSAGEM AQUI*'
. Se tudo ocorrer bem, você deverá ver o teste do Jest rodando e por fim uma mensagem dizendo que os arquivos foram adicionados à index com sucesso.
Por fim, rode git push
para enviar estes commits para sua plataforma de versionamento de preferência.
Caso queira saber mais sobre o Husky, acesse o repositório oficial no github aqui e a documentação oficial deles [aqui][https://typicode.github.io/husky/).
Posted on December 7, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.