├── .gitignore ├── test ├── package.json ├── component.json └── bower.json ├── Makefile ├── package.json ├── Readme.md ├── History.md ├── bin └── bump └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node", 3 | "version": "0.3.1" 4 | } -------------------------------------------------------------------------------- /test/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "component", 3 | "version": "0.3.1" 4 | } -------------------------------------------------------------------------------- /test/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bower", 3 | "private": true, 4 | "version": "0.3.1" 5 | } -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | node_modules: package.json 3 | @npm install 4 | 5 | test: node_modules 6 | @./node_modules/.bin/mocha --reporter spec 7 | 8 | .PHONY: test -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bump-version", 3 | "description": "Easily bump the version of all the different package.json equivalents.", 4 | "repository": "git://github.com/ianstormtaylor/bump.git", 5 | "version": "0.5.0", 6 | "license": "MIT", 7 | "bin": { 8 | "bump": "bin/bump" 9 | }, 10 | "dependencies": { 11 | "chalk": "^1.1.0", 12 | "commander": "^2.8.1", 13 | "listify": "^1.0.0", 14 | "semver": "^5.0.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # bump 3 | 4 | Easily bump the version of all the different package.json equivalents. 5 | 6 | ## Installation 7 | 8 | $ npm install -g ianstormtaylor/bump 9 | 10 | ## Usage 11 | 12 | $ bump 0.4.1 13 | 14 | Version bumped to 0.4.1 in package.json and component.json. 15 | 16 | $ bump patch 17 | 18 | Version bumped to 0.4.2 in package.json and component.json. 19 | 20 | $ bump minor 21 | 22 | Version bumped to 0.5.0 in package.json and component.json. 23 | 24 | $ bump major 25 | 26 | Version bumped to 1.0.0 in package.json and component.json. 27 | 28 | ## API 29 | 30 | #### bump(root, version, manifests) 31 | 32 | Bump to `version` in `root`, an optional array of `manifests` can be provided. 33 | 34 | bump('/path/to/pkg', '0.3.1'); 35 | bump('/path/to/pkg', 'patch'); 36 | bump('/path/to/pkg', 'minor'); 37 | bump('/path/to/pkg', 'major', ['package.json']); // only package.json 38 | 39 | 40 | ## License 41 | 42 | MIT 43 | -------------------------------------------------------------------------------- /History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.5.0 / 2015-08-02 3 | ================== 4 | 5 | * renamed to `bump-version` and published to npm 6 | * throw error if version is invalid 7 | * adds `--print-version` flag for machine-consumption 8 | * adds `--directory` flag for customizable behavior 9 | * changed output colors (green for version number, cyan for manifest files) 10 | * updating deps 11 | 12 | 0.4.2 - January 19, 2015 13 | ------------------------ 14 | * add whitespace to end of manifest 15 | 16 | 0.4.1 - July 13, 2014 17 | --------------------- 18 | * ignore versionless manifests 19 | 20 | 0.4.0 - June 20, 2014 21 | --------------------- 22 | * add api `bump(path, version, manifests)` 23 | 24 | 0.3.0 - February 10, 2013 25 | ------------------------- 26 | * fix relying on package.json 27 | * handle private packages nicely 28 | 29 | 0.2.0 - February 5, 2013 30 | ------------------------ 31 | * add `major`, `minor`, `patch` shortcuts thanks to @anthonyshort's genius 32 | 33 | 0.1.0 - February 5, 2013 34 | ------------------------ 35 | * rename to `bump` thanks to @anthonyshort's genius 36 | 37 | 0.0.1 - February 5, 2013 38 | ------------------------ 39 | :sparkles: 40 | -------------------------------------------------------------------------------- /bin/bump: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var pkg = require('../package.json'); 4 | var program = require('commander'); 5 | var listify = require('listify'); 6 | var chalk = require('chalk'); 7 | var bump = require('..'); 8 | 9 | /** 10 | * cli. 11 | */ 12 | 13 | program 14 | .usage('[options] ') 15 | .version(pkg.version) 16 | .description('Bump the version number in your manifest files, where can be semver version or type') 17 | .option('-d, --directory ', 'Determine the directory to use as the root (default: pwd)', process.cwd()) 18 | .option('-p, --print-version', 'Outputs only the new version number after complete') 19 | .parse(process.argv); 20 | 21 | if (program.args.length !== 1) program.help(); 22 | 23 | /** 24 | * bump. 25 | */ 26 | 27 | try { 28 | var dir = program.directory; 29 | var version = program.args.shift(); 30 | 31 | var info = bump(dir, version); 32 | } catch (e) { 33 | fatal(e.message); 34 | } 35 | 36 | if (program.printVersion) { 37 | console.log(info.version); 38 | } else { 39 | log('Version bumped to ' + chalk.green(info.version) + ' in ' + chalk.cyan(listify(info.in)) + '.'); 40 | } 41 | 42 | /** 43 | * Error out with a `msg`. 44 | * 45 | * @param {String} msg 46 | */ 47 | 48 | function fatal(msg){ 49 | console.error(); 50 | console.error(' ' + chalk.red(msg)); 51 | console.error(); 52 | process.exit(1); 53 | } 54 | 55 | /** 56 | * Log a `msg`. 57 | * 58 | * @param {String} msg 59 | */ 60 | 61 | function log(msg){ 62 | console.log(); 63 | console.log(' ' + msg); 64 | console.log(); 65 | } 66 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var exists = require('fs').existsSync; 7 | var resolve = require('path').resolve; 8 | var increment = require('semver').inc; 9 | var write = require('fs').writeFileSync; 10 | 11 | /** 12 | * Expose `bump` 13 | */ 14 | 15 | module.exports = bump; 16 | 17 | /** 18 | * Bump `manifests` in `root`. 19 | * 20 | * @param {String} root 21 | * @param {String} version 22 | * @param {Array} manifests 23 | * @api public 24 | */ 25 | 26 | function bump(root, version, manifests){ 27 | manifests = manifests || ['package.json', 'component.json', 'bower.json']; 28 | var files = {}; 29 | var ret = {}; 30 | var prev; 31 | 32 | manifests.forEach(function(manifest){ 33 | var path = resolve(root, manifest); 34 | 35 | if (!exists(path)) return; 36 | 37 | var json = require(path); 38 | if (!json.version) return; 39 | 40 | var v = json.version; 41 | var p = json.private; 42 | 43 | if (p && !v) return; 44 | if (!v) throw new Error('no existing version found in "' + manifest + '"'); 45 | if (prev && v != prev) throw new Error('existing version in "' + manifest + '" does not match others'); 46 | 47 | prev = v; 48 | files[manifest] = json; 49 | }); 50 | 51 | if (!~version.indexOf('.')) { 52 | var file = Object.keys(files)[0]; 53 | version = increment(files[file].version, version); 54 | if (!version) throw new Error('invalid release type specified'); 55 | } 56 | 57 | var keys = Object.keys(files); 58 | keys.forEach(function(key){ 59 | var path = resolve(root, key); 60 | var json = files[key]; 61 | if (json.version) json.version = version; 62 | write(path, JSON.stringify(json, null, 2) + '\n'); 63 | }); 64 | 65 | ret.version = version; 66 | ret.in = keys; 67 | return ret; 68 | } 69 | --------------------------------------------------------------------------------