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 degulp.src, creamos un nuevo proveedor de streams:srcFromStaged. Si necesitas ejecutar las mismas herramientas sobre uncommit, unabrancho untag, por ejemplo en integración continua, puedes hacerlo consrcFromCommitsin realizar uncheckout. -
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