hercules 0.1.2 → 0.2.2
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/VERSION +1 -1
- data/hercules.gemspec +2 -2
- data/lib/deployer.rb +1 -0
- data/lib/git_handler.rb +1 -1
- data/lib/http_handler.rb +13 -4
- data/lib/request_handler.rb +8 -0
- data/tests/git_handler_test.rb +1 -0
- data/tests/http_handler_test.rb +3 -2
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.2
|
data/hercules.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{hercules}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Diogo Biazus"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-01-11}
|
13
13
|
s.default_executable = %q{hercules}
|
14
14
|
s.description = %q{Very simple deployment tool. It was made to deploy rails applications using github, bundler.}
|
15
15
|
s.email = %q{diogob@gmail.com}
|
data/lib/deployer.rb
CHANGED
@@ -39,6 +39,7 @@ module Hercules
|
|
39
39
|
@log.warn "Branch #{@branch} deployed"
|
40
40
|
dir = "#{git.branches_path}/#{@branch}"
|
41
41
|
Bundler.with_clean_env do
|
42
|
+
@log.debug "We do have an after trigger? #{has_before_trigger} Trigger Class: #{@trigger_class.inspect}"
|
42
43
|
after_trigger(dir) if has_after_trigger?
|
43
44
|
end
|
44
45
|
ensure
|
data/lib/git_handler.rb
CHANGED
@@ -67,7 +67,7 @@ module Hercules
|
|
67
67
|
dir = "#{@options['target_directory']}/checkouts/#{branch}"
|
68
68
|
if (Dir.glob("#{dir}/*").size) > max
|
69
69
|
# Here we must delete the oldest checkout
|
70
|
-
checkout_to_delete = Dir.glob("#{dir}/*").sort{|a,b| File.new(a).mtime
|
70
|
+
checkout_to_delete = Dir.glob("#{dir}/*").sort{|a,b| File.new(a).mtime <=> File.new(b).mtime }.shift
|
71
71
|
FileUtils.rm_r "#{checkout_to_delete}"
|
72
72
|
# Remove log file if it exists
|
73
73
|
# To achieve consistency we must remove the log when and only when we remove the checkout
|
data/lib/http_handler.rb
CHANGED
@@ -19,8 +19,19 @@ module Hercules
|
|
19
19
|
begin
|
20
20
|
@config.reload
|
21
21
|
resp = EventMachine::DelegatedHttpResponse.new( self )
|
22
|
-
|
23
|
-
|
22
|
+
# Block which fulfills the request
|
23
|
+
if @http_request_method == "GET"
|
24
|
+
req = RequestHandler.new({:config => @config, :log => @log, :method => @http_request_method, :path => @http_path_info, :query => @http_query_string, :body => @http_post_content})
|
25
|
+
req.run
|
26
|
+
resp.status = req.status
|
27
|
+
resp.content = req.message
|
28
|
+
resp.send_response
|
29
|
+
else
|
30
|
+
req = RequestHandler.new({:config => @config, :log => @log, :method => @http_request_method, :path => @http_path_info, :query => @http_query_string, :body => @http_post_content})
|
31
|
+
req.run
|
32
|
+
resp.content = "Deploy queued"
|
33
|
+
resp.send_response
|
34
|
+
end
|
24
35
|
rescue Exception => e
|
25
36
|
send(resp, 500, "Error while processing HTTP request: #{e.inspect} \nREQUEST: #{@http_request_method} #{@http_path_info}?#{@http_query_string}\n#{@http_post_content}")
|
26
37
|
@log.error "Backtrace: #{e.backtrace}"
|
@@ -30,8 +41,6 @@ module Hercules
|
|
30
41
|
def send resp, status, message
|
31
42
|
if status == 500
|
32
43
|
@log.error "#{status}: #{message}"
|
33
|
-
else
|
34
|
-
@log.info "#{status}: #{message}"
|
35
44
|
end
|
36
45
|
resp.status = status
|
37
46
|
resp.content = message
|
data/lib/request_handler.rb
CHANGED
@@ -3,11 +3,14 @@ require 'json'
|
|
3
3
|
require 'uri'
|
4
4
|
require File.dirname(__FILE__) + '/deployer'
|
5
5
|
|
6
|
+
require 'eventmachine'
|
7
|
+
|
6
8
|
module Hercules
|
7
9
|
# Class that knows how to handle deploy requests.
|
8
10
|
# This implementation will just parse a JSON as defined by github http hooks.
|
9
11
|
# In order to use other hook formats this class should be reimplemented.
|
10
12
|
class RequestHandler
|
13
|
+
include EM::Deferrable
|
11
14
|
# We must pass the request data (method, path, query and body).
|
12
15
|
# * options is a hash containing all the request data described above plus the logger and the config hash.
|
13
16
|
def initialize(options)
|
@@ -18,6 +21,11 @@ module Hercules
|
|
18
21
|
@config = options[:config]
|
19
22
|
end
|
20
23
|
|
24
|
+
def run
|
25
|
+
status
|
26
|
+
message
|
27
|
+
set_deferred_status :succeeded
|
28
|
+
end
|
21
29
|
# Returns the message generated as response for the request passed in the initializer.
|
22
30
|
# We also store the message for further queries.
|
23
31
|
def message
|
data/tests/git_handler_test.rb
CHANGED
@@ -86,6 +86,7 @@ class GitHandlerTest < Test::Unit::TestCase
|
|
86
86
|
g = Hercules::GitHandler.new(@config['test_project'])
|
87
87
|
g.deploy_branch('master')
|
88
88
|
generate_commit 'new_commit'
|
89
|
+
sleep 1 # Just to avoid creating two folders with same mtime
|
89
90
|
g.deploy_branch('master')
|
90
91
|
assert File.exists?(@config['test_project']['target_directory'] + '/branches/master/new_commit')
|
91
92
|
assert_equal 3, Dir.entries(@config['test_project']['target_directory'] + '/checkouts/master').size
|
data/tests/http_handler_test.rb
CHANGED
@@ -57,20 +57,21 @@ class HttpHandlerTest < Test::Unit::TestCase
|
|
57
57
|
|
58
58
|
def post token
|
59
59
|
start_hercules do |pid,log|
|
60
|
-
res = Net::HTTP.post_form(URI.parse("http://127.0.0.1:
|
60
|
+
res = Net::HTTP.post_form(URI.parse("http://127.0.0.1:49456/test_project/#{token}"), {'payload' => @json_request})
|
61
61
|
yield res, log
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
65
|
def get token
|
66
66
|
start_hercules do |pid,log|
|
67
|
-
res = Net::HTTP.get(URI.parse("http://127.0.0.1:
|
67
|
+
res = Net::HTTP.get(URI.parse("http://127.0.0.1:49456/test_project/#{token}"))
|
68
68
|
yield res, log
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
72
|
def test_simple_post
|
73
73
|
post "abc" do |res, log|
|
74
|
+
sleep 1
|
74
75
|
log_content = log.read()
|
75
76
|
assert_match /Received POST/, log_content
|
76
77
|
assert_no_match /Repository .* not found/, log_content
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hercules
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 1
|
9
8
|
- 2
|
10
|
-
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Diogo Biazus
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-11 00:00:00 -02:00
|
19
19
|
default_executable: hercules
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|