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.
- data/.gitignore +10 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +36 -0
- data/LICENSE +20 -0
- data/README.md +71 -0
- data/Rakefile +76 -0
- data/VERSION +1 -0
- data/bin/hercules +6 -0
- data/hdi/README.md +4 -0
- data/hdi/config.rb +7 -0
- data/hdi/site/index.html +267 -0
- data/hdi/site/stylesheets/style.css +1 -0
- data/hdi/src/configuration.rb +5 -0
- data/hdi/src/layouts/application.haml +12 -0
- data/hdi/src/pages/_hdi.haml +71 -0
- data/hdi/src/pages/_header.haml +8 -0
- data/hdi/src/pages/_jquery.haml +155 -0
- data/hdi/src/pages/index.haml +10 -0
- data/hdi/src/stylesheets/style.sass +173 -0
- data/hercules.gemspec +120 -0
- data/lib/command_runner.rb +73 -0
- data/lib/config.rb +82 -0
- data/lib/deployer.rb +95 -0
- data/lib/git_handler.rb +78 -0
- data/lib/hercules.rb +167 -0
- data/lib/http_handler.rb +41 -0
- data/lib/request_handler.rb +142 -0
- data/tests/command_runner_test.rb +35 -0
- data/tests/config_test.rb +39 -0
- data/tests/fixtures/Gemfile +1 -0
- data/tests/fixtures/Gemfile.lock +8 -0
- data/tests/fixtures/Gemfile.with_git_gem +2 -0
- data/tests/fixtures/Gemfile.with_git_gem.lock +10 -0
- data/tests/fixtures/bogus_config.yml +9 -0
- data/tests/fixtures/bogus_deployer.rb +2 -0
- data/tests/fixtures/config.yml +12 -0
- data/tests/fixtures/config_empty.yml +1 -0
- data/tests/fixtures/config_empty_branches.yml +8 -0
- data/tests/fixtures/config_empty_projects.yml +2 -0
- data/tests/fixtures/config_global.yml +14 -0
- data/tests/fixtures/config_partial_1.yml +7 -0
- data/tests/fixtures/config_partial_2.yml +7 -0
- data/tests/fixtures/config_partial_3.yml +7 -0
- data/tests/fixtures/deployer_branch.rb +11 -0
- data/tests/fixtures/deployer_exception.rb +11 -0
- data/tests/fixtures/deployer_false.rb +11 -0
- data/tests/fixtures/deployer_path.rb +11 -0
- data/tests/fixtures/deployer_true.rb +11 -0
- data/tests/fixtures/deployer_undefined_variable.rb +11 -0
- data/tests/fixtures/startup_checkout_config.yml +12 -0
- data/tests/fixtures/startup_checkout_error_config.yml +12 -0
- data/tests/git_handler_test.rb +95 -0
- data/tests/git_setup.rb +70 -0
- data/tests/hercules_test.rb +128 -0
- data/tests/http_handler_test.rb +88 -0
- data/tests/request_handler_test.rb +242 -0
- data/tests/startup.rb +36 -0
- 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
|
+
|