UNPKG

release-version

Version:

Append pre-release build number to version in package.json

78 lines (64 loc) 2.67 kB
#!/usr/bin/env node const semverUtils = require('semver-utils'); const jsonfile = require('jsonfile'); jsonfile.spaces = 2; const argv = require('yargs') .usage('Usage: $0 [-r "releaseVersion"] [-b "buildVersion"]') .option('r', { alias: 'release', describe: 'Release version', type: 'string'}) .option('pre', { alias: 'prefix', demand: false, default: 'rc', describe: 'Change release version prefix', type: 'string'}) .option('b', { alias: 'build', demand: false, default: '', describe: 'Build meta data', type: 'string'}) .option('p', { alias: 'path', demand: false, default: '.', describe: 'Path to package.json', type: 'string'}) .option('v', { alias: 'verbose', demand: false, describe: 'logs more info', type: 'string'}) .option('i', { alias: 'info', demand: false, describe: 'show current version', type: 'bool'}) .count('verbose') .help('?') .alias('?', 'help') .example('$0 -r 12', 'creates 1.0.0-rc.12') .example('$0 -r 12 --pre alpha -b 420', 'creates 1.0.0-alpha.12+420') .example('$0 -r dev --pre \'\' -b 12', 'creates 1.0.0-dev+12') .example('$0 -b build.12 -p /path/to/project', 'creates 1.0.0+build.12') .argv; const VERBOSE_LEVEL = argv.verbose; function INFO() { VERBOSE_LEVEL >= 0 && console.log.apply(console, arguments)} function DEBUG() { VERBOSE_LEVEL >= 1 && console.log.apply(console, arguments)} function VERBOSE() { VERBOSE_LEVEL >= 2 && console.log.apply(console, arguments)} const packagePath = argv.p + '/package.json'; DEBUG('packagePath: %s', packagePath); const packagejson = jsonfile.readFileSync(packagePath); const currentVersion = packagejson.version; DEBUG('currentVersion: %s', currentVersion); if (argv.i) { INFO(currentVersion); return; } const parsedVersion = semverUtils.parse(currentVersion); DEBUG('parsedVersion: ' + parsedVersion); const release = argv.r; release && VERBOSE('release: %s', release); var prerelease; if (release) { var prefix = argv.pre; if (prefix.length > 0) { VERBOSE('release prefix: %s', prefix); prefix += '.'; } prerelease = prefix + release; DEBUG('prerelease %s', prerelease); } const buildNumber = argv.b; DEBUG('Updating with Build Number: %s', buildNumber); var newPackageVersion = semverUtils.stringify({ major: parsedVersion.major, minor: parsedVersion.minor, patch: parsedVersion.patch, release: prerelease, build: buildNumber }); VERBOSE('newPackageVersion: %s', newPackageVersion); packagejson.version = newPackageVersion; try { jsonfile.writeFileSync(packagePath, packagejson); } catch (error) { error('ERROR Occured: ', error); } INFO('Version %s updated to Version: %s', currentVersion, newPackageVersion);