@busy-web/deploy
Version:
busy-web ember-cli-deploy addon.
112 lines (103 loc) • 3.62 kB
JavaScript
/**
* @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();
}
}
}
};