lobot 0.9.7 → 0.10.0

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.
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