UNPKG

3 kBPlain TextView Raw
1#!/usr/bin/env node
2
3var program = require('commander'),
4 _ = require('underscore'),
5 logger = require('../lib/logger'),
6 beanstalk = require('../lib/api');
7
8/*
9 |--------------------------------------------------------------------------
10 | Program
11 |--------------------------------------------------------------------------
12 */
13program
14 .usage('<repo> <env>')
15 .parse(process.argv);
16
17var repoName = program.args[0],
18 envsArgument = program.args[1],
19 comment = program.args[2],
20 envNames = [];
21
22if (!repoName || !envsArgument) {
23 logger.fatal('You need to pass in the <repo> and the <env> arguments.');
24}
25
26function checkReleaseState(repoName, releaseId, delay, cb) {
27
28 setTimeout(function(){
29
30 beanstalk.release(repoName, releaseId, function(release){
31 switch (release.state) {
32
33 case 'waiting':
34 logger.spin('waiting...');
35 checkReleaseState(repoName, releaseId, 2000, cb);
36 break;
37
38 case 'pending':
39 logger.spin('pending...');
40 checkReleaseState(repoName, releaseId, 2000, cb);
41 break;
42
43 case 'skipped':
44 logger.stopSpinner();
45 logger.warn('Deployment skipped.');
46 cb.call();
47 break;
48
49 case 'failed':
50 logger.stopSpinner();
51 logger.fatal('Deployment failed.');
52 cb.call();
53 break;
54
55 case 'success':
56 logger.stopSpinner();
57 logger.success('Deployed successfully.');
58 cb.call();
59 break;
60
61 default:
62 logger.stopSpinner();
63 logger.warn('Unknown state : ' + release.state);
64 cb.call();
65 break;
66 }
67 });
68
69 }, delay || 0);
70}
71
72
73function deployToEnv(repoName, envName, cb) {
74 logger.newline();
75 logger.info('Deploying to <'+ envName +'>');
76
77 // First we get the repository
78 beanstalk.repo(repoName, function(data){
79 var repo = data.repository;
80
81 // Getting all repo environments
82 beanstalk.getEnvironments(repoName, function(envs){
83 var env = envs[envName];
84
85 if(!env){
86 logger.fatal('Cannot find the requested environment. Available ones are : ' + _.pluck(envs, 'name'));
87 process.exit(1);
88 }
89
90 // Fire the deployment to the last environment branch revision
91 logger.spin('Deploying last revision');
92 beanstalk.deploy(repoName, env.id, null, comment, function(release){
93 checkReleaseState(repoName, release.id, 0, cb);
94 });
95
96 });
97 });
98}
99
100function deployToNextEnv(repoName, envNames) {
101 if(envNames.length < 1){
102 logger.newline();
103 logger.info('Completed.');
104 return;
105 }
106
107 deployToEnv(repoName, envNames.shift(), function(){ deployToNextEnv(repoName, envNames); });
108}
109
110
111// Prepare env names
112var envNames = envsArgument.split(',');
113envNames = _.map(envNames, function(e){ return e.trim(); });
114deployToNextEnv(repoName, envNames);