hercules 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. data/.gitignore +10 -0
  2. data/Gemfile +11 -0
  3. data/Gemfile.lock +36 -0
  4. data/LICENSE +20 -0
  5. data/README.md +71 -0
  6. data/Rakefile +76 -0
  7. data/VERSION +1 -0
  8. data/bin/hercules +6 -0
  9. data/hdi/README.md +4 -0
  10. data/hdi/config.rb +7 -0
  11. data/hdi/site/index.html +267 -0
  12. data/hdi/site/stylesheets/style.css +1 -0
  13. data/hdi/src/configuration.rb +5 -0
  14. data/hdi/src/layouts/application.haml +12 -0
  15. data/hdi/src/pages/_hdi.haml +71 -0
  16. data/hdi/src/pages/_header.haml +8 -0
  17. data/hdi/src/pages/_jquery.haml +155 -0
  18. data/hdi/src/pages/index.haml +10 -0
  19. data/hdi/src/stylesheets/style.sass +173 -0
  20. data/hercules.gemspec +120 -0
  21. data/lib/command_runner.rb +73 -0
  22. data/lib/config.rb +82 -0
  23. data/lib/deployer.rb +95 -0
  24. data/lib/git_handler.rb +78 -0
  25. data/lib/hercules.rb +167 -0
  26. data/lib/http_handler.rb +41 -0
  27. data/lib/request_handler.rb +142 -0
  28. data/tests/command_runner_test.rb +35 -0
  29. data/tests/config_test.rb +39 -0
  30. data/tests/fixtures/Gemfile +1 -0
  31. data/tests/fixtures/Gemfile.lock +8 -0
  32. data/tests/fixtures/Gemfile.with_git_gem +2 -0
  33. data/tests/fixtures/Gemfile.with_git_gem.lock +10 -0
  34. data/tests/fixtures/bogus_config.yml +9 -0
  35. data/tests/fixtures/bogus_deployer.rb +2 -0
  36. data/tests/fixtures/config.yml +12 -0
  37. data/tests/fixtures/config_empty.yml +1 -0
  38. data/tests/fixtures/config_empty_branches.yml +8 -0
  39. data/tests/fixtures/config_empty_projects.yml +2 -0
  40. data/tests/fixtures/config_global.yml +14 -0
  41. data/tests/fixtures/config_partial_1.yml +7 -0
  42. data/tests/fixtures/config_partial_2.yml +7 -0
  43. data/tests/fixtures/config_partial_3.yml +7 -0
  44. data/tests/fixtures/deployer_branch.rb +11 -0
  45. data/tests/fixtures/deployer_exception.rb +11 -0
  46. data/tests/fixtures/deployer_false.rb +11 -0
  47. data/tests/fixtures/deployer_path.rb +11 -0
  48. data/tests/fixtures/deployer_true.rb +11 -0
  49. data/tests/fixtures/deployer_undefined_variable.rb +11 -0
  50. data/tests/fixtures/startup_checkout_config.yml +12 -0
  51. data/tests/fixtures/startup_checkout_error_config.yml +12 -0
  52. data/tests/git_handler_test.rb +95 -0
  53. data/tests/git_setup.rb +70 -0
  54. data/tests/hercules_test.rb +128 -0
  55. data/tests/http_handler_test.rb +88 -0
  56. data/tests/request_handler_test.rb +242 -0
  57. data/tests/startup.rb +36 -0
  58. metadata +251 -0
@@ -0,0 +1,88 @@
1
+ # coding: utf-8
2
+ require 'tests/startup'
3
+ require 'tests/git_setup'
4
+ require 'net/http'
5
+ require 'uri'
6
+ require 'test/unit'
7
+
8
+ class HttpHandlerTest < Test::Unit::TestCase
9
+ include Startup
10
+ include GitSetup
11
+
12
+ def setup
13
+ prepare_startup
14
+ git_setup
15
+ @json_request = %<
16
+ {
17
+ "before": "5aef35982fb2d34e9d9d4502f6ede1072793222d",
18
+ "repository": {
19
+ "url": "file:///tmp/hercules_test_repository",
20
+ "name": "test_project",
21
+ "description": "test repository",
22
+ "watchers": 5,
23
+ "forks": 2,
24
+ "private": 1,
25
+ "owner": {
26
+ "email": "diogob@gmail.com",
27
+ "name": "diogob"
28
+ }
29
+ },
30
+ "commits": [
31
+ {
32
+ "id": "41a212ee83ca127e3c8cf465891ab7216a705f59",
33
+ "url": "http://github.com/defunkt/github/commit/41a212ee83ca127e3c8cf465891ab7216a705f59",
34
+ "author": {
35
+ "email": "chris@ozmm.org",
36
+ "name": "Chris Wanstrath"
37
+ },
38
+ "message": "okay i give in",
39
+ "timestamp": "2008-02-15T14:57:17-08:00",
40
+ "added": ["filepath.rb"]
41
+ },
42
+ {
43
+ "id": "de8251ff97ee194a289832576287d6f8ad74e3d0",
44
+ "url": "http://github.com/defunkt/github/commit/de8251ff97ee194a289832576287d6f8ad74e3d0",
45
+ "author": {
46
+ "email": "chris@ozmm.org",
47
+ "name": "Chris Wanstrath"
48
+ },
49
+ "message": "update pricing a tad",
50
+ "timestamp": "2008-02-15T14:36:34-08:00"
51
+ }
52
+ ],
53
+ "after": "de8251ff97ee194a289832576287d6f8ad74e3d0",
54
+ "ref": "refs/heads/master"
55
+ }>
56
+ end
57
+
58
+ def post token
59
+ start_hercules do |pid,log|
60
+ res = Net::HTTP.post_form(URI.parse("http://127.0.0.1:8080/test_project/#{token}"), {'payload' => @json_request})
61
+ yield res, log
62
+ end
63
+ end
64
+
65
+ def get token
66
+ start_hercules do |pid,log|
67
+ res = Net::HTTP.get(URI.parse("http://127.0.0.1:8080/test_project/#{token}"))
68
+ yield res, log
69
+ end
70
+ end
71
+
72
+ def test_simple_post
73
+ post "abc" do |res, log|
74
+ log_content = log.read()
75
+ assert_match /Received POST/, log_content
76
+ assert_no_match /Repository .* not found/, log_content
77
+ assert_no_match /Invalid token/, log_content
78
+ assert_no_match /Repository .* not found/, res.body
79
+ assert_is_checkout @config['test_project']['target_directory'] + '/branches/master'
80
+ end
81
+ end
82
+
83
+ def test_get
84
+ get "abc" do |res,log|
85
+ assert_no_match /500: Error/, log.read
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,242 @@
1
+ # coding: utf-8
2
+ require 'tests/git_setup'
3
+ require 'lib/request_handler'
4
+ require 'lib/config'
5
+ require 'logger'
6
+ require 'json'
7
+ require 'test/unit'
8
+
9
+ class RequestHandlerTest < Test::Unit::TestCase
10
+ include GitSetup
11
+ def setup
12
+ git_setup
13
+ @config = ::Hercules::Config.new(File.dirname(__FILE__) + '/fixtures/config.yml')
14
+ @json_request = %<payload={
15
+ "before": "5aef35982fb2d34e9d9d4502f6ede1072793222d",
16
+ "repository": {
17
+ "url": "file:///tmp/hercules_test_repository",
18
+ "name": "test_project",
19
+ "description": "test repository",
20
+ "watchers": 5,
21
+ "forks": 2,
22
+ "private": 1,
23
+ "owner": {
24
+ "email": "diogob@gmail.com",
25
+ "name": "diogob"
26
+ }
27
+ },
28
+ "commits": [
29
+ {
30
+ "id": "41a212ee83ca127e3c8cf465891ab7216a705f59",
31
+ "url": "http://github.com/defunkt/github/commit/41a212ee83ca127e3c8cf465891ab7216a705f59",
32
+ "author": {
33
+ "email": "chris@ozmm.org",
34
+ "name": "Chris Wanstrath"
35
+ },
36
+ "message": "okay i give in",
37
+ "timestamp": "2008-02-15T14:57:17-08:00",
38
+ "added": ["filepath.rb"]
39
+ },
40
+ {
41
+ "id": "de8251ff97ee194a289832576287d6f8ad74e3d0",
42
+ "url": "http://github.com/defunkt/github/commit/de8251ff97ee194a289832576287d6f8ad74e3d0",
43
+ "author": {
44
+ "email": "chris@ozmm.org",
45
+ "name": "Chris Wanstrath"
46
+ },
47
+ "message": "update pricing a tad",
48
+ "timestamp": "2008-02-15T14:36:34-08:00"
49
+ }
50
+ ],
51
+ "after": "de8251ff97ee194a289832576287d6f8ad74e3d0",
52
+ "ref": "refs/heads/master"
53
+ }>
54
+ end
55
+
56
+ def post token
57
+ handler = Hercules::RequestHandler.new({:config => @config, :log => Logger.new("/dev/null"), :method => "POST", :path => "/github/#{token}", :query => "", :body => @json_request})
58
+ handler.status # just to ensure we process the request before any assert
59
+ handler
60
+ end
61
+
62
+ def get path
63
+ handler = Hercules::RequestHandler.new({:config => @config, :log => Logger.new("/dev/null"), :method => "GET", :path => "/#{path}", :query => "", :body => @json_request})
64
+ handler.status # just to ensure we process the request before any assert
65
+ handler
66
+ end
67
+
68
+ def test_read_repository_attributes
69
+ handler = Hercules::RequestHandler.new({:config => @config, :log => Logger.new("/dev/null"), :method => "POST", :path => "/github", :query => "", :body => @json_request})
70
+ assert_equal "test_project", handler.repository_name
71
+ assert_equal "file:///tmp/hercules_test_repository", handler.repository_url
72
+ assert_equal "master", handler.branch
73
+ end
74
+
75
+ def test_double_post
76
+ test_simple_post
77
+ test_simple_post
78
+ end
79
+
80
+ def test_could_not_install_gem
81
+ generate_bogus_gemfile
82
+ res = post "abc"
83
+ assert_match /Failed to run/, res.message
84
+ assert_equal 500, res.status
85
+ assert !File.exists?(@config['test_project']['target_directory'] + '/branches/master')
86
+ end
87
+
88
+ def test_could_install_gem
89
+ generate_gemfile_with_gem
90
+ res = post "abc"
91
+ assert_no_match /Failed to run/, res.message
92
+ assert_equal 200, res.status
93
+ assert_is_checkout @config['test_project']['target_directory'] + '/branches/master'
94
+ assert File.exists?(@config['test_project']['target_directory'] + '/bundles/master')
95
+ assert !File.exists?(@config['test_project']['target_directory'] + '/bundles/master/master')
96
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master/vendor/bundle')
97
+ end
98
+
99
+ def test_request_hdi
100
+ res = get "test_project/abc"
101
+ assert_equal false, res.request_hdi?
102
+ res = get "test_project/abc/hdi"
103
+ assert_equal true, res.request_hdi?
104
+ res = post "abc/hdi"
105
+ assert_equal false, res.request_hdi?
106
+ end
107
+
108
+ def test_get_hdi
109
+ res = get "test_project/abc/hdi"
110
+ assert_equal 200, res.status
111
+ assert_match /<title>HDI/, res.message
112
+ end
113
+
114
+ def test_request_token
115
+ res = post "abc"
116
+ assert_equal "abc", res.request_token
117
+ res = get "test_project/abc"
118
+ assert_equal "abc", res.request_token
119
+ end
120
+
121
+ def test_simple_post
122
+ res = post "abc"
123
+ assert_no_match /Repository .* not found/, res.message
124
+ assert_equal 200, res.status
125
+ assert_is_checkout @config['test_project']['target_directory'] + '/branches/master'
126
+ end
127
+
128
+ def test_invalid_token
129
+ res = post "invalid_token"
130
+ assert_match /Invalid token/, res.message
131
+ assert_equal 403, res.status
132
+ assert !File.exists?(@config['test_project']['target_directory'] + '/branches/master')
133
+ end
134
+
135
+ def test_repository_not_found
136
+ @json_request = @json_request.gsub(/test_project/, "project_that_does_not_exist")
137
+ res = post "abc"
138
+ assert_equal 404, res.status
139
+ assert_match /Repository .* not found/, res.message
140
+ end
141
+
142
+ def test_branch_not_found
143
+ @json_request = @json_request.gsub(/master/, "branch_that_does_not_exist")
144
+ res = post "abc"
145
+ assert_equal 404, res.status
146
+ assert_match /Branch .* not found/, res.message
147
+ end
148
+
149
+ def test_deployer_false
150
+ generate_deployer "deployer_false"
151
+ res = post "abc"
152
+ assert_equal 500, res.status
153
+ assert_match /Error while deploying/, res.message
154
+ assert !File.exists?(@config['test_project']['target_directory'] + '/branches/master')
155
+ assert_equal 1, Dir.glob(@config['test_project']['target_directory'] + '/logs/master/*').size
156
+ end
157
+
158
+ def test_deployer_true
159
+ generate_deployer "deployer_true"
160
+ res = post "abc"
161
+ assert_equal 200, res.status
162
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master')
163
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master/after_deploy')
164
+ end
165
+
166
+ def test_bogus_deployer
167
+ generate_deployer "bogus_deployer"
168
+ res = post "abc"
169
+ assert_equal 200, res.status
170
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master')
171
+ end
172
+
173
+ def test_deployer_path
174
+ generate_deployer "deployer_path"
175
+ res = post "abc"
176
+ assert_equal 200, res.status
177
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master')
178
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master/after_deploy')
179
+ end
180
+
181
+ def test_deployer_exception
182
+ generate_deployer "deployer_exception"
183
+ res = post "abc"
184
+ assert_equal 500, res.status
185
+ assert_match /Error while deploying/, res.message
186
+ assert !File.exists?(@config['test_project']['target_directory'] + '/branches/master')
187
+ end
188
+
189
+ def test_deployer_undefined_variable
190
+ generate_deployer "deployer_undefined_variable"
191
+ res = post "abc"
192
+ assert_equal 500, res.status
193
+ assert_match /Error while deploying/, res.message
194
+ assert !File.exists?(@config['test_project']['target_directory'] + '/branches/master')
195
+ end
196
+
197
+ def test_deployer_branch
198
+ generate_deployer "deployer_branch"
199
+ res = post "abc"
200
+ assert_equal 200, res.status
201
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master')
202
+ assert File.exists?(@config['test_project']['target_directory'] + '/branches/master/branch_name_master')
203
+ end
204
+
205
+ def test_get_project_root_with_right_token
206
+ res = get "test_project/abc"
207
+ assert_equal 200, res.status
208
+ assert_equal({'master' => {'deployed' => false}, 'test' => {'deployed' => false}}, JSON.parse(res.message))
209
+ end
210
+
211
+ def test_get_project_root_with_wrong_token
212
+ res = get "test_project/wrong_token"
213
+ assert_equal 403, res.status
214
+ assert_match /Invalid token/, res.message
215
+ end
216
+
217
+ def test_get_project_root_with_right_token_after_deploy
218
+ res = post "abc"
219
+ assert_equal 200, res.status
220
+ res = get "test_project/abc"
221
+ assert_equal 200, res.status
222
+ log_path = Dir.glob(@config['test_project']['target_directory'] + '/logs/master/*').pop
223
+ checkout = log_path.split('/').pop.gsub(/\.log/, '')
224
+ output = ""
225
+ File.open(log_path){|f| output = f.read }
226
+ timestamp = File.mtime(@config['test_project']['target_directory'] + '/branches/master').strftime("%Y-%m-%d %H:%M:%S")
227
+ assert_equal({'master' => {'deployed' => true, 'checkouts' => [{'sha1' => checkout, 'timestamp' => timestamp, 'output' => output}]}, 'test' => {'deployed' => false}}, JSON.parse(res.message))
228
+ end
229
+
230
+ def test_get_should_not_return_error_upon_non_existent_log_file
231
+ res = post "abc"
232
+ assert_equal 200, res.status
233
+ log_path = Dir.glob(@config['test_project']['target_directory'] + '/logs/master/*').pop
234
+ FileUtils.rm_f(log_path)
235
+ res = get "test_project/abc"
236
+ assert_equal 200, res.status
237
+ checkout = log_path.split('/').pop.gsub(/\.log/, '')
238
+ timestamp = File.mtime(@config['test_project']['target_directory'] + '/branches/master').strftime("%Y-%m-%d %H:%M:%S")
239
+ assert_equal({'master' => {'deployed' => true, 'checkouts' => [{'sha1' => checkout, 'timestamp' => timestamp}]}, 'test' => {'deployed' => false}}, JSON.parse(res.message))
240
+ end
241
+ end
242
+
data/tests/startup.rb ADDED
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+
3
+ # Test mailer startup reading a YAML file and requesting config info
4
+ module Startup
5
+ def prepare_startup
6
+ @logfile = 'tmp/test.log'
7
+ @pidfile = 'hercules.pid'
8
+ end
9
+
10
+ def cleanup
11
+ File.unlink @logfile if File.exist?(@logfile)
12
+ File.unlink @pidfile if File.exist?(@pidfile)
13
+ end
14
+
15
+ def start_hercules config = 'tests/fixtures/config.yml'
16
+ verbose(false) do
17
+ Bundler.with_clean_env do
18
+ sh "bin/hercules -l tmp/test.log -V -c " + config
19
+ end
20
+ begin
21
+ sleep 1
22
+ pid = File.open(@pidfile, 'r').read()
23
+ log = File.open(@logfile, 'r')
24
+ yield(pid, log)
25
+ sh "kill -KILL #{pid} >/dev/null 2>&1" rescue nil
26
+ sleep 1
27
+ assert !File.exist?('tmp/hercules.pid'), "PID file still exists after daemon shutdown"
28
+ ensure
29
+ # just to make sure we always kill the test instances
30
+ sh "kill -KILL #{pid} >/dev/null 2>&1" rescue nil
31
+ cleanup
32
+ end
33
+ end
34
+ end
35
+ end
36
+
metadata ADDED
@@ -0,0 +1,251 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hercules
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Diogo Biazus
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-14 00:00:00 -03:00
19
+ default_executable: hercules
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: eventmachine
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 59
30
+ segments:
31
+ - 0
32
+ - 12
33
+ - 10
34
+ version: 0.12.10
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: eventmachine_httpserver
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - "="
44
+ - !ruby/object:Gem::Version
45
+ hash: 23
46
+ segments:
47
+ - 0
48
+ - 2
49
+ - 0
50
+ version: 0.2.0
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: git
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - "="
60
+ - !ruby/object:Gem::Version
61
+ hash: 21
62
+ segments:
63
+ - 1
64
+ - 2
65
+ - 5
66
+ version: 1.2.5
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: json
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - "="
76
+ - !ruby/object:Gem::Version
77
+ hash: 11
78
+ segments:
79
+ - 1
80
+ - 4
81
+ - 6
82
+ version: 1.4.6
83
+ type: :runtime
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: bundler
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ hash: 23
94
+ segments:
95
+ - 1
96
+ - 0
97
+ - 0
98
+ version: 1.0.0
99
+ type: :runtime
100
+ version_requirements: *id005
101
+ - !ruby/object:Gem::Dependency
102
+ name: haml
103
+ prerelease: false
104
+ requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - "="
108
+ - !ruby/object:Gem::Version
109
+ hash: 35
110
+ segments:
111
+ - 3
112
+ - 0
113
+ - 18
114
+ version: 3.0.18
115
+ type: :development
116
+ version_requirements: *id006
117
+ - !ruby/object:Gem::Dependency
118
+ name: compass
119
+ prerelease: false
120
+ requirement: &id007 !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - "="
124
+ - !ruby/object:Gem::Version
125
+ hash: 61
126
+ segments:
127
+ - 0
128
+ - 10
129
+ - 5
130
+ version: 0.10.5
131
+ type: :development
132
+ version_requirements: *id007
133
+ - !ruby/object:Gem::Dependency
134
+ name: staticmatic
135
+ prerelease: false
136
+ requirement: &id008 !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - "="
140
+ - !ruby/object:Gem::Version
141
+ hash: 39
142
+ segments:
143
+ - 0
144
+ - 10
145
+ - 8
146
+ version: 0.10.8
147
+ type: :development
148
+ version_requirements: *id008
149
+ description: Very simple deployment tool. It was made to deploy rails applications using github, bundler.
150
+ email: diogob@gmail.com
151
+ executables:
152
+ - hercules
153
+ extensions: []
154
+
155
+ extra_rdoc_files:
156
+ - LICENSE
157
+ - README.md
158
+ files:
159
+ - .gitignore
160
+ - Gemfile
161
+ - Gemfile.lock
162
+ - LICENSE
163
+ - README.md
164
+ - Rakefile
165
+ - VERSION
166
+ - bin/hercules
167
+ - hdi/README.md
168
+ - hdi/config.rb
169
+ - hdi/site/index.html
170
+ - hdi/site/stylesheets/style.css
171
+ - hdi/src/configuration.rb
172
+ - hdi/src/layouts/application.haml
173
+ - hdi/src/pages/_hdi.haml
174
+ - hdi/src/pages/_header.haml
175
+ - hdi/src/pages/_jquery.haml
176
+ - hdi/src/pages/index.haml
177
+ - hdi/src/stylesheets/style.sass
178
+ - hercules.gemspec
179
+ - lib/command_runner.rb
180
+ - lib/config.rb
181
+ - lib/deployer.rb
182
+ - lib/git_handler.rb
183
+ - lib/hercules.rb
184
+ - lib/http_handler.rb
185
+ - lib/request_handler.rb
186
+ - tests/command_runner_test.rb
187
+ - tests/config_test.rb
188
+ - tests/fixtures/Gemfile
189
+ - tests/fixtures/Gemfile.lock
190
+ - tests/fixtures/Gemfile.with_git_gem
191
+ - tests/fixtures/Gemfile.with_git_gem.lock
192
+ - tests/fixtures/bogus_config.yml
193
+ - tests/fixtures/bogus_deployer.rb
194
+ - tests/fixtures/config.yml
195
+ - tests/fixtures/config_empty.yml
196
+ - tests/fixtures/config_empty_branches.yml
197
+ - tests/fixtures/config_empty_projects.yml
198
+ - tests/fixtures/config_global.yml
199
+ - tests/fixtures/config_partial_1.yml
200
+ - tests/fixtures/config_partial_2.yml
201
+ - tests/fixtures/config_partial_3.yml
202
+ - tests/fixtures/deployer_branch.rb
203
+ - tests/fixtures/deployer_exception.rb
204
+ - tests/fixtures/deployer_false.rb
205
+ - tests/fixtures/deployer_path.rb
206
+ - tests/fixtures/deployer_true.rb
207
+ - tests/fixtures/deployer_undefined_variable.rb
208
+ - tests/fixtures/startup_checkout_config.yml
209
+ - tests/fixtures/startup_checkout_error_config.yml
210
+ - tests/git_handler_test.rb
211
+ - tests/git_setup.rb
212
+ - tests/hercules_test.rb
213
+ - tests/http_handler_test.rb
214
+ - tests/request_handler_test.rb
215
+ - tests/startup.rb
216
+ has_rdoc: true
217
+ homepage: http://github.com/diogob/hercules
218
+ licenses: []
219
+
220
+ post_install_message:
221
+ rdoc_options:
222
+ - --charset=UTF-8
223
+ require_paths:
224
+ - lib
225
+ required_ruby_version: !ruby/object:Gem::Requirement
226
+ none: false
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ hash: 3
231
+ segments:
232
+ - 0
233
+ version: "0"
234
+ required_rubygems_version: !ruby/object:Gem::Requirement
235
+ none: false
236
+ requirements:
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ hash: 3
240
+ segments:
241
+ - 0
242
+ version: "0"
243
+ requirements: []
244
+
245
+ rubyforge_project:
246
+ rubygems_version: 1.3.7
247
+ signing_key:
248
+ specification_version: 3
249
+ summary: Simple deploy solution for ruby applications (using github+bundler).
250
+ test_files: []
251
+