lobot 0.9.7 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.rspec +2 -0
  2. data/.rvmrc +1 -1
  3. data/Gemfile +1 -4
  4. data/LICENSE.txt +1 -1
  5. data/README.md +45 -21
  6. data/Rakefile +11 -0
  7. data/docs/ci_yml.md +4 -9
  8. data/features/ci.feature +9 -8
  9. data/features/config/secrets.yml.example +4 -6
  10. data/features/step_definitions/ci_steps.rb +42 -31
  11. data/features/support/env.rb +10 -1
  12. data/lib/generators/lobot/config_generator.rb +161 -0
  13. data/lib/generators/lobot/install_generator.rb +14 -5
  14. data/lib/generators/lobot/templates/Capfile +2 -2
  15. data/lib/generators/lobot/templates/bootstrap_server.sh +6 -5
  16. data/lib/generators/lobot/templates/capistrano-ci.rb +11 -5
  17. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/attributes/nginx.rb +1 -1
  18. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/libraries/ci_config.rb +1 -1
  19. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/default.rb +1 -1
  20. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/git_config.rb +1 -1
  21. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/id_rsa.rb +2 -2
  22. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/jenkins.rb +1 -1
  23. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/xvfb.rb +1 -1
  24. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/templates/default/jenkins-job-config.xml.erb +1 -1
  25. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/files/default/cacert.pem +1 -1
  26. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/libraries/marker.rb +10 -10
  27. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/ca_cert.rb +1 -1
  28. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/daemontools.rb +1 -1
  29. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/libxml_prereqs.rb +1 -1
  30. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/mysql_5_1.rb +6 -6
  31. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/mysql_5_5.rb +4 -4
  32. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/node_js.rb +3 -3
  33. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/postgres.rb +6 -6
  34. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/sqlite.rb +1 -1
  35. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/swap.rb +1 -1
  36. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-conf.erb +5 -5
  37. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-htaccess.erb +1 -1
  38. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-run-script.erb +1 -1
  39. data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/postgres-run-script.erb +1 -1
  40. data/lib/generators/lobot/templates/ci.yml +6 -8
  41. data/lib/generators/lobot/templates/ci_build.sh +4 -1
  42. data/lib/generators/lobot/templates/deploy-ci.rb +4 -2
  43. data/lib/generators/lobot/templates/dot-gitignore +1 -0
  44. data/lib/generators/lobot/templates/soloistrc +1 -1
  45. data/lib/lobot.rb +1 -1
  46. data/lib/lobot/railtie.rb +1 -1
  47. data/lib/lobot/tasks/ci.rake +50 -17
  48. data/lib/lobot/version.rb +1 -1
  49. data/lobot.gemspec +11 -4
  50. data/spec/install_spec.rb +21 -12
  51. data/spec/spec_helper.rb +1 -1
  52. 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
- ci_server = YAML.load_file(aws_conf_location)["server"]['elastic_ip']
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
@@ -10,4 +10,4 @@ env_variable_switches:
10
10
  recipes: []
11
11
  APP_DIR:
12
12
  cookbook_paths: []
13
- recipes: []
13
+ recipes: []
@@ -11,4 +11,4 @@ module Lobot
11
11
  end
12
12
  end
13
13
 
14
- require File.expand_path(File.join('lobot', "railtie"), File.dirname(__FILE__)) if Lobot.rails3?
14
+ require File.expand_path(File.join('lobot', "railtie"), File.dirname(__FILE__)) if Lobot.rails3?
@@ -17,4 +17,4 @@ module Lobot
17
17
  load "lobot/tasks/ci.rake"
18
18
  end
19
19
  end
20
- end
20
+ end
@@ -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(File.expand_path("#{public_key_local_path}"))
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::timeout(120) do
80
- p "Server booted, waiting for SSH."
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
- socket = TCPSocket.open(aws_conf['server']['elastic_ip'], 22)
84
- rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT
85
- STDOUT << "."
86
- STDOUT.flush
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
- p "Writing server instance_id(#{server.id}) and elastic IP(#{aws_conf['server']['elastic_ip']}) to ci.yml"
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
- exec "ssh -i #{aws_conf['ec2_server_access']['id_rsa_path']} #{aws_conf['app_user']}@#{server_config['elastic_ip']}"
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
- status = !!(latest_build.css("title").first.content =~ /success|stable|back to normal/)
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
- p "Great Success"
206
+ puts "Great Success (#{title})"
174
207
  else
175
- p "Someone needs to fix the build"
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
@@ -1,3 +1,3 @@
1
1
  module Lobot
2
- VERSION = "0.9.7"
2
+ VERSION = "0.10.0"
3
3
  end
@@ -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 = ["pair@pivotallabs.com"]
10
+ s.email = ["gems@pivotallabs.com"]
11
11
  s.homepage = ""
12
- s.summary = %q{Lobot provides generators of chef recipes to set up CI easily.}
13
- s.description = %q{Description coming soon}
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
@@ -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(:each) do
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
@@ -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
- hash: 53
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
- date: 2012-03-02 00:00:00 Z
19
- dependencies:
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
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
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
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 0
47
- version: "0"
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
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
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
- version_requirements: *id003
64
- - !ruby/object:Gem::Dependency
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
- requirement: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 3
73
- segments:
74
- - 0
75
- version: "0"
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
- requirement: &id005 !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 15
87
- segments:
88
- - 1
89
- - 4
90
- - 4
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
- version_requirements: *id005
94
- description: Description coming soon
95
- email:
96
- - pair@pivotallabs.com
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
- hash: 3
175
- segments:
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
- hash: 3
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.6
293
+ rubygems_version: 1.8.21
191
294
  signing_key:
192
295
  specification_version: 3
193
- summary: Lobot provides generators of chef recipes to set up CI easily.
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