Tâche gulp pour mettre à jour la version et créer un commit Git - partie 2
Cet article est la suite de celui-ci: http://julienroche.blogspot.fr/2015/10/tache-gulp-pour-mettre-jour-la-version.html
Ici, je vais étendre ma petite tâche Gulp afin de proposer de gérer le status "snapshot". Pour ce faire, spécifions un peu le workflow:
Ici, je vais étendre ma petite tâche Gulp afin de proposer de gérer le status "snapshot". Pour ce faire, spécifions un peu le workflow:
- Si je vois que la version courante contient le status
- Je propose de l'enlever
- Si oui, je créé un commit Git avec les fichiers mis à jours, sans ce status
- Sinon, j'arrête le workflow
- Sinon
- Je demande vers quoi je souhaite évoluer la version
- Je demande si je souhaite ajouter le statut
- Enfin, je créé un commit Git avec les fichiers mis à jours
Voici le contenu de la tâche Gulp (comme vous pouvez le constater, il y a un peu plus de code que la dernière fois):
/*eslint-env node */
'use strict';
// Imports
var
gutil = require('gulp-util'),
gulp = require('gulp'),
gulpOptions = require('../gulp-options'),
bump = require('gulp-bump'),
git = require('gulp-git'),
inquirer = require('inquirer'),
runSequence = require('run-sequence'),
semver = require('semver');
// Constants
var
FILES_TO_UPDATE = ['package.json', 'bower.json', 'npm-shrinkwrap.json'],
SNAPSHOT_FLAG = 'SNAPSHOT',
FLAG_DELIMITER = '-';
// Private functions
function _getCurrentVersion() {
delete require.cache[require.resolve('../package.json')]; // To load always the current version, not from cache
return require('../package.json').version;
}
function _getVersionDetails(version) {
var parts = version.split(FLAG_DELIMITER);
return {
'version': parts[0].trim(),
'isSnapshot': !!(parts[1] && parts[1].trim().toUpperCase() === SNAPSHOT_FLAG)
};
}
function _gulpCommit(nextVersion, callback) {
gutil.log('Future Version: ', nextVersion);
gulp.src(FILES_TO_UPDATE, {'cwd': gulpOptions.currentProject})
.pipe(bump({'version': nextVersion, 'key': 'version'}))
.pipe(gulp.dest(gulpOptions.currentProject))
.on('end', callback);
}
function _promptBump(currentVersion, callback) {
inquirer.prompt(
[
{
'type': 'list',
'name': 'bump',
'message': 'What type of bump would you like to do?',
'choices': ['major', 'minor', 'patch']
}
],
function (responses) {
var nextVersion = semver.inc(currentVersion, responses.bump);
inquirer.prompt(
[
{
'type': 'confirm',
'name': 'addSnapshot',
'message': 'Do you want to add the snapshot flag ?',
'default': false }
],
function (responses) {
if (responses.addSnapshot) {
_gulpCommit(nextVersion + FLAG_DELIMITER + SNAPSHOT_FLAG, callback);
} else {
_gulpCommit(nextVersion, callback);
}
}
);
}
);
}
// Tasks
gulp.task('bump:interactive', function (callback) {
var currentVersion = _getCurrentVersion(),
versionDetails = _getVersionDetails(currentVersion);
gutil.log('Current Version: ', currentVersion);
if (versionDetails.isSnapshot) {
inquirer.prompt(
[
{
'type': 'confirm',
'name': 'removeSnapshot',
'message': 'Do you want to remove the snapshot flag ?',
'default': true }
],
function (responses) {
if (responses.removeSnapshot) {
_gulpCommit(versionDetails.version, callback);
} else {
callback(new Error('We stop the bump process.'));
}
}
);
} else {
_promptBump(currentVersion, callback);
}
});
gulp.task('bump:git', function () {
var currentVersion = _getCurrentVersion();
gulp.src(FILES_TO_UPDATE, {'cwd': gulpOptions.currentProject})
.pipe(git.commit('Version ' + currentVersion));
});
module.exports = function (callback) {
return runSequence(
'bump:interactive',
'bump:git',
callback
);
};
Pour faire suite au précédent article, où ma version était en 0.1.0, je décide de créer une 0.2.0 avec le flag "snapshot". Cela va donc donner ceci dans la console:
J'enchaîne ensuite sur le fait de l'enlever, ce qui nous donne:
Et comme vous pouvez le constater:
Bref, une petite tâche Gulp toujours utile pour nos projets :)
Commentaires
Enregistrer un commentaire