engineyard-hudson 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- engineyard-hudson (0.3.0)
4
+ engineyard-hudson (0.3.1)
5
5
  engineyard (~> 1.3.4)
6
+ hudson (~> 0.5.0)
6
7
  ruby-debug
7
8
  thor (~> 0.14.6)
8
9
 
@@ -12,6 +13,7 @@ GEM
12
13
  awesome_print (0.2.1)
13
14
  builder (2.1.2)
14
15
  columnize (0.3.1)
16
+ crack (0.1.8)
15
17
  cucumber (0.9.4)
16
18
  builder (~> 2.1.2)
17
19
  diff-lcs (~> 1.1.2)
@@ -35,6 +37,16 @@ GEM
35
37
  json (~> 1.4.6)
36
38
  term-ansicolor (~> 1.0.5)
37
39
  highline (1.6.1)
40
+ hpricot (0.8.2)
41
+ httparty (0.6.1)
42
+ crack (= 0.1.8)
43
+ hudson (0.5.0)
44
+ builder (~> 2.1.2)
45
+ hpricot
46
+ httparty (~> 0.6.1)
47
+ term-ansicolor (>= 1.0.4)
48
+ thor (~> 0.14.2)
49
+ yajl-ruby (>= 0.7.6)
38
50
  json (1.4.6)
39
51
  json_pure (1.4.6)
40
52
  linecache (0.43)
@@ -65,6 +77,7 @@ GEM
65
77
  term-ansicolor (1.0.5)
66
78
  thor (0.14.6)
67
79
  tilt (1.1)
80
+ yajl-ruby (0.7.8)
68
81
 
69
82
  PLATFORMS
70
83
  ruby
@@ -75,6 +88,7 @@ DEPENDENCIES
75
88
  engineyard (~> 1.3.4)
76
89
  engineyard-hudson!
77
90
  fakeweb (~> 1.3.0)
91
+ hudson (~> 0.5.0)
78
92
  json (~> 1.4.0)
79
93
  open4
80
94
  rake (~> 0.8.7)
data/History.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # History
2
2
 
3
+ ## 0.3.1 - 2010-12-1
4
+
5
+ * install_server
6
+ * Updates the default host for `hudson` CLI to newly created server
7
+ * Explicitly set $HOME/$USER so Hudson/Java has access to .gitconfig
8
+
9
+ ## 0.3.0 - 2010-11-24
10
+
11
+ * Renamed task 'server' => 'install_server'
12
+ * install_server does the complete job of setup/installation of Hudson into an environment on AppCloud
13
+ * install_server can take --environment/--account options OR auto-discover which environment to install Hudson into
14
+
15
+
3
16
  ## 0.2.0 - 2010-10-30
4
17
 
5
18
  * Initial 'server' task implementation
data/README.md CHANGED
@@ -16,62 +16,42 @@ And here's some logos:
16
16
 
17
17
  gem install engineyard-hudson
18
18
 
19
- You might also like the `hudson` CLI to play with your Hudson CI from the command line:
19
+ This will also install the `hudson` CLI to interact with your Hudson CI from the command line.
20
20
 
21
- gem install hudson
21
+ ## Hosting on Engine Yard AppCloud
22
22
 
23
- ## Assumptions
23
+ Using Engine Yard AppCloud "Quick Start" wizard, create an application with Git Repo `git://github.com/engineyard/hudson_server.git`, and add your own SSH keys. This will create an environment called `hudson_server_production`. Boot the environment as a Single instance (or Custom cluster with a single instance).
24
24
 
25
- It is assumed you are familiar with the [engineyard](http://github.com/engineyard/engineyard) CLI gem.
25
+ Optionally, though it is quite pretty, deploy/ship the hudson_server application and visit the HTTP link to see the remaining "Almost there..." instructions.
26
26
 
27
- You **do not** need to be familiar with custom chef recipes. Just follow the simple commands. Easy peasy.
27
+ Finally, install Hudson CI and rebuild the environment:
28
28
 
29
- ## Warning (aka TODO list)
29
+ $ ey-hudson install_server
30
30
 
31
- In the very first release of `engineyard-hudson`:
31
+ When this completes, visit the URL or refresh the "Almost there..." page to see your Hudson CI server.
32
32
 
33
- * There is no support for authentication/authorization of Hudson CI. It _will_ use the deploy keys already installed on your AppCloud instance, as described in engineyard-serverside [#set_up_git_ssh](http://github.com/engineyard/engineyard-serverside/blob/master/lib/engineyard-serverside/strategies/git.rb#L106-134)
34
- * No mail server configured for Hudson CI build failure notifications.
35
-
36
- ## Hosting Hudson CI
37
-
38
- Hosting Hudson CI on Engine Yard AppCloud is optional; yet delightfully simple. Hudson CI can be hosted anywhere.
39
-
40
- ### Hosting on Engine Yard AppCloud
41
-
42
- Using Engine Yard AppCloud "Quick Start" wizard, create an application with Git Repo `git://github.com/drnic/ci_demo_app.git` (any arbitrary rails/rack application), and add your own SSH keys. Name the environment `hudson` (or similar) and boot it as a Single instance (or Custom cluster with a single instance).
43
-
44
- Just a few steps and you will have your own Hudson CI:
45
-
46
- $ mkdir hudson_server
47
- $ cd hudson_server
48
- $ ey-hudson server . --plugins 'googleanalytics,chucknorris'
49
- $ ey recipes upload -e hudson
50
- $ ey recipes apply -e hudson
33
+ Using the `hudson list` CLI task you can also test there is a working server with no jobs:
51
34
 
52
35
  *For the Hudson slaves' configuration, you'll need:*
53
36
 
54
- The `hudson` instance public key:
55
-
56
- $ ey ssh -e hudson
57
- $ cat /home/deploy/.ssh/id_rsa.pub
58
-
59
- The `hudson` instance URI:
60
-
61
- $ sudo ruby -rubygems -e "require 'json'; puts JSON.parse(File.read('/etc/chef/dna.json'))['engineyard']['environment']['instances'].first['public_hostname']"
37
+ The `hudson_server_production` instance public key:
62
38
 
39
+ $ ey ssh -e hudson_server_production
40
+ # cat /home/deploy/.ssh/id_rsa.pub
63
41
 
64
42
  Do those steps, copy down the configuration and you're done! Now, you either visit your Hudson CI site or use `hudson list` to see the status of your projects being tested.
65
43
 
66
- ### Hosting elsewhere
44
+ ## Hosting elsewhere
45
+
46
+ Hosting Hudson CI on Engine Yard AppCloud is optional; yet delightfully simple. Hudson CI can be hosted anywhere.
67
47
 
68
- You need the following information about your Hudson CI:
48
+ If you host your Hudson CI elsewhere then you need the following information about your Hudson CI environment to be able to add EngineYard AppCloud instances as Hudson nodes/slaves:
69
49
 
70
50
  * Hudson CI public host & port
71
51
  * Hudson CI's user's public key (probably at `/home/deploy/.ssh/id_rsa.pub`)
72
52
  * Hudson CI's user's private key path (probably `/home/deploy/.ssh/id_rsa`)
73
53
 
74
- ## Running your tests in Hudson against Engine Yard AppCloud
54
+ ## Running your CI tests on Engine Yard AppCloud
75
55
 
76
56
  This is the exciting part - ensuring that your CI tests are being run in the same environment as your production applications. In this case, on Engine Yard AppCloud.
77
57
 
@@ -97,10 +77,10 @@ Boot your `ci_demo_app_ci` environment, visit your Hudson CI and WOW! jobs have
97
77
 
98
78
  At any time from the command line you can use `hudson list` to see the status of your jobs
99
79
 
100
- ### Conventions/Requirements
80
+ ## Conventions/Requirements
101
81
 
102
82
  * Do not use your production environment as your Hudson CI slave. There are no guarantees what will happen. I expect bad things.
103
- * You must name your CI environment with a suffix of `_ci` or `_hudson_slave`.
83
+ * You must name your CI environments with a suffix of `_ci` or `_hudson_slave`.
104
84
  * You should not name any other environments with a suffix of `_ci` or `_hudson_slave`; lest they offer themselves to your Hudson CI as slave nodes.
105
85
  * Keep your production and CI environments exactly the same. Use the same Ruby implementation/version, same database, and include the same RubyGems and Unix packages. Why? This is the entire point of the exercise: to run your CI tests in the same environment as your production application runs.
106
86
 
@@ -108,7 +88,7 @@ For example, note the naming convention of the two CI environments below (one en
108
88
 
109
89
  <img src="http://img.skitch.com/20101031-dxnk7hbn32yce9rum1ctwjwt1w.png" style="width: 100%">
110
90
 
111
- ### What happens?
91
+ ## What happens?
112
92
 
113
93
  When you boot your Engine Yard AppCloud CI environments, each resulting EC2 instance executes a special "hudson_slave" recipe (see `cookbooks/hudson_slave/recipes/default.rb` in your project). This does three things:
114
94
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift(File.dirname(__FILE__) + "/../lib")
3
+ $:.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
4
4
  require 'engineyard-hudson'
5
5
  require 'engineyard-hudson/cli'
6
6
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "engineyard-hudson"
5
- s.version = '0.3.0'
5
+ s.version = '0.3.1'
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ["Dr Nic Williams"]
8
8
  s.email = ["drnicwilliams@gmail.com"]
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.add_dependency("thor", ["~> 0.14.6"])
21
21
  s.add_dependency("engineyard", ["~> 1.3.4"])
22
+ s.add_dependency("hudson", ["~> 0.5.0"])
22
23
 
23
24
  s.add_development_dependency("rake", ["~> 0.8.7"])
24
25
  s.add_development_dependency("cucumber", ["~> 0.9.4"])
@@ -28,9 +28,11 @@ Feature: Managing ey hudson server
28
28
  Environment is rebuilding...
29
29
  ..
30
30
  Hudson is starting...
31
-
31
+ .
32
32
  Done! Hudson CI hosted at http://app-master-hostname.compute-1.amazonaws.com
33
33
  """
34
+ When I run executable "hudson" with arguments "default_host"
35
+ Then I should see "http://app-master-hostname.compute-1.amazonaws.com"
34
36
 
35
37
  @wip
36
38
  Scenario: Install Hudson CI server with additional Hudson plugins
@@ -9,69 +9,60 @@ module Engineyard
9
9
  desc "install PROJECT_PATH", "Install Hudson node/slave recipes into your project."
10
10
  def install(project_path)
11
11
  require 'engineyard-hudson/cli/install'
12
- Engineyard::Hudson::Install.start(ARGV[1..-1])
12
+ Engineyard::Hudson::Install.start(project_path)
13
13
  end
14
14
 
15
15
  desc "install_server [PROJECT_PATH]", "Install Hudson CI into an AppCloud environment."
16
16
  method_option :verbose, :aliases => ["-V"], :desc => "Display more output"
17
17
  method_option :environment, :aliases => ["-e"], :desc => "Environment in which to deploy this application", :type => :string
18
18
  method_option :account, :aliases => ["-c"], :desc => "Name of the account you want to deploy in"
19
+ # Generates a chef recipe cookbook, uploads it to AppCloud, and waits until Hudson CI has launched
19
20
  def install_server(project_path=nil)
20
21
  environments = Engineyard::Hudson::AppcloudEnv.new.find_environments(options)
21
22
  if environments.size == 0
22
- say "No environments with name hudson, hudson_server, hudson_production, hudson_server_production.", :red
23
- say "Either:"
24
- say " * Create an AppCloud environment called hudson, hudson_server, hudson_production, hudson_server_production"
25
- say " * Use --environment/--account flags to select AppCloud environment"
26
- return
23
+ no_environments_discovered and return
27
24
  elsif environments.size > 1
28
- say "Multiple environments possible, please be more specific:", :red
29
- say ""
30
- environments.each do |env_name, account_name, environment|
31
- say " ey-hudson install_server --environment "; say "'#{env_name}' ", :yellow;
32
- say "--account "; say "'#{account_name}'", :yellow
33
- end
34
- return
25
+ too_many_environments_discovered(environments) and return
35
26
  end
36
27
 
37
28
  env_name, account_name, environment = environments.first
38
- public_hostname, status = environment.instances.first.public_hostname, environment.instances.first.status if environment.instances.first
29
+ if environment.instances.first
30
+ public_hostname = environment.instances.first.public_hostname
31
+ status = environment.instances.first.status
32
+ end
39
33
 
40
34
  temp_project_path = File.expand_path(project_path || File.join(Dir.tmpdir, "temp_hudson_server"))
41
35
  shell.say "Temp installation dir: #{temp_project_path}" if options[:verbose]
36
+
42
37
  FileUtils.mkdir_p(temp_project_path)
43
38
  FileUtils.chdir(FileUtils.mkdir_p(temp_project_path)) do
39
+ # 'install_server' generator
44
40
  require 'engineyard-hudson/cli/install_server'
45
41
  Engineyard::Hudson::InstallServer.start(ARGV.unshift(temp_project_path))
46
42
 
47
- require 'engineyard/cli/recipes'
48
43
  say ""
49
44
  say "Uploading to "; say "'#{env_name}' ", :yellow; say "environment on "; say "'#{account_name}' ", :yellow; say "account..."
45
+ require 'engineyard/cli/recipes'
50
46
  environment.upload_recipes
51
47
 
52
48
  if status == "running"
53
- environment.run_custom_recipes
54
49
  say "Environment is rebuilding..."
55
- waiting = true
56
- while waiting
57
- begin
58
- Net::HTTP.start(public_hostname, 80) do |http|
59
- waiting = (body = http.get("/").body) !~ /Please wait while Hudson is getting ready to work/
60
- end
61
- sleep 1; print '.'; $stdout.flush
62
- rescue SocketError => e
63
- sleep 1; print 'x'; $stdout.flush
64
- rescue Exception
65
- sleep 1; print '.'; $stdout.flush
66
- end
50
+ environment.run_custom_recipes
51
+ watch_page_while public_hostname, 80, "/" do |req|
52
+ req.body !~ /Please wait while Hudson is getting ready to work/
67
53
  end
54
+
68
55
  say ""
69
56
  say "Hudson is starting..."
70
- Net::HTTP.start(public_hostname, 80) do |http|
71
- while http.get("/").body =~ /Please wait while Hudson is getting ready to work/
72
- sleep 1; print '.'; $stdout.flush
73
- end
57
+ watch_page_while public_hostname, 80, "/" do |req|
58
+ req.body =~ /Please wait while Hudson is getting ready to work/
74
59
  end
60
+
61
+ require 'hudson'
62
+ require 'hudson/config'
63
+ ::Hudson::Config.config["base_uri"] = public_hostname
64
+ ::Hudson::Config.store!
65
+
75
66
  say ""
76
67
  say "Done! Hudson CI hosted at "; say "http://#{public_hostname}", :green
77
68
  else
@@ -104,6 +95,40 @@ module Engineyard
104
95
  shell.say "ERROR: #{text}", :red
105
96
  exit
106
97
  end
98
+
99
+ def no_environments_discovered
100
+ say "No environments with name hudson, hudson_server, hudson_production, hudson_server_production.", :red
101
+ say "Either:"
102
+ say " * Create an AppCloud environment called hudson, hudson_server, hudson_production, hudson_server_production"
103
+ say " * Use --environment/--account flags to select AppCloud environment"
104
+ end
105
+
106
+ def too_many_environments_discovered(environments)
107
+ say "Multiple environments possible, please be more specific:", :red
108
+ say ""
109
+ environments.each do |env_name, account_name, environment|
110
+ say " ey-hudson install_server --environment "; say "'#{env_name}' ", :yellow;
111
+ say "--account "; say "'#{account_name}'", :yellow
112
+ end
113
+ end
114
+
115
+ def watch_page_while(host, port, path)
116
+ waiting = true
117
+ while waiting
118
+ begin
119
+ Net::HTTP.start(host, port) do |http|
120
+ req = http.get(path)
121
+ waiting = yield req
122
+ end
123
+ sleep 1; print '.'; $stdout.flush
124
+ rescue SocketError => e
125
+ sleep 1; print 'x'; $stdout.flush
126
+ rescue Exception => e
127
+ puts e.message
128
+ sleep 1; print '.'; $stdout.flush
129
+ end
130
+ end
131
+ end
107
132
  end
108
133
  end
109
- end
134
+ end
@@ -57,7 +57,6 @@ if ['solo'].include?(node[:instance_role])
57
57
  :home => hudson_home,
58
58
  :pid => hudson_pid
59
59
  )
60
- not_if { FileTest.exists?("/etc/init.d/hudson") }
61
60
  end
62
61
 
63
62
  plugins.each do |plugin|
@@ -78,7 +77,6 @@ if ['solo'].include?(node[:instance_role])
78
77
  variables(
79
78
  :port => hudson_port
80
79
  )
81
- not_if { FileTest.exists?("/data/nginx/servers/hudson_reverse_proxy.conf") }
82
80
  end
83
81
 
84
82
  execute "ensure-hudson-is-running" do
@@ -3,15 +3,17 @@
3
3
  # Start/stop script for hudson
4
4
 
5
5
  PIDFILE=<%= @pid %>
6
- HUDSON_HOME=<%= @home %>
6
+ HUDSON_HOME="<%= @home %>"
7
7
  COMMAND=/usr/bin/java
8
8
  ARGUMENTS="-Djava.io.tmpdir=${HUDSON_HOME}/tmp -jar ${HUDSON_HOME}/hudson.war --webroot=${HUDSON_HOME}/war --httpPort=<%= @port %> ajp13ListenAddress=127.0.0.1"
9
- RUN_AS=<%= @user %>
9
+ RUN_AS="<%= @user %>"
10
10
  NAME=Hudson-CI
11
11
 
12
12
  start() {
13
13
  ebegin "Starting $NAME"
14
- export HUDSON_HOME=${HUDSON_HOME}
14
+ export HUDSON_HOME="${HUDSON_HOME}"
15
+ export HOME="/home/${RUN_AS}"
16
+ export USER="${RUN_AS}"
15
17
  start-stop-daemon -b --start --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND -- $ARGUMENTS &>$HUDSON_HOME/logs/hudson_log
16
18
  eend $?
17
19
  }
@@ -1,5 +1,5 @@
1
1
  module Engineyard
2
2
  module Hudson
3
- VERSION = '0.3.0'
3
+ VERSION = '0.3.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard-hudson
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dr Nic Williams
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-24 00:00:00 -08:00
18
+ date: 2010-12-01 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -51,9 +51,25 @@ dependencies:
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- name: rake
54
+ name: hudson
55
55
  prerelease: false
56
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 11
62
+ segments:
63
+ - 0
64
+ - 5
65
+ - 0
66
+ version: 0.5.0
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
57
73
  none: false
58
74
  requirements:
59
75
  - - ~>
@@ -65,11 +81,11 @@ dependencies:
65
81
  - 7
66
82
  version: 0.8.7
67
83
  type: :development
68
- version_requirements: *id003
84
+ version_requirements: *id004
69
85
  - !ruby/object:Gem::Dependency
70
86
  name: cucumber
71
87
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
88
+ requirement: &id005 !ruby/object:Gem::Requirement
73
89
  none: false
74
90
  requirements:
75
91
  - - ~>
@@ -81,11 +97,11 @@ dependencies:
81
97
  - 4
82
98
  version: 0.9.4
83
99
  type: :development
84
- version_requirements: *id004
100
+ version_requirements: *id005
85
101
  - !ruby/object:Gem::Dependency
86
102
  name: rspec
87
103
  prerelease: false
88
- requirement: &id005 !ruby/object:Gem::Requirement
104
+ requirement: &id006 !ruby/object:Gem::Requirement
89
105
  none: false
90
106
  requirements:
91
107
  - - ~>
@@ -97,11 +113,11 @@ dependencies:
97
113
  - 0
98
114
  version: 2.1.0
99
115
  type: :development
100
- version_requirements: *id005
116
+ version_requirements: *id006
101
117
  - !ruby/object:Gem::Dependency
102
118
  name: json
103
119
  prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
120
+ requirement: &id007 !ruby/object:Gem::Requirement
105
121
  none: false
106
122
  requirements:
107
123
  - - ~>
@@ -113,11 +129,11 @@ dependencies:
113
129
  - 0
114
130
  version: 1.4.0
115
131
  type: :development
116
- version_requirements: *id006
132
+ version_requirements: *id007
117
133
  - !ruby/object:Gem::Dependency
118
134
  name: awesome_print
119
135
  prerelease: false
120
- requirement: &id007 !ruby/object:Gem::Requirement
136
+ requirement: &id008 !ruby/object:Gem::Requirement
121
137
  none: false
122
138
  requirements:
123
139
  - - ">="
@@ -127,11 +143,11 @@ dependencies:
127
143
  - 0
128
144
  version: "0"
129
145
  type: :development
130
- version_requirements: *id007
146
+ version_requirements: *id008
131
147
  - !ruby/object:Gem::Dependency
132
148
  name: realweb
133
149
  prerelease: false
134
- requirement: &id008 !ruby/object:Gem::Requirement
150
+ requirement: &id009 !ruby/object:Gem::Requirement
135
151
  none: false
136
152
  requirements:
137
153
  - - ~>
@@ -143,11 +159,11 @@ dependencies:
143
159
  - 6
144
160
  version: 0.1.6
145
161
  type: :development
146
- version_requirements: *id008
162
+ version_requirements: *id009
147
163
  - !ruby/object:Gem::Dependency
148
164
  name: open4
149
165
  prerelease: false
150
- requirement: &id009 !ruby/object:Gem::Requirement
166
+ requirement: &id010 !ruby/object:Gem::Requirement
151
167
  none: false
152
168
  requirements:
153
169
  - - ">="
@@ -157,11 +173,11 @@ dependencies:
157
173
  - 0
158
174
  version: "0"
159
175
  type: :development
160
- version_requirements: *id009
176
+ version_requirements: *id010
161
177
  - !ruby/object:Gem::Dependency
162
178
  name: sinatra
163
179
  prerelease: false
164
- requirement: &id010 !ruby/object:Gem::Requirement
180
+ requirement: &id011 !ruby/object:Gem::Requirement
165
181
  none: false
166
182
  requirements:
167
183
  - - ">="
@@ -171,11 +187,11 @@ dependencies:
171
187
  - 0
172
188
  version: "0"
173
189
  type: :development
174
- version_requirements: *id010
190
+ version_requirements: *id011
175
191
  - !ruby/object:Gem::Dependency
176
192
  name: fakeweb
177
193
  prerelease: false
178
- requirement: &id011 !ruby/object:Gem::Requirement
194
+ requirement: &id012 !ruby/object:Gem::Requirement
179
195
  none: false
180
196
  requirements:
181
197
  - - ~>
@@ -187,11 +203,11 @@ dependencies:
187
203
  - 0
188
204
  version: 1.3.0
189
205
  type: :development
190
- version_requirements: *id011
206
+ version_requirements: *id012
191
207
  - !ruby/object:Gem::Dependency
192
208
  name: ruby-debug
193
209
  prerelease: false
194
- requirement: &id012 !ruby/object:Gem::Requirement
210
+ requirement: &id013 !ruby/object:Gem::Requirement
195
211
  none: false
196
212
  requirements:
197
213
  - - ">="
@@ -201,7 +217,7 @@ dependencies:
201
217
  - 0
202
218
  version: "0"
203
219
  type: :runtime
204
- version_requirements: *id012
220
+ version_requirements: *id013
205
221
  description: Run your continuous integration (CI) tests against your Engine Yard AppCloud environments - the exact same configuration you are using in production!
206
222
  email:
207
223
  - drnicwilliams@gmail.com
@@ -221,7 +237,7 @@ files:
221
237
  - bin/ey-hudson
222
238
  - engineyard-hudson.gemspec
223
239
  - features/install.feature
224
- - features/server.feature
240
+ - features/install_server.feature
225
241
  - features/step_definitions/api_steps.rb
226
242
  - features/step_definitions/common_steps.rb
227
243
  - features/step_definitions/fixture_project_steps.rb
@@ -298,7 +314,7 @@ specification_version: 3
298
314
  summary: Easier to do CI than not to. Use Hudson CI with Engine Yard AppCloud.
299
315
  test_files:
300
316
  - features/install.feature
301
- - features/server.feature
317
+ - features/install_server.feature
302
318
  - features/step_definitions/api_steps.rb
303
319
  - features/step_definitions/common_steps.rb
304
320
  - features/step_definitions/fixture_project_steps.rb