1 | var request = require("superagent"),
|
2 | _ = require("underscore"),
|
3 | config = require("./config").get(),
|
4 | logger = require("./logger");
|
5 |
|
6 | var colors = [
|
7 | 'white',
|
8 | 'pink',
|
9 | 'red',
|
10 | 'red-orange',
|
11 | 'orange',
|
12 | 'yellow',
|
13 | 'yellow-green',
|
14 | 'aqua-green',
|
15 | 'green',
|
16 | 'green-blue',
|
17 | 'sky-blue',
|
18 | 'light-blue',
|
19 | 'blue',
|
20 | 'orchid',
|
21 | 'violet',
|
22 | 'brown',
|
23 | 'black',
|
24 | 'grey'
|
25 | ];
|
26 |
|
27 |
|
28 | function reportError(err) {
|
29 | if(err.response.error.text){
|
30 | logger.fatalWithMessages('Beanstalk error : ', JSON.parse(err.response.error.text).errors);
|
31 | }
|
32 |
|
33 | logger.fatal('Beanstalk error - '+ err);
|
34 | }
|
35 |
|
36 | function api(endpoint, method) {
|
37 | var vmethod = typeof method === 'undefined' ? 'GET' : 'POST';
|
38 | var url = 'https://' + config.account + '.beanstalkapp.com/api/' + endpoint + '.json';
|
39 | var req = vmethod === 'GET' ? request.get(url) : request.post(url);
|
40 |
|
41 | return req
|
42 | .auth(config.username, config.token)
|
43 | .set('Content-Type', 'application/json')
|
44 | .set('User-Agent', 'nikaia-bstalk');
|
45 | }
|
46 |
|
47 | function getRepositories(cb) {
|
48 | api('repositories').end(function(err, res){
|
49 | if(err){
|
50 | reportError(err);
|
51 | }
|
52 |
|
53 | cb(res.body);
|
54 | });
|
55 | }
|
56 |
|
57 | function repo(repoName, cb) {
|
58 | logger.log('Getting repo...');
|
59 |
|
60 | api('repositories/' + repoName).end(function(err, res){
|
61 | if(err){
|
62 | reportError(err);
|
63 | }
|
64 |
|
65 | cb(res.body);
|
66 | });
|
67 | }
|
68 |
|
69 | function createRepo(repoName, color, cb) {
|
70 | var repository = {
|
71 | type_id: "git",
|
72 | name: repoName,
|
73 | title: repoName
|
74 | };
|
75 |
|
76 | if(color){
|
77 | repository.color_label = 'label-' + color;
|
78 | }
|
79 |
|
80 | logger.spin('working...');
|
81 |
|
82 | api('repositories', 'POST')
|
83 | .send({ repository: repository })
|
84 | .end(function(err, res){
|
85 | logger.stopSpinner();
|
86 |
|
87 | if(err){
|
88 | reportError(err);
|
89 | }
|
90 |
|
91 | cb(res.body.repository);
|
92 | });
|
93 | }
|
94 |
|
95 | function branches(repoName, cb) {
|
96 | logger.log('Getting repo branches...');
|
97 |
|
98 | api('repositories/' + repoName + '/branches').end(function(err, res){
|
99 | if(err){
|
100 | reportError(err);
|
101 | }
|
102 |
|
103 | cb(res.body);
|
104 | });
|
105 | }
|
106 |
|
107 | function getEnvironments(repoName, cb) {
|
108 | logger.log('Getting server environment...');
|
109 |
|
110 | api(repoName + '/server_environments').end(function(err, res){
|
111 | if(err){
|
112 | reportError(err);
|
113 | }
|
114 |
|
115 | cb(
|
116 | _.indexBy(
|
117 | _.map(res.body, function(item){
|
118 | return item.server_environment;
|
119 | }),
|
120 | 'name'
|
121 | )
|
122 | );
|
123 | });
|
124 | }
|
125 |
|
126 | function environment(repoName, serverEnvironmentId, cb) {
|
127 | logger.log('Getting server environments...');
|
128 |
|
129 | api(repoName + '/server_enironments/' + serverEnvironmentId).end(function(err, res){
|
130 | if(err){
|
131 | reportError(err);
|
132 | }
|
133 |
|
134 | cb(res.body);
|
135 | });
|
136 | }
|
137 |
|
138 | function deploy(repoName, serverEnvironmentId, revision, comment, cb) {
|
139 | var release = {
|
140 | revision: revision
|
141 | };
|
142 |
|
143 | if(comment){
|
144 | release.comment = comment;
|
145 | }
|
146 |
|
147 | api(repoName + '/releases.json?environment_id='+serverEnvironmentId, 'POST')
|
148 | .send({ release: release })
|
149 | .end(function(err, res){
|
150 | if(err){
|
151 | reportError(err);
|
152 | }
|
153 |
|
154 | cb(res.body.release);
|
155 | });
|
156 | }
|
157 |
|
158 | function release(repoName, releaseId, cb) {
|
159 | api(repoName + '/releases/' + releaseId).end(function(err, res){
|
160 | if(err){
|
161 | reportError(err);
|
162 | }
|
163 |
|
164 | cb(res.body.release);
|
165 | });
|
166 | }
|
167 |
|
168 | function isValidColor(color) {
|
169 | return _.contains(colors, color);
|
170 | }
|
171 |
|
172 | function availableColors() {
|
173 | return colors;
|
174 | }
|
175 |
|
176 |
|
177 |
|
178 |
|
179 |
|
180 |
|
181 | exports.getRepositories = getRepositories;
|
182 | exports.branches = branches;
|
183 | exports.repo = repo;
|
184 | exports.getEnvironments = getEnvironments;
|
185 | exports.environment = environment;
|
186 | exports.deploy = deploy;
|
187 | exports.release = release;
|
188 | exports.isValidColor = isValidColor;
|
189 | exports.availableColors = availableColors;
|
190 | exports.createRepo = createRepo;
|