UNPKG

commit-and-tag-version

Version:

replacement for `npm version` with automatic CHANGELOG generation

69 lines (59 loc) 1.98 kB
const bump = require('../lifecycles/bump'); const checkpoint = require('../checkpoint'); const formatCommitMessage = require('../format-commit-message'); const path = require('path'); const runExecFile = require('../run-execFile'); const runLifecycleScript = require('../run-lifecycle-script'); module.exports = async function (args, newVersion) { if (args.skip.commit) return; const message = await runLifecycleScript(args, 'precommit'); if (message && message.length) args.releaseCommitMessageFormat = message; await execCommit(args, newVersion); await runLifecycleScript(args, 'postcommit'); }; async function execCommit(args, newVersion) { let msg = 'committing %s'; let paths = []; const verify = args.verify === false || args.n ? ['--no-verify'] : []; const sign = args.sign ? ['-S'] : []; const signoff = args.signoff ? ['--signoff'] : []; const toAdd = []; // only start with a pre-populated paths list when CHANGELOG processing is not skipped if (!args.skip.changelog) { paths = [args.infile]; toAdd.push(args.infile); } // commit any of the config files that we've updated // the version # for. Object.keys(bump.getUpdatedConfigs()).forEach(function (p) { paths.unshift(p); toAdd.push(path.relative(process.cwd(), p)); // account for multiple files in the output message if (paths.length > 1) { msg += ' and %s'; } }); if (args.commitAll) { msg += ' and %s'; paths.push('all staged files'); } checkpoint(args, msg, paths); // nothing to do, exit without commit anything if ( !args.commitAll && args.skip.changelog && args.skip.bump && toAdd.length === 0 ) { return; } await runExecFile(args, 'git', ['add'].concat(toAdd)); await runExecFile( args, 'git', ['commit'].concat(verify, sign, signoff, args.commitAll ? [] : toAdd, [ '-m', `${formatCommitMessage(args.releaseCommitMessageFormat, newVersion)}`, ]), ); }