Artigos

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 de gulp.src, criamos um novo provedor de streams: srcFromStaged. Se você precisar executar as mesmas ferramentas sobre um commit, uma branch ou uma tag, por exemplo em integração contínua, pode fazer isso com srcFromCommit sem realizar um checkout.

  • 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

“Gilp: uma ferramenta de Node para implementar pre-commit e outros hooks do Git” por Pablo Ricco está sob a licença CC BY SA. Os exemplos de código-fonte estão sob a licença MIT.

Foto de Cristopher Gower.

Classificado em Node.js / Código aberto / Git.

Leituras relacionadas