UNPKG

commit-and-tag-version

Version:

replacement for `npm version` with automatic CHANGELOG generation

61 lines (56 loc) 1.95 kB
const bump = require('../lifecycles/bump'); const chalk = require('chalk'); const checkpoint = require('../checkpoint'); const figures = require('figures'); const formatCommitMessage = require('../format-commit-message'); const runExecFile = require('../run-execFile'); const runLifecycleScript = require('../run-lifecycle-script'); const { detectPMByLockFile } = require('../detect-package-manager'); module.exports = async function (newVersion, pkgPrivate, args) { if (args.skip.tag) return; await runLifecycleScript(args, 'pretag'); await execTag(newVersion, pkgPrivate, args); await runLifecycleScript(args, 'posttag'); }; async function detectPublishHint() { const npmClientName = await detectPMByLockFile(); const publishCommand = 'publish'; return `${npmClientName} ${publishCommand}`; } async function execTag(newVersion, pkgPrivate, args) { const tagOption = []; if (args.sign) { tagOption.push('-s'); } else { tagOption.push('-a'); } if (args.tagForce) { tagOption.push('-f'); } checkpoint(args, 'tagging release %s%s', [args.tagPrefix, newVersion]); await runExecFile(args, 'git', [ 'tag', ...tagOption, args.tagPrefix + newVersion, '-m', `${formatCommitMessage(args.releaseCommitMessageFormat, newVersion)}`, ]); const currentBranch = await runExecFile('', 'git', [ 'rev-parse', '--abbrev-ref', 'HEAD', ]); let message = 'git push --follow-tags origin ' + currentBranch.trim(); if (pkgPrivate !== true && bump.getUpdatedConfigs()['package.json']) { const npmPublishHint = args.npmPublishHint || (await detectPublishHint()); message += ` && ${npmPublishHint}`; if (args.prerelease !== undefined) { if (args.prerelease === '') { message += ' --tag prerelease'; } else { message += ' --tag ' + args.prerelease; } } } checkpoint(args, 'Run `%s` to publish', [message], chalk.blue(figures.info)); }