UNPKG

3.92 kBJavaScriptView Raw
1var request = require("superagent"),
2 _ = require("underscore"),
3 config = require("./config").get(),
4 logger = require("./logger");
5
6var 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
28function 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
36function 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
47function getRepositories(cb) {
48 api('repositories').end(function(err, res){
49 if(err){
50 reportError(err);
51 }
52
53 cb(res.body);
54 });
55}
56
57function 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
69function 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
95function 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
107function 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
126function 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
138function 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
158function 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
168function isValidColor(color) {
169 return _.contains(colors, color);
170}
171
172function availableColors() {
173 return colors;
174}
175
176/*
177 |--------------------------------------------------------------------------
178 | Exports
179 |--------------------------------------------------------------------------
180 */
181exports.getRepositories = getRepositories;
182exports.branches = branches;
183exports.repo = repo;
184exports.getEnvironments = getEnvironments;
185exports.environment = environment;
186exports.deploy = deploy;
187exports.release = release;
188exports.isValidColor = isValidColor;
189exports.availableColors = availableColors;
190exports.createRepo = createRepo;