Artículos

Validación de mensajes de commit y nombres de ramas (gilp-util)

Este artículo forma parte de la serie sobre herramientas para garantizar la calidad del código.

Exploraremos las utilidades de gilp-util para distintos casos de uso al crear plugins de gulp que dependen de Git. En general, sus nombres explican lo que hacen.

Quizá quieras ejecutar validaciones basadas en el nombre de la rama actual. gilpUtil.getBranchName permite obtenerlo fácilmente. Es lo que usa gilp-check-branch-name internamente.

Imagina que quieres comprobar que el nombre de la rama actual se corresponde de alguna forma con un ticket de un gestor de incidencias, por ejemplo GitHub. Para eso usaremos node-github.

Para simplificar, supongamos que la convención de nombres de ramas es [dev|master]/[isssue-number].

Este podría ser el código del plugin:

'use strict'
var through = require('through2');
var gilpUtil = require('gilp-util');
var GithubApi = require('node-github');

module.exports = function (opts, message) {
  var githubOpts = opts.github;
  message = message || 'No issue found with that number.';

  function bufferContents(file, enc, cb) {
    cb();
  }

  function endStream(cb) {
    var github = new GitHubApi();
    var branchName = gilpUtil.getBranchName();
    var issueNumber = branchName.split('/')[1];

    github.authenticate(githubOpts.auth);
    github.issues.get({
      owner: githubOpts.owner, 
      repo: githubOpts.repo, 
      number: issueNumber 
      }, (err, res) => {
        if (res.statusCode > 400) {
          this.emit('error', new Error('gilp-check-branch-name-issue-tracker: ' + message));
          cb();
        }
    });
  }
  return through.obj(bufferContents, endStream);
};

En tu gulpfile deberías incluirlo de esta manera:

const gilp = require('gilp')(gulp);
const checkBranchIssue = require('check-branch-issue');  // Or something.

gilp.hook('pre-commit', () => {
  gilp.srcFromStaged(['**/*'])
  .pipe(checkBranchIssue(
    {github: 
      {auth: {}, /* type and token  */
       owner: '', /* repo owner */
       repo: '', /* repo */ }
    }))
});

También tenemos getCommitMessage, isInMerge y getGitDirectory. Consulta el README.

“Validación de mensajes de commit y nombres de ramas (gilp-util)” de Rodrigo Lopez está bajo la licencia CC BY SA. Los ejemplos de código fuente están bajo la licencia MIT.

Foto de Luca Bravo.

Clasificado en Código abierto.

Lecturas relacionadas