#!/usr/bin/env node var program = require('commander'), _ = require('underscore'), logger = require('../lib/logger'), beanstalk = require('../lib/api'); /* |-------------------------------------------------------------------------- | Program |-------------------------------------------------------------------------- */ program .usage(' ') .parse(process.argv); var repoName = program.args[0], envsArgument = program.args[1], comment = program.args[2], envNames = []; if (!repoName || !envsArgument) { logger.fatal('You need to pass in the and the arguments.'); } function checkReleaseState(repoName, releaseId, delay, cb) { setTimeout(function(){ beanstalk.release(repoName, releaseId, function(release){ switch (release.state) { case 'waiting': logger.spin('waiting'); checkReleaseState(repoName, releaseId, 2000, cb); break; case 'pending': logger.spin('pending'); checkReleaseState(repoName, releaseId, 2000, cb); break; case 'skipped': logger.stopSpinner(); logger.warn('Deployment skipped.'); cb.call(); break; case 'failed': logger.stopSpinner(); logger.fatal('Deployment failed.'); cb.call(); break; case 'success': logger.stopSpinner(); logger.success('Deployed successfully.'); cb.call(); break; default: logger.stopSpinner(); logger.warn('Unknown state : ' + release.state); cb.call(); break; } }); }, delay || 0); } function deployToEnv(repoName, envName, cb) { logger.newline(); logger.info('Deploying to <'+ envName +'>'); // First we get the repository beanstalk.repo(repoName, function(data){ var repo = data.repository; // Getting all repo environments beanstalk.getEnvironments(repoName, function(envs){ var env = envs[envName]; if(!env){ logger.fatal('Cannot find the requested environment. Available ones are : ' + _.pluck(envs, 'name')); process.exit(1); } // Fire the deployment to the last environment branch revision logger.spin('Deploying last revision'); beanstalk.deploy(repoName, env.id, null, comment, function(release){ checkReleaseState(repoName, release.id, 0, cb); }); }); }); } function deployToNextEnv(repoName, envNames) { if(envNames.length < 1){ logger.newline(); logger.info('Completed.'); return; } deployToEnv(repoName, envNames.shift(), function(){ deployToNextEnv(repoName, envNames); }); } // Prepare env names var envNames = envsArgument.split(','); envNames = _.map(envNames, function(e){ return e.trim(); }); deployToNextEnv(repoName, envNames);