UNPKG

@busy-web/deploy

Version:

busy-web ember-cli-deploy addon.

112 lines (103 loc) 3.62 kB
/** * @module Commands * */ var RSVP = require('rsvp'); var versionUtil = require('../helpers/version'); var git = require('../helpers/git'); var ember = require('../helpers/ember'); /***/ var builds = ['canary', 'alpha', 'beta', 'staging']; function generateUpdateMessage(version, ciSkip) { ciSkip = ciSkip === false ? false : true; var str = `Bumped version to ${version}`; if (ciSkip) { str = str + ' [ci skip]'; } return str; } /** * `ember deploy:branch` * */ module.exports = { name: 'deploy:branch', description: 'Deploy a builds based on a release branch that must match the major and minor version with a build type in the version in package.json', works: 'insideProject', availableOptions: [], anonymousOptions: ['<branch>'], run: function(commandOptions, rawArgs) { versionUtil.getVersion(); var lastVersion = versionUtil.vf.version; var branch = rawArgs.shift(); if (versionUtil.isMatch(branch) || branch === 'master') { var build = versionUtil.getBuild(); if (branch === 'master' && build !== 'canary') { return RSVP.Promise.resolve("Not a release candidate of master branch"); } if (build !== 'production') { if (builds.indexOf(build) !== -1) { return git.getBranch(branch, this.ui).then(() => { return git.lastUpdateHash(generateUpdateMessage(lastVersion, false)).then(hash => { return git.diff(hash).then(hasDiff => { if (hasDiff) { // patch the version for new release this.ui.write(`Updating Version....\n`); let version = versionUtil.patch(); versionUtil.setVersion(version); this.ui.write(`Version updated to ${version}.\n\n`); this.ui.write(`Update git repo....\n`); return git.updateBranch(branch, generateUpdateMessage(version), this.ui).then(() => { this.ui.write(`Update git complete.\n\n`); return git.revision().then(revision => { this.ui.write(`Build for ${build} and deploy revision ${revision}.\n\n`); this.ui.write(`ember deploy ${build}\n`); return ember.deploy(build).then(() => { this.ui.write(`ember deploy:activate --revision ${revision} ${build}\n\n`); return ember.activate(build, revision).then(() => { this.ui.write(`Deploy Complete.\n`); return RSVP.Promise.resolve(); }); }); }); }); } else { this.ui.write('git diff calculated no changes from last update'); return RSVP.Promise.resolve(); } }); }); }); } else { this.ui.write('Version has bad build information'); return RSVP.Promise.resolve(); } } else { // production build not on tagged branch this.ui.write('Production version will only release on tagged branches'); return RSVP.Promise.resolve(); } } else { if (versionUtil.isProduction(branch)) { var pBuild = versionUtil.getBuild(); if (pBuild === 'production') { return git.revision().then(revision => { this.ui.write(`ember deploy ${pBuild}\n`); return ember.deploy(pBuild).then(() => { this.ui.write(`ember deploy:activate --revision ${revision} ${pBuild}\n\n`); return ember.activate(pBuild, revision).then(() => { this.ui.write(`Deploy Complete.\n`); return RSVP.Promise.resolve(); }); }); }); } else { this.ui.write('Version not set for production release'); return RSVP.Promise.resolve(); } } else { this.ui.write('Version not released'); return RSVP.Promise.resolve(); } } } };