lobot 0.9.7 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +2 -0
- data/.rvmrc +1 -1
- data/Gemfile +1 -4
- data/LICENSE.txt +1 -1
- data/README.md +45 -21
- data/Rakefile +11 -0
- data/docs/ci_yml.md +4 -9
- data/features/ci.feature +9 -8
- data/features/config/secrets.yml.example +4 -6
- data/features/step_definitions/ci_steps.rb +42 -31
- data/features/support/env.rb +10 -1
- data/lib/generators/lobot/config_generator.rb +161 -0
- data/lib/generators/lobot/install_generator.rb +14 -5
- data/lib/generators/lobot/templates/Capfile +2 -2
- data/lib/generators/lobot/templates/bootstrap_server.sh +6 -5
- data/lib/generators/lobot/templates/capistrano-ci.rb +11 -5
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/attributes/nginx.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/libraries/ci_config.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/default.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/git_config.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/id_rsa.rb +2 -2
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/jenkins.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/xvfb.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/templates/default/jenkins-job-config.xml.erb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/files/default/cacert.pem +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/libraries/marker.rb +10 -10
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/ca_cert.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/daemontools.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/libxml_prereqs.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/mysql_5_1.rb +6 -6
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/mysql_5_5.rb +4 -4
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/node_js.rb +3 -3
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/postgres.rb +6 -6
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/sqlite.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/swap.rb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-conf.erb +5 -5
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-htaccess.erb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-run-script.erb +1 -1
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/postgres-run-script.erb +1 -1
- data/lib/generators/lobot/templates/ci.yml +6 -8
- data/lib/generators/lobot/templates/ci_build.sh +4 -1
- data/lib/generators/lobot/templates/deploy-ci.rb +4 -2
- data/lib/generators/lobot/templates/dot-gitignore +1 -0
- data/lib/generators/lobot/templates/soloistrc +1 -1
- data/lib/lobot.rb +1 -1
- data/lib/lobot/railtie.rb +1 -1
- data/lib/lobot/tasks/ci.rake +50 -17
- data/lib/lobot/version.rb +1 -1
- data/lobot.gemspec +11 -4
- data/spec/install_spec.rb +21 -12
- data/spec/spec_helper.rb +1 -1
- metadata +207 -104
@@ -11,9 +11,12 @@ echo USER=$USER && ruby --version && which ruby && which bundle
|
|
11
11
|
# conditionally install project gems from Gemfile
|
12
12
|
bundle check || bundle install || exit 1
|
13
13
|
|
14
|
+
test -e config/database.yml || (test -e config/database.yml.example && cp config/database.yml.example config/database.yml)
|
15
|
+
test -e config/database.yml || (test -e config/database.example.yml && cp config/database.example.yml config/database.yml)
|
16
|
+
|
14
17
|
RAILS_ENV=development rake db:version > /dev/null || rake db:create
|
15
18
|
RAILS_ENV=test rake db:version > /dev/null || rake db:create
|
16
19
|
|
17
20
|
RAILS_ENV=development rake db:migrate test:prepare
|
18
21
|
|
19
|
-
rake ci:headlessly['rake spec'] && rake ci:headlessly['rake jasmine:ci']
|
22
|
+
rake ci:headlessly['rake spec'] --trace && rake ci:headlessly['rake jasmine:ci'] --trace
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
aws_conf_location = File.expand_path('../../ci.yml', __FILE__)
|
3
|
-
|
3
|
+
server_config = YAML.load_file(aws_conf_location)["server"]
|
4
|
+
ci_server = server_config['elastic_ip']
|
5
|
+
ssh_port = server_config['ssh_port'] || 22
|
4
6
|
|
5
|
-
role :ci, ci_server
|
7
|
+
role :ci, "#{ci_server}:#{ssh_port}"
|
@@ -0,0 +1 @@
|
|
1
|
+
config/ci.yml
|
data/lib/lobot.rb
CHANGED
data/lib/lobot/railtie.rb
CHANGED
data/lib/lobot/tasks/ci.rake
CHANGED
@@ -40,17 +40,18 @@ namespace :ci do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
ec2_key_pair_name = ec2_server_access['key_pair_name'] || "ci"
|
43
|
-
public_key_local_path = "#{ec2_server_access['id_rsa_path']}.pub"
|
43
|
+
public_key_local_path = File.expand_path("#{ec2_server_access['id_rsa_path']}.pub")
|
44
44
|
|
45
45
|
current_key_pair = aws_connection.key_pairs.get(ec2_key_pair_name)
|
46
46
|
if current_key_pair
|
47
47
|
puts "Using existing '#{ec2_key_pair_name}' keypair"
|
48
48
|
else
|
49
|
+
raise "Unable to upload keypair, missing #{public_key_local_path}!" unless File.exist?(public_key_local_path)
|
49
50
|
puts "Creating '#{ec2_key_pair_name}' keypair, uploading #{public_key_local_path} to aws"
|
50
51
|
|
51
52
|
aws_connection.key_pairs.new(
|
52
53
|
:name => ec2_key_pair_name,
|
53
|
-
:public_key => File.read(
|
54
|
+
:public_key => File.read("#{public_key_local_path}")
|
54
55
|
).save
|
55
56
|
end
|
56
57
|
|
@@ -76,23 +77,25 @@ namespace :ci do
|
|
76
77
|
aws_connection.associate_address(server.id, aws_conf['server']['elastic_ip'])
|
77
78
|
|
78
79
|
socket = false
|
79
|
-
Timeout
|
80
|
-
|
80
|
+
Timeout.timeout(180) do
|
81
|
+
print "Server booted, waiting for SSH to come up on #{aws_conf['server']['elastic_ip']}: "
|
81
82
|
until socket
|
82
83
|
begin
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
sleep 1
|
84
|
+
Timeout.timeout(5) do
|
85
|
+
socket = TCPSocket.open(aws_conf['server']['elastic_ip'], 22)
|
86
|
+
end
|
87
|
+
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT, Timeout::Error
|
88
88
|
end
|
89
|
+
putc "."
|
90
|
+
sleep 1
|
89
91
|
end
|
90
92
|
end
|
93
|
+
puts ""
|
91
94
|
|
95
|
+
puts "Server is ready:"
|
92
96
|
p server
|
93
|
-
puts "Server is ready"
|
94
97
|
|
95
|
-
|
98
|
+
puts "Writing server instance_id(#{server.id}) and elastic IP(#{aws_conf['server']['elastic_ip']}) to ci.yml"
|
96
99
|
aws_conf["server"].merge!("instance_id" => server.id)
|
97
100
|
|
98
101
|
f = File.open(aws_conf_location, "w")
|
@@ -100,8 +103,31 @@ namespace :ci do
|
|
100
103
|
f.close
|
101
104
|
end
|
102
105
|
|
106
|
+
desc "terminate the CI Server and release IP"
|
107
|
+
task :terminate do
|
108
|
+
puts "Terminating the CI Server and releasing IP..."
|
109
|
+
require 'fog'
|
110
|
+
require 'yaml'
|
111
|
+
require 'socket'
|
112
|
+
|
113
|
+
aws_conf_location = File.join(Dir.pwd, 'config', 'ci.yml')
|
114
|
+
aws_conf = YAML.load_file(aws_conf_location)
|
115
|
+
aws_credentials = aws_conf['credentials']
|
116
|
+
server_config = aws_conf['server']
|
117
|
+
|
118
|
+
aws_connection = Fog::Compute.new(
|
119
|
+
:provider => aws_credentials['provider'],
|
120
|
+
:aws_access_key_id => aws_credentials['aws_access_key_id'],
|
121
|
+
:aws_secret_access_key => aws_credentials['aws_secret_access_key']
|
122
|
+
)
|
123
|
+
|
124
|
+
aws_connection.release_address(aws_conf['server']['elastic_ip'])
|
125
|
+
aws_connection.servers.new(:id => server_config['instance_id']).destroy
|
126
|
+
end
|
127
|
+
|
103
128
|
desc "stop(suspend) the CI Server"
|
104
129
|
task :stop do
|
130
|
+
puts "Stopping (suspending) the CI Server..."
|
105
131
|
require 'fog'
|
106
132
|
require 'yaml'
|
107
133
|
require 'socket'
|
@@ -157,7 +183,10 @@ namespace :ci do
|
|
157
183
|
aws_conf_location = File.join(Dir.pwd, 'config', 'ci.yml')
|
158
184
|
aws_conf = YAML.load_file(aws_conf_location)
|
159
185
|
server_config = aws_conf['server']
|
160
|
-
|
186
|
+
ssh_port = server_config['ssh_port'] || 22
|
187
|
+
cmd = "ssh -i #{aws_conf['ec2_server_access']['id_rsa_path']} #{aws_conf['app_user']}@#{server_config['elastic_ip']} -p #{ssh_port}"
|
188
|
+
puts cmd
|
189
|
+
exec cmd
|
161
190
|
end
|
162
191
|
|
163
192
|
desc "Get build status"
|
@@ -167,12 +196,16 @@ namespace :ci do
|
|
167
196
|
ci_conf = YAML.load_file(aws_conf_location)
|
168
197
|
|
169
198
|
jenkins_rss_feed = `curl -s --user #{ci_conf['basic_auth'][0]['username']}:#{ci_conf['basic_auth'][0]['password']} --anyauth http://#{ci_conf['server']['elastic_ip']}/rssAll`
|
170
|
-
latest_build = Nokogiri::XML.parse(jenkins_rss_feed.downcase).css('feed entry:first').first
|
171
|
-
|
199
|
+
if latest_build = Nokogiri::XML.parse(jenkins_rss_feed.downcase).css('feed entry:first').first
|
200
|
+
title = latest_build.css("title").first.content
|
201
|
+
else
|
202
|
+
title = "not available yet"
|
203
|
+
end
|
204
|
+
status = !!(title =~ /success|stable|back to normal/)
|
172
205
|
if status
|
173
|
-
|
206
|
+
puts "Great Success (#{title})"
|
174
207
|
else
|
175
|
-
|
208
|
+
puts "Someone needs to fix the build (#{title})"
|
176
209
|
end
|
177
210
|
status ? exit(0) : exit(1)
|
178
211
|
end
|
@@ -196,7 +229,7 @@ namespace :ci do
|
|
196
229
|
puts "CC Menu Config:"
|
197
230
|
puts "\tURL:\thttp://#{ci_conf['basic_auth'][0]['username']}:#{ci_conf['basic_auth'][0]['password']}@#{ci_conf['server']['elastic_ip']}/cc.xml"
|
198
231
|
end
|
199
|
-
|
232
|
+
|
200
233
|
desc "Run a command with a virtual frame buffer"
|
201
234
|
task :headlessly, :command do |task, args|
|
202
235
|
exit_code = nil
|
data/lib/lobot/version.rb
CHANGED
data/lobot.gemspec
CHANGED
@@ -7,10 +7,10 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Lobot::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Matthew Kocher & Lee Edwards"]
|
10
|
-
s.email = ["
|
10
|
+
s.email = ["gems@pivotallabs.com"]
|
11
11
|
s.homepage = ""
|
12
|
-
s.summary = %q{
|
13
|
-
s.description = %q{
|
12
|
+
s.summary = %q{CI in the Cloud: Jenkins + EC2 = Lobot}
|
13
|
+
s.description = %q{Rails generators that make it easy to spin up a CI instance in the cloud.}
|
14
14
|
|
15
15
|
s.rubyforge_project = "lobot"
|
16
16
|
|
@@ -18,10 +18,17 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
|
-
|
21
|
+
|
22
22
|
s.add_dependency('fog', '>=0.9.0')
|
23
23
|
s.add_dependency('capistrano')
|
24
24
|
s.add_dependency('capistrano-ext')
|
25
25
|
s.add_dependency('rvm')
|
26
|
+
s.add_dependency('rvm-capistrano')
|
26
27
|
s.add_dependency('nokogiri', '>=1.4.4')
|
28
|
+
s.add_development_dependency('cucumber')
|
29
|
+
s.add_development_dependency('rspec')
|
30
|
+
s.add_development_dependency('generator_spec')
|
31
|
+
s.add_development_dependency('rails')
|
32
|
+
s.add_development_dependency('jasmine')
|
33
|
+
s.add_development_dependency('headless')
|
27
34
|
end
|
data/spec/install_spec.rb
CHANGED
@@ -1,31 +1,40 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require "fileutils"
|
2
3
|
|
3
4
|
describe Lobot::InstallGenerator do
|
4
5
|
include GeneratorSpec::TestCase
|
5
6
|
destination File.expand_path("../tmp", __FILE__)
|
6
7
|
# arguments %w(something)
|
7
8
|
|
8
|
-
before
|
9
|
+
before do
|
9
10
|
prepare_destination
|
10
11
|
run_generator
|
11
12
|
end
|
12
|
-
|
13
|
+
|
14
|
+
after :all do
|
15
|
+
FileUtils.rm_rf ::File.expand_path("../tmp", __FILE__)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "creates .gitignore" do
|
19
|
+
assert_file ".gitignore", /config\/ci.yml/
|
20
|
+
end
|
21
|
+
|
13
22
|
it "creates ci.yml" do
|
14
23
|
assert_file "config/ci.yml", /app_name/
|
15
24
|
end
|
16
|
-
|
25
|
+
|
17
26
|
it "create bootstrap_server.sh" do
|
18
27
|
assert_file "script/bootstrap_server.sh", /bin\/bash/
|
19
28
|
end
|
20
|
-
|
29
|
+
|
21
30
|
it "creates a ci_build.sh file" do
|
22
31
|
assert_file "script/ci_build.sh"
|
23
32
|
end
|
24
|
-
|
33
|
+
|
25
34
|
it "makes ci_build.sh executable" do
|
26
35
|
system("test -x #{destination_root}/script/ci_build.sh").should == true
|
27
36
|
end
|
28
|
-
|
37
|
+
|
29
38
|
context "Capfile exists" do
|
30
39
|
it "appends a load path to the Capfile" do
|
31
40
|
prepare_destination
|
@@ -34,29 +43,29 @@ describe Lobot::InstallGenerator do
|
|
34
43
|
assert_file "Capfile", "load 'config/capistrano/ci'\nline 2\n"
|
35
44
|
end
|
36
45
|
end
|
37
|
-
|
46
|
+
|
38
47
|
context "Capfile doesn't exist" do
|
39
48
|
it "create a Capfile" do
|
40
49
|
assert_file "Capfile", /load 'config\/capistrano\/ci'/
|
41
50
|
end
|
42
|
-
|
51
|
+
|
43
52
|
it "give you the capify (default) capfile, but commented out" do
|
44
53
|
assert_file "Capfile", /# load 'deploy'/
|
45
54
|
end
|
46
55
|
end
|
47
|
-
|
56
|
+
|
48
57
|
it "creates config/deploy/ci.rb" do
|
49
|
-
assert_file "config/deploy/ci.rb", /role :ci, ci_server/
|
58
|
+
assert_file "config/deploy/ci.rb", /role :ci, "#\{ci_server\}:#\{ssh_port\}"/
|
50
59
|
end
|
51
60
|
|
52
61
|
it "creates config/capistrano/ci.rb" do
|
53
62
|
assert_file "config/capistrano/ci.rb", /task :ci_setup do/
|
54
63
|
end
|
55
|
-
|
64
|
+
|
56
65
|
it "creates soloistrc" do
|
57
66
|
assert_file "soloistrc", /cookbook_paths/
|
58
67
|
end
|
59
|
-
|
68
|
+
|
60
69
|
it "creates the chef directory" do
|
61
70
|
destination_root.should have_structure do
|
62
71
|
directory "chef" do
|
data/spec/spec_helper.rb
CHANGED
@@ -8,4 +8,4 @@ require File.expand_path('../lib/lobot', File.dirname(__FILE__))
|
|
8
8
|
require 'generator_spec/test_case'
|
9
9
|
|
10
10
|
require 'generator_spec'
|
11
|
-
require File.expand_path('../../lib/generators/lobot/install_generator.rb', __FILE__)
|
11
|
+
require File.expand_path('../../lib/generators/lobot/install_generator.rb', __FILE__)
|
metadata
CHANGED
@@ -1,107 +1,217 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: lobot
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.10.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 7
|
10
|
-
version: 0.9.7
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Matthew Kocher & Lee Edwards
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: fog
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 59
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 9
|
32
|
-
- 0
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.9.0
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: capistrano
|
38
23
|
prerelease: false
|
39
|
-
|
40
|
-
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: capistrano
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
48
38
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: capistrano-ext
|
52
39
|
prerelease: false
|
53
|
-
|
54
|
-
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: capistrano-ext
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
62
54
|
type: :runtime
|
63
|
-
|
64
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
65
63
|
name: rvm
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
66
71
|
prerelease: false
|
67
|
-
|
68
|
-
none: false
|
69
|
-
requirements:
|
70
|
-
- -
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rvm-capistrano
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
76
86
|
type: :runtime
|
77
|
-
version_requirements: *id004
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: nokogiri
|
80
87
|
prerelease: false
|
81
|
-
|
82
|
-
none: false
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: nokogiri
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
91
101
|
version: 1.4.4
|
92
102
|
type: :runtime
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.4.4
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: cucumber
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rspec
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: generator_spec
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rails
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: jasmine
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: headless
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :development
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
description: Rails generators that make it easy to spin up a CI instance in the cloud.
|
207
|
+
email:
|
208
|
+
- gems@pivotallabs.com
|
97
209
|
executables: []
|
98
|
-
|
99
210
|
extensions: []
|
100
|
-
|
101
211
|
extra_rdoc_files: []
|
102
|
-
|
103
|
-
files:
|
212
|
+
files:
|
104
213
|
- .gitignore
|
214
|
+
- .rspec
|
105
215
|
- .rvmrc
|
106
216
|
- Gemfile
|
107
217
|
- LICENSE.txt
|
@@ -113,6 +223,7 @@ files:
|
|
113
223
|
- features/step_definitions/ci_steps.rb
|
114
224
|
- features/support/env.rb
|
115
225
|
- lib/generators/lobot/USAGE
|
226
|
+
- lib/generators/lobot/config_generator.rb
|
116
227
|
- lib/generators/lobot/install_generator.rb
|
117
228
|
- lib/generators/lobot/templates/Capfile
|
118
229
|
- lib/generators/lobot/templates/bootstrap_server.sh
|
@@ -150,6 +261,7 @@ files:
|
|
150
261
|
- lib/generators/lobot/templates/ci.yml
|
151
262
|
- lib/generators/lobot/templates/ci_build.sh
|
152
263
|
- lib/generators/lobot/templates/deploy-ci.rb
|
264
|
+
- lib/generators/lobot/templates/dot-gitignore
|
153
265
|
- lib/generators/lobot/templates/soloistrc
|
154
266
|
- lib/lobot.rb
|
155
267
|
- lib/lobot/railtie.rb
|
@@ -158,40 +270,31 @@ files:
|
|
158
270
|
- lobot.gemspec
|
159
271
|
- spec/install_spec.rb
|
160
272
|
- spec/spec_helper.rb
|
161
|
-
homepage:
|
273
|
+
homepage: ''
|
162
274
|
licenses: []
|
163
|
-
|
164
275
|
post_install_message:
|
165
276
|
rdoc_options: []
|
166
|
-
|
167
|
-
require_paths:
|
277
|
+
require_paths:
|
168
278
|
- lib
|
169
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
279
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
280
|
none: false
|
171
|
-
requirements:
|
172
|
-
- -
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
|
175
|
-
|
176
|
-
- 0
|
177
|
-
version: "0"
|
178
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
281
|
+
requirements:
|
282
|
+
- - ! '>='
|
283
|
+
- !ruby/object:Gem::Version
|
284
|
+
version: '0'
|
285
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
286
|
none: false
|
180
|
-
requirements:
|
181
|
-
- -
|
182
|
-
- !ruby/object:Gem::Version
|
183
|
-
|
184
|
-
segments:
|
185
|
-
- 0
|
186
|
-
version: "0"
|
287
|
+
requirements:
|
288
|
+
- - ! '>='
|
289
|
+
- !ruby/object:Gem::Version
|
290
|
+
version: '0'
|
187
291
|
requirements: []
|
188
|
-
|
189
292
|
rubyforge_project: lobot
|
190
|
-
rubygems_version: 1.8.
|
293
|
+
rubygems_version: 1.8.21
|
191
294
|
signing_key:
|
192
295
|
specification_version: 3
|
193
|
-
summary:
|
194
|
-
test_files:
|
296
|
+
summary: ! 'CI in the Cloud: Jenkins + EC2 = Lobot'
|
297
|
+
test_files:
|
195
298
|
- features/ci.feature
|
196
299
|
- features/config/secrets.yml.example
|
197
300
|
- features/step_definitions/ci_steps.rb
|