#!/usr/bin/env node var prompt = require('prompt'); var fs = require('fs'); var exec = require('child_process').exec; var schema = { properties: { version: { description: 'version? (old is '+version()+')', pattern: /^[0-9]\.[0-9]+\.[0-9](-.+)?/, message: 'Must be a valid semver string i.e. 1.0.2, 2.3.0-beta.1', required: true } } }; prompt.start(); prompt.get(schema, function(err, result) { var rawVersion = result.version; var version = 'v'+rawVersion; updateJSON('package', rawVersion); updateJSON('bower', rawVersion); commit(version, function() { tag(version, function() { publish(version); }) }); }); function commit(version, cb) { exec('git commit -am "release '+version+'"', execHandler(cb)); } function tag(version, cb) { exec('git tag '+version, execHandler(cb)); } function publish(version) { exec('git push origin master', execHandler()); exec('git push origin '+version, execHandler()); exec('npm publish', execHandler()); } function execHandler(cb) { return function(err, stdout, stderr) { if (err) throw new Error(err); console.log(stdout); console.log(stderr); if (cb) cb(); } } function updateJSON(pkg, version) { var path = './'+pkg+'.json'; var json = readJSON(path); json.version = version; writeJSON(path, json); } function version() { try { return readJSON('./package.json').version; } catch(e) { console.log('Could not read package.json version'); } } function readJSON(path) { try { return JSON.parse(fs.readFileSync(path).toString()); } catch(e) { console.log('Could not read package.json version'); } } function writeJSON(path, data) { fs.writeFileSync(path, JSON.stringify(data, null, 2)); }