Git hooks pre-commit para projetos Java e Ruby

Hooks, que podem ser traduzidos como “ganchos”, são pequenos scripts que podem ser adicionados dentro do diretório “.git/hooks/”, existente em todo projeto que utilize o Git como ferramenta de controle de versão, para efetuar ações disparadas por alguns eventos, como pre-commit, post-commit etc (para conhecer todos os eventos visite o Git Community Book).

Quando executamos o comando “git init”, alguns scripts são copiados no diretório de hooks do projeto, porém por padrão ficam desabilitados. Para ativar um script de hook basta remover o sufixo “.sample” do nome dos scripts. Obviamente, não basta apenas ativar o script, é necessário que o desenvolvedor customize o script para realizar alguma ação desejada.

Bom, a principal intenção deste post é demonstrar uma das possibilidades de aplicação deste recurso do Git, a efetivação de commits que não quebrem os testes unitários (JUnit, no caso do Java, e RSpec, no caso do Ruby). Isso é muito útil pois evita que builds nos servidores de Integração Contínua (como o Jenkins) sejam quebrados, pois qualquer commit local dos desenvolvedores estará sendo, mesmo que forçadamente, validados. É, eu sei, no mundo ideal isso não deveria ser necessário, pois todos os desenvolvedores deveriam ter noção de que mesmo alterações ínfimas no código podem ter resultados catastróficos e, por livre e espontânea vontade, deveriam executar com frequência os testes unitários, mesmo porque são rápidos e não causam qualquer tipo de overhead no dia-a-dia do desenvolvedor, aliás, muito pelo contrário!

Bom, recentemente escrevi dois hooks para validação dos commits, um para projetos Java que rodem os testes através do Maven e outro para projetos Ruby que utilizem o RSpec. Ombos os scripts são muito simples e podem ser facilmente adaptados para projetos que usam Gradle, Test-Unit, TestNG, Shoulda etc.

A listagem abaixo mostra o Git hook pre-commit para validação da integridade dos testes unitários para projetos Java com Maven:

Download Git hook pre-commit para Java

A listagem abaixo mostra o Git hook pre-commit para validação da integridade dos testes unitários para projetos Ruby com RSpec:

Download Git hook pre-commit para Ruby

Bom é isso, para quem quiser conhecer mais sobre o recurso de Hooks do Git, vale a leitura do Capítulo 5 do Git Community Book, exclusivamente dedicado aos Hooks.