Artículos

Gilp: una herramienta de Node para implementar pre-commit y otros hooks de Git

Git tiene muchos hooks del lado del cliente y del servidor, pero el más conocido y utilizado es pre-commit. Permite ejecutar validaciones, como linters, y cancelar un commit si algo falla. Gilp es una herramienta para definir hooks mediante tareas de gulp, instalarlos y ejecutarlos.

¿Por qué gilp en lugar de gulp?

Hay 2 razones principales:

  • Los gestores habituales de hooks pre-commit usan el contenido local del archivo, en lugar del contenido preparado para el commit en Git. Gulp incluye vinyl, un formato de archivo virtual con el que podemos crear una versión en memoria para usarla como entrada de las tareas. Siguiendo el ejemplo de gulp.src, creamos un nuevo proveedor de streams: srcFromStaged. Si necesitas ejecutar las mismas herramientas sobre un commit, una branch o un tag, por ejemplo en integración continua, puedes hacerlo con srcFromCommit sin realizar un checkout.

  • Gulp tiene muchos plugins listos para usar. Puedes verlos aquí.

Yarn, por favor.

Recomendamos usar yarn en lugar de npm porque el informe de errores es menos extenso cuando gulp devuelve un código distinto de cero. Así podemos concentrarnos en el error real.

Instalación

yarn add --dev gilp

Uso

Puedes usar cualquier plugin de gulp o gilp.

Cómo definir un 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());
});

** Obtén un stream de los archivos preparados para el commit (staged content):**

gilp.srcFromStaged();

** Obtén un stream de archivos de un commit:**

gilp.srcFromCommit('e3bca34');

Instalar los hooks definidos (.git/hooks)

Gilp define automáticamente una tarea de gulp para instalar los hooks de Git correctamente, ya que cada hook debe estar en la carpeta .git/hooks.

yarn run gulp gilp-install

Para instalar los hooks automáticamente después de ejecutar yarn [install], agrega el siguiente comando postinstall a tu archivo package.json:

{
  // ...
  "scripts": {
    // ...
    "gulp": "gulp",
    "postinstall": "gulp gilp-install"
  },
  // ...
}

Ejecutar una tarea en integración continua para comprobar el 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 finales

Este proyecto de código abierto tiene licencia MIT y está disponible en nuestra organización de GitHub: https://github.com/sophilabs/gilp

“Gilp: una herramienta de Node para implementar pre-commit y otros hooks de Git” de Pablo Ricco está bajo la licencia CC BY SA. Los ejemplos de código fuente están bajo la licencia MIT.

Foto de Cristopher Gower.

Clasificado en Node.js / Código abierto / Git.

Lecturas relacionadas