Como adicionar hooks aos commits de seu projeto utilizando Husky

marcusicaro

Marcus Ícaro

Posted on December 7, 2023

Como adicionar hooks aos commits de seu projeto utilizando Husky

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 como devDependencies e, quando formos instalar as dependências para nossa aplicação rodar no servidor, utilizamos o comando: npm install --production, garantindo assim que as devDependencies 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
Enter fullscreen mode Exit fullscreen mode

Feito isso, será criado um arquivo na pasta .husky com o seguinte conteúdo:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm test
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

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);
});
Enter fullscreen mode Exit fullscreen mode

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/).

💖 💪 🙅 🚩
marcusicaro
Marcus Ícaro

Posted on December 7, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related