Gilp: uma ferramenta de Node para implementar pre-commit e outros hooks do Git

O Git tem muitos hooks do lado do cliente e do servidor, mas o mais conhecido e usado é pre-commit. Ele permite executar validações, como linters, e cancelar um commit se algo falhar. Gilp é uma ferramenta para definir hooks por meio de tarefas do gulp, instalá-los e executá-los.
Por que gilp em vez de gulp?
Há 2 motivos principais:
-
Os gerenciadores habituais de hooks pre-commit usam o conteúdo local do arquivo, em vez do conteúdo preparado para o commit no Git. O Gulp inclui
vinyl, um formato de arquivo virtual com o qual podemos criar uma versão em memória para usar como entrada das tarefas. Seguindo o exemplo degulp.src, criamos um novo provedor de streams:srcFromStaged. Se você precisar executar as mesmas ferramentas sobre umcommit, umabranchou umatag, por exemplo em integração contínua, pode fazer isso comsrcFromCommitsem realizar umcheckout. -
O Gulp tem muitos plugins prontos para uso. Veja aqui.
Yarn, por favor.
Recomendamos usar yarn em vez de npm porque o relatório de erros é menos extenso quando gulp retorna um código diferente de zero. Assim, podemos nos concentrar no erro real.
Instalação
yarn add --dev gilp
Uso
Você pode usar qualquer plugin do gulp ou do gilp.
Como definir um hook
var gulp = require('gulp');
var eslint = require('gulp-eslint');
var gilp = require('gilp')(gulp);
gilp.hook('pre-commit', function () {
return gilp.srcFromStaged(['**/*.js'])
.pipe(eslint())
.pipe(eslint.failAfterError());
});
** Obtenha um stream dos arquivos preparados para o commit (staged content):**
gilp.srcFromStaged();
** Obtenha um stream de arquivos de um commit:**
gilp.srcFromCommit('e3bca34');
Instalar os hooks definidos (.git/hooks)
O Gilp define automaticamente uma tarefa do gulp para instalar os hooks do Git corretamente, pois cada hook deve estar na pasta .git/hooks.
yarn run gulp gilp-install
Para instalar os hooks automaticamente depois de executar yarn [install], adicione o seguinte comando postinstall ao seu arquivo package.json:
{
// ...
"scripts": {
// ...
"gulp": "gulp",
"postinstall": "gulp gilp-install"
},
// ...
}
Executar uma tarefa na integração contínua para verificar o commit
var gulp = require('gulp');
var eslint = require('gulp-eslint');
var gilp = require('gilp')(gulp);
gulp.task('check-commit', function () {
return gilp.srcFromCommit('e3bca34', ['**/*.js'])
.pipe(eslint())
.pipe(eslint.failAfterError());
});
Notas finais
Este projeto de código aberto tem licença MIT e está disponível na nossa organização do GitHub: https://github.com/sophilabs/gilp