vulcan 0.1.0 → 0.1.1
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/README.md +81 -0
- data/lib/vulcan/cli.rb +5 -4
- data/lib/vulcan/version.rb +1 -1
- data/server/web.js +39 -41
- metadata +8 -7
data/README.md
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# Vulcan
|
2
|
+
|
3
|
+
A build server in the cloud.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
$ vulcan help
|
8
|
+
Tasks:
|
9
|
+
vulcan build [COMMAND] # build a piece of software for the heroku cloud using COMMAND as a build command if no COMMAND is...
|
10
|
+
vulcan create APP_NAME # create a build server on Heroku
|
11
|
+
vulcan help [TASK] # Describe available tasks or one specific task
|
12
|
+
vulcan update # update the build server
|
13
|
+
|
14
|
+
$ vulcan help build
|
15
|
+
Usage:
|
16
|
+
vulcan build [COMMAND]
|
17
|
+
|
18
|
+
Options:
|
19
|
+
-c, [--command=COMMAND] # the command to run for compilation
|
20
|
+
-n, [--name=NAME] # the name of the library (defaults ot the directory name)
|
21
|
+
-o, [--output=OUTPUT] # output build artifacts to this file
|
22
|
+
-p, [--prefix=PREFIX] # the build/install --prefix of the software
|
23
|
+
-s, [--source=SOURCE] # the source directory to build from
|
24
|
+
-v, [--verbose] # show the full build output
|
25
|
+
|
26
|
+
build a piece of software for the heroku cloud using COMMAND as a build command
|
27
|
+
if no COMMAND is specified, a sensible default will be chosen for you
|
28
|
+
|
29
|
+
## Examples
|
30
|
+
|
31
|
+
### Create a Build Server
|
32
|
+
|
33
|
+
$ vulcan create vulcan-david
|
34
|
+
Creating vulcan-david... done, stack is cedar
|
35
|
+
http://vulcan-david.herokuapp.com/ | git@heroku.com:vulcan-david.git
|
36
|
+
...
|
37
|
+
|
38
|
+
### Build
|
39
|
+
|
40
|
+
$ vulcan build -s ~/Code/memcached -p /tmp/memcached -c "./autogen.sh && ./configure --prefix=/tmp/memcached && make install"
|
41
|
+
>> Packaging local directory
|
42
|
+
>> Uploading code for build
|
43
|
+
>> Building with: ./autogen.sh && ./configure --prefix=/tmp/memcached && make install
|
44
|
+
>> Downloading build artifacts to: /tmp/memcached.tgz
|
45
|
+
|
46
|
+
$ tar tvf /tmp/memcached.tgz
|
47
|
+
drwx------ 0 u24714 24714 0 Sep 21 20:25 bin/
|
48
|
+
-rwxr-xr-x 0 u24714 24714 273082 Sep 21 20:25 bin/memcached
|
49
|
+
drwx------ 0 u24714 24714 0 Sep 21 20:25 include/
|
50
|
+
drwx------ 0 u24714 24714 0 Sep 21 20:25 include/memcached/
|
51
|
+
-rw-r--r-- 0 u24714 24714 14855 Sep 21 20:25 include/memcached/protocol_binary.h
|
52
|
+
drwx------ 0 u24714 24714 0 Sep 21 20:25 share/
|
53
|
+
drwx------ 0 u24714 24714 0 Sep 21 20:25 share/man/
|
54
|
+
drwx------ 0 u24714 24714 0 Sep 21 20:25 share/man/man1/
|
55
|
+
-rw-r--r-- 0 u24714 24714 5304 Sep 21 20:25 share/man/man1/memcached.1
|
56
|
+
"*V
|
57
|
+
|
58
|
+
### Keep the Build Server Updated
|
59
|
+
|
60
|
+
$ vulcan update
|
61
|
+
Initialized empty Git repository in /private/var/folders/rm/qksq9jk15vx0xcjxkqc8yg5w0000gn/T/d20110921-70016-1iksqwy/.git/
|
62
|
+
Counting objects: 176, done.
|
63
|
+
Delta compression using up to 8 threads.
|
64
|
+
Compressing objects: 100% (156/156), done.
|
65
|
+
Writing objects: 100% (176/176), 326.86 KiB, done.
|
66
|
+
Total 176 (delta 5), reused 0 (delta 0)
|
67
|
+
|
68
|
+
-----> Heroku receiving push
|
69
|
+
-----> Node.js app detected
|
70
|
+
-----> Vendoring node 0.4.7
|
71
|
+
-----> Installing dependencies with npm 1.0.27
|
72
|
+
|
73
|
+
Dependencies installed
|
74
|
+
-----> Discovering process types
|
75
|
+
Procfile declares types -> web
|
76
|
+
-----> Compiled slug size is 5.5MB
|
77
|
+
-----> Launching... done, v5
|
78
|
+
http://vulcan-david.herokuapp.com deployed to Heroku
|
79
|
+
|
80
|
+
To git@heroku.com:vulcan-david.git
|
81
|
+
+ 2e69a42...eddcb91 master -> master (forced update)
|
data/lib/vulcan/cli.rb
CHANGED
@@ -9,7 +9,7 @@ require "yaml"
|
|
9
9
|
|
10
10
|
class Vulcan::CLI < Thor
|
11
11
|
|
12
|
-
desc "build
|
12
|
+
desc "build", <<-DESC
|
13
13
|
build a piece of software for the heroku cloud using COMMANd as a build command
|
14
14
|
if no COMMAND is specified, a sensible default will be chosen for you
|
15
15
|
|
@@ -25,10 +25,10 @@ if no COMMAND is specified, a sensible default will be chosen for you
|
|
25
25
|
def build
|
26
26
|
app = read_config[:app] || "need a server first, use vulcan create"
|
27
27
|
|
28
|
-
|
28
|
+
source = options[:source] || Dir.pwd
|
29
|
+
name = options[:name] || File.basename(source)
|
29
30
|
output = options[:output] || "/tmp/#{name}.tgz"
|
30
31
|
prefix = options[:prefix] || "/app/vendor/#{name}"
|
31
|
-
source = options[:source] || Dir.pwd
|
32
32
|
command = options[:command] || "./configure --prefix #{prefix} && make install"
|
33
33
|
server = URI.parse(ENV["MAKE_SERVER"] || "http://#{app}.herokuapp.com")
|
34
34
|
|
@@ -41,7 +41,8 @@ if no COMMAND is specified, a sensible default will be chosen for you
|
|
41
41
|
request = Net::HTTP::Post::Multipart.new "/make",
|
42
42
|
"code" => UploadIO.new(input, "application/octet-stream", "input.tgz"),
|
43
43
|
"command" => command,
|
44
|
-
"prefix" => prefix
|
44
|
+
"prefix" => prefix,
|
45
|
+
"secret" => config[:secret]
|
45
46
|
|
46
47
|
puts ">> Building with: #{command}"
|
47
48
|
response = Net::HTTP.start(server.host, server.port) do |http|
|
data/lib/vulcan/version.rb
CHANGED
data/server/web.js
CHANGED
@@ -24,10 +24,7 @@ var couchdb_options = couchdb_url.auth ?
|
|
24
24
|
|
25
25
|
var db = new(cradle.Connection)(couchdb_url.hostname, couchdb_url.port || 5984, couchdb_options).database('make');
|
26
26
|
|
27
|
-
db.create(
|
28
|
-
console.log('cerr: %s', err);
|
29
|
-
console.log('cdat: %s', data);
|
30
|
-
});
|
27
|
+
db.create();
|
31
28
|
|
32
29
|
app.post('/make', function(request, response, next) {
|
33
30
|
if (! request.form) {
|
@@ -37,43 +34,44 @@ app.post('/make', function(request, response, next) {
|
|
37
34
|
if (err) {
|
38
35
|
next(err);
|
39
36
|
} else {
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
37
|
+
if (fields.secret != process.env.SECRET) {
|
38
|
+
response.send(500);
|
39
|
+
} else {
|
40
|
+
var id = uuid();
|
41
|
+
var command = fields.command;
|
42
|
+
var prefix = fields.prefix;
|
43
|
+
|
44
|
+
var doc = db.save(id, { command:command, prefix:prefix }, function(err, doc) {
|
45
|
+
db.saveAttachment(
|
46
|
+
doc.id,
|
47
|
+
doc.rev,
|
48
|
+
'input',
|
49
|
+
'application/octet-stream',
|
50
|
+
fs.createReadStream(files.code.path),
|
51
|
+
function(err, data) {
|
52
|
+
var ls = spawner.spawn('bin/make ' + id, function(err) {
|
53
|
+
console.log('couldnt spawn: ' + err);
|
54
|
+
});
|
55
|
+
|
56
|
+
ls.on('error', function(error) {
|
57
|
+
response.writeHead(500);
|
58
|
+
console.log('error: ' + error);
|
59
|
+
response.end();
|
60
|
+
});
|
61
|
+
|
62
|
+
ls.on('data', function(data) {
|
63
|
+
response.write(data);
|
64
|
+
});
|
65
|
+
|
66
|
+
ls.on('exit', function(code) {
|
67
|
+
response.end();
|
68
|
+
});
|
69
|
+
}
|
70
|
+
);
|
71
|
+
|
72
|
+
response.header('X-Make-Id', id);
|
73
|
+
});
|
74
|
+
}
|
77
75
|
}
|
78
76
|
});
|
79
77
|
}
|
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.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-09-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multipart-post
|
16
|
-
requirement: &
|
16
|
+
requirement: &70151753909860 !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: *70151753909860
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rest-client
|
27
|
-
requirement: &
|
27
|
+
requirement: &70151753909160 !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: *70151753909160
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: thor
|
38
|
-
requirement: &
|
38
|
+
requirement: &70151753908500 !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: *70151753908500
|
47
47
|
description: Build software in the cloud
|
48
48
|
email: ddollar@gmail.com
|
49
49
|
executables:
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- lib/vulcan/cli.rb
|
56
56
|
- lib/vulcan/version.rb
|
57
57
|
- lib/vulcan.rb
|
58
|
+
- README.md
|
58
59
|
- server/bin/make
|
59
60
|
- server/lib/on.js
|
60
61
|
- server/lib/spawner.js
|