vulcan 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/vulcan/cli.rb +2 -1
- data/lib/vulcan/version.rb +1 -1
- data/server/web.js +33 -11
- metadata +7 -7
data/lib/vulcan/cli.rb
CHANGED
@@ -115,7 +115,8 @@ update the build server
|
|
115
115
|
|
116
116
|
Dir.mktmpdir do |dir|
|
117
117
|
Dir.chdir(dir) do
|
118
|
-
api_key = %x{ env BUNDLE_GEMFILE= heroku credentials }
|
118
|
+
api_key = %x{ env BUNDLE_GEMFILE= heroku credentials 2>&1 }.chomp
|
119
|
+
error "invalid api key detected, try running `heroku credentials`" if api_key =~ / /
|
119
120
|
|
120
121
|
system "git init"
|
121
122
|
system "git remote add heroku git@heroku.com:#{config[:app]}.git"
|
data/lib/vulcan/version.rb
CHANGED
data/server/web.js
CHANGED
@@ -14,34 +14,48 @@ var app = express.createServer(
|
|
14
14
|
require('connect-form')({ keepExtensions: true })
|
15
15
|
);
|
16
16
|
|
17
|
+
// connect to couchdb
|
17
18
|
var couchdb_url = require('url').parse(process.env.CLOUDANT_URL);
|
18
|
-
|
19
19
|
var couchdb_options = couchdb_url.auth ?
|
20
|
-
{
|
21
|
-
auth: { username: couchdb_url.auth.split(':')[0], password: couchdb_url.auth.split(':')[1] }
|
22
|
-
} :
|
20
|
+
{ auth: { username: couchdb_url.auth.split(':')[0], password: couchdb_url.auth.split(':')[1] } } :
|
23
21
|
{ }
|
24
|
-
|
25
22
|
var db = new(cradle.Connection)(couchdb_url.hostname, couchdb_url.port || 5984, couchdb_options).database('make');
|
26
|
-
|
27
23
|
db.create();
|
28
24
|
|
25
|
+
// POST /make starts a build
|
29
26
|
app.post('/make', function(request, response, next) {
|
27
|
+
|
28
|
+
// require a form
|
30
29
|
if (! request.form) {
|
31
|
-
response.
|
30
|
+
response.write('invalid form');
|
31
|
+
response.send(500);
|
32
32
|
} else {
|
33
|
+
|
34
|
+
// form handler
|
33
35
|
request.form.complete(function(err, fields, files) {
|
36
|
+
|
37
|
+
// if there's an error
|
34
38
|
if (err) {
|
39
|
+
|
40
|
+
// pass through to the next handler
|
35
41
|
next(err);
|
42
|
+
|
36
43
|
} else {
|
44
|
+
|
45
|
+
// match on the shared secret
|
37
46
|
if (fields.secret != process.env.SECRET) {
|
47
|
+
response.write('invalid secret');
|
38
48
|
response.send(500);
|
39
49
|
} else {
|
50
|
+
|
40
51
|
var id = uuid();
|
41
52
|
var command = fields.command;
|
42
53
|
var prefix = fields.prefix;
|
43
54
|
|
55
|
+
// create a couchdb documents for this build
|
44
56
|
var doc = db.save(id, { command:command, prefix:prefix }, function(err, doc) {
|
57
|
+
|
58
|
+
// save the input tarball as an attachment
|
45
59
|
db.saveAttachment(
|
46
60
|
doc.id,
|
47
61
|
doc.rev,
|
@@ -49,14 +63,16 @@ app.post('/make', function(request, response, next) {
|
|
49
63
|
'application/octet-stream',
|
50
64
|
fs.createReadStream(files.code.path),
|
51
65
|
function(err, data) {
|
66
|
+
|
67
|
+
// spawn bin/make with this build id
|
52
68
|
var ls = spawner.spawn('bin/make ' + id, function(err) {
|
53
|
-
|
69
|
+
response.write('could not spawn: ' + err);
|
70
|
+
response.send(500);
|
54
71
|
});
|
55
72
|
|
56
73
|
ls.on('error', function(error) {
|
57
|
-
response.
|
58
|
-
|
59
|
-
response.end();
|
74
|
+
response.write('error: ' + err);
|
75
|
+
response.send(500);
|
60
76
|
});
|
61
77
|
|
62
78
|
ls.on('data', function(data) {
|
@@ -69,6 +85,7 @@ app.post('/make', function(request, response, next) {
|
|
69
85
|
}
|
70
86
|
);
|
71
87
|
|
88
|
+
// return the build id as a header
|
72
89
|
response.header('X-Make-Id', id);
|
73
90
|
});
|
74
91
|
}
|
@@ -77,7 +94,10 @@ app.post('/make', function(request, response, next) {
|
|
77
94
|
}
|
78
95
|
});
|
79
96
|
|
97
|
+
// download build output
|
80
98
|
app.get('/output/:id', function(request, response, next) {
|
99
|
+
|
100
|
+
// from couchdb
|
81
101
|
var stream = db.getAttachment(request.params.id, 'output');
|
82
102
|
|
83
103
|
stream.on('data', function(chunk) {
|
@@ -87,8 +107,10 @@ app.get('/output/:id', function(request, response, next) {
|
|
87
107
|
stream.on('end', function(chunk) {
|
88
108
|
response.end();
|
89
109
|
});
|
110
|
+
|
90
111
|
});
|
91
112
|
|
113
|
+
// start up the webserver
|
92
114
|
var port = process.env.PORT || 3000;
|
93
115
|
console.log('listening on port ' + port);
|
94
116
|
app.listen(port);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vulcan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-09-24 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multipart-post
|
16
|
-
requirement: &
|
16
|
+
requirement: &70260058252980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.1.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70260058252980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rest-client
|
27
|
-
requirement: &
|
27
|
+
requirement: &70260058252160 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.6.7
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70260058252160
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: thor
|
38
|
-
requirement: &
|
38
|
+
requirement: &70260058251500 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: 0.14.6
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70260058251500
|
47
47
|
description: Build software in the cloud
|
48
48
|
email: ddollar@gmail.com
|
49
49
|
executables:
|