cerberus 0.3.5 → 0.3.6
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/CHANGES +159 -129
- data/LICENSE +21 -21
- data/README +75 -75
- data/Rakefile +161 -159
- data/bin/cerberus +2 -2
- data/lib/cerberus/builder/maven2.rb +38 -38
- data/lib/cerberus/builder/rake.rb +7 -7
- data/lib/cerberus/builder/rant.rb +7 -7
- data/lib/cerberus/builder/rspec.rb +13 -0
- data/lib/cerberus/builder/ruby_base.rb +48 -47
- data/lib/cerberus/cli.rb +73 -70
- data/lib/cerberus/component_lazy_loader.rb +2 -0
- data/lib/cerberus/config.example.yml +28 -28
- data/lib/cerberus/config.rb +47 -46
- data/lib/cerberus/constants.rb +8 -8
- data/lib/cerberus/latch.rb +26 -26
- data/lib/cerberus/manager.rb +296 -267
- data/lib/cerberus/publisher/base.rb +47 -47
- data/lib/cerberus/publisher/gmailer.rb +17 -0
- data/lib/cerberus/publisher/irc.rb +27 -27
- data/lib/cerberus/publisher/jabber.rb +25 -25
- data/lib/cerberus/publisher/mail.rb +36 -36
- data/lib/cerberus/publisher/netsmtp_tls_fix.rb +66 -66
- data/lib/cerberus/publisher/rss.rb +27 -28
- data/lib/cerberus/scm/cvs.rb +48 -48
- data/lib/cerberus/scm/darcs.rb +70 -70
- data/lib/cerberus/scm/svn.rb +83 -83
- data/lib/cerberus/utils.rb +156 -156
- data/test/config_test.rb +45 -45
- data/test/functional_test.rb +288 -287
- data/test/integration_test.rb +104 -104
- data/test/irc_publisher_test.rb +18 -18
- data/test/jabber_publisher_test.rb +21 -21
- data/test/mail_publisher_test.rb +25 -25
- data/test/maven2_builer_test.rb +81 -81
- data/test/mock/irc.rb +20 -20
- data/test/mock/manager.rb +10 -10
- data/test/mock/xmpp4r.rb +19 -19
- data/test/rss_publisher_test.rb +21 -21
- data/test/test_helper.rb +105 -105
- metadata +58 -40
- data/lib/cerberus/helper/xchar.rb +0 -61
data/Rakefile
CHANGED
@@ -1,159 +1,161 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
require 'rake/testtask'
|
4
|
-
require 'rake/packagetask'
|
5
|
-
require 'rake/gempackagetask'
|
6
|
-
|
7
|
-
require "./lib/cerberus/constants"
|
8
|
-
|
9
|
-
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
10
|
-
PKG_NAME = 'cerberus'
|
11
|
-
PKG_VERSION = Cerberus::VERSION + PKG_BUILD
|
12
|
-
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
13
|
-
|
14
|
-
RELEASE_NAME = "REL #{PKG_VERSION}"
|
15
|
-
|
16
|
-
RUBYFORGE_PROJECT = "cerberus"
|
17
|
-
RUBYFORGE_USER = "anatol"
|
18
|
-
|
19
|
-
task :default => [:test, :clean]
|
20
|
-
|
21
|
-
desc "Run the unit tests in test/unit"
|
22
|
-
Rake::TestTask.new(:test) do |t|
|
23
|
-
t.libs << "test"
|
24
|
-
t.pattern = 'test/*_test.rb'
|
25
|
-
t.verbose = true
|
26
|
-
end
|
27
|
-
|
28
|
-
desc "Clean all generated files"
|
29
|
-
task :clean => :clobber_package do
|
30
|
-
rm_rf "#{File.dirname(__FILE__)}/test/__workdir"
|
31
|
-
rm_rf "#{File.dirname(__FILE__)}/coverage"
|
32
|
-
rm_rf "#{File.dirname(__FILE__)}/doc/site/output"
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
GEM_SPEC = Gem::Specification.new do |s|
|
37
|
-
s.name = PKG_NAME
|
38
|
-
s.version = PKG_VERSION
|
39
|
-
s.platform = Gem::Platform::RUBY
|
40
|
-
s.required_ruby_version = ">=1.8.2"
|
41
|
-
|
42
|
-
s.summary = "Cerberus is a Continuous Integration tool that could be easily run from Cron."
|
43
|
-
s.description = <<-DESC.strip.gsub(/\n\s+/, " ")
|
44
|
-
Cerberus is a Continuous Integration software for Ruby projects. CI helps you keep your project
|
45
|
-
in a good shape.
|
46
|
-
|
47
|
-
For now Cerberus only work with projects that use Subversion but in the future it would be provided
|
48
|
-
support for other VCS.
|
49
|
-
|
50
|
-
Cerberus could be easily invoked from Cron (for Unix) or nnCron (for Windows) utilities.
|
51
|
-
DESC
|
52
|
-
|
53
|
-
s.add_dependency 'actionmailer', '>= 1.3.
|
54
|
-
s.add_dependency '
|
55
|
-
s.add_dependency '
|
56
|
-
s.add_dependency '
|
57
|
-
|
58
|
-
s.
|
59
|
-
|
60
|
-
s.files
|
61
|
-
|
62
|
-
s.
|
63
|
-
|
64
|
-
s.
|
65
|
-
|
66
|
-
s.
|
67
|
-
|
68
|
-
s.
|
69
|
-
|
70
|
-
s.
|
71
|
-
|
72
|
-
s.
|
73
|
-
|
74
|
-
s.
|
75
|
-
s.
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
p.
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
t.
|
106
|
-
|
107
|
-
|
108
|
-
end
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
"pkg/#{PKG_FILE_NAME}.
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
release.
|
128
|
-
release.
|
129
|
-
release.
|
130
|
-
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
publisher.
|
142
|
-
publisher.
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
end
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rake/packagetask'
|
5
|
+
require 'rake/gempackagetask'
|
6
|
+
|
7
|
+
require "./lib/cerberus/constants"
|
8
|
+
|
9
|
+
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
10
|
+
PKG_NAME = 'cerberus'
|
11
|
+
PKG_VERSION = Cerberus::VERSION + PKG_BUILD
|
12
|
+
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
13
|
+
|
14
|
+
RELEASE_NAME = "REL #{PKG_VERSION}"
|
15
|
+
|
16
|
+
RUBYFORGE_PROJECT = "cerberus"
|
17
|
+
RUBYFORGE_USER = "anatol"
|
18
|
+
|
19
|
+
task :default => [:test, :clean]
|
20
|
+
|
21
|
+
desc "Run the unit tests in test/unit"
|
22
|
+
Rake::TestTask.new(:test) do |t|
|
23
|
+
t.libs << "test"
|
24
|
+
t.pattern = 'test/*_test.rb'
|
25
|
+
t.verbose = true
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Clean all generated files"
|
29
|
+
task :clean => :clobber_package do
|
30
|
+
rm_rf "#{File.dirname(__FILE__)}/test/__workdir"
|
31
|
+
rm_rf "#{File.dirname(__FILE__)}/coverage"
|
32
|
+
rm_rf "#{File.dirname(__FILE__)}/doc/site/output"
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
GEM_SPEC = Gem::Specification.new do |s|
|
37
|
+
s.name = PKG_NAME
|
38
|
+
s.version = PKG_VERSION
|
39
|
+
s.platform = Gem::Platform::RUBY
|
40
|
+
s.required_ruby_version = ">=1.8.2"
|
41
|
+
|
42
|
+
s.summary = "Cerberus is a Continuous Integration tool that could be easily run from Cron."
|
43
|
+
s.description = <<-DESC.strip.gsub(/\n\s+/, " ")
|
44
|
+
Cerberus is a Continuous Integration software for Ruby projects. CI helps you keep your project
|
45
|
+
in a good shape.
|
46
|
+
|
47
|
+
For now Cerberus only work with projects that use Subversion but in the future it would be provided
|
48
|
+
support for other VCS.
|
49
|
+
|
50
|
+
Cerberus could be easily invoked from Cron (for Unix) or nnCron (for Windows) utilities.
|
51
|
+
DESC
|
52
|
+
|
53
|
+
s.add_dependency 'actionmailer', '>= 1.3.3'
|
54
|
+
s.add_dependency 'activesupport', '>= 1.4.2'
|
55
|
+
s.add_dependency 'rake', '>= 0.7.3'
|
56
|
+
s.add_dependency 'xmpp4r', '>= 0.3.1'
|
57
|
+
s.add_dependency 'Ruby-IRC', '>= 1.0.7'
|
58
|
+
s.add_dependency 'gmailer', '>= 0.1.7'
|
59
|
+
|
60
|
+
s.files = Dir.glob("{bin,lib,test}/**/*").delete_if { |item| item.include?('__workdir') }
|
61
|
+
s.files += %w(LICENSE README CHANGES Rakefile)
|
62
|
+
s.files += Dir.glob("doc/*").delete_if { |item| item.include?('__workdir') }
|
63
|
+
|
64
|
+
s.bindir = "bin"
|
65
|
+
s.executables = ["cerberus"]
|
66
|
+
s.default_executable = "cerberus"
|
67
|
+
|
68
|
+
s.require_path = 'lib'
|
69
|
+
|
70
|
+
s.has_rdoc = false
|
71
|
+
|
72
|
+
s.test_suite_file = "test/integration_test.rb"
|
73
|
+
|
74
|
+
s.author = "Anatol Pomozov"
|
75
|
+
s.email = "anatol.pomozov@gmail.com"
|
76
|
+
s.homepage = "http://rubyforge.org/projects/cerberus"
|
77
|
+
s.rubyforge_project = RUBYFORGE_PROJECT
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
Rake::GemPackageTask.new(GEM_SPEC) do |p|
|
82
|
+
p.gem_spec = GEM_SPEC
|
83
|
+
p.need_tar = true
|
84
|
+
p.need_zip = true
|
85
|
+
end
|
86
|
+
|
87
|
+
task :install => [:clean, :test, :package] do
|
88
|
+
system "gem install pkg/#{PKG_NAME}-#{PKG_VERSION}.gem"
|
89
|
+
end
|
90
|
+
|
91
|
+
task :uninstall => [:clean] do
|
92
|
+
system "gem uninstall #{PKG_NAME}"
|
93
|
+
end
|
94
|
+
|
95
|
+
desc "Look for TODO and FIXME tags in the code"
|
96
|
+
task :todo do
|
97
|
+
FileList.new(File.dirname(__FILE__)+'/**/*.rb').egrep(/#.*(FIXME|TODO|TBD|DEPRECATED)/i)
|
98
|
+
end
|
99
|
+
|
100
|
+
task :reinstall => [:uninstall, :install]
|
101
|
+
|
102
|
+
begin
|
103
|
+
require 'rcov/rcovtask'
|
104
|
+
Rcov::RcovTask.new do |t|
|
105
|
+
t.test_files = FileList['test/*_test.rb']
|
106
|
+
t.output_dir = File.dirname(__FILE__) + "/coverage"
|
107
|
+
t.verbose = true
|
108
|
+
end
|
109
|
+
rescue Object
|
110
|
+
end
|
111
|
+
|
112
|
+
task :site_coverage => [:rcov] do
|
113
|
+
sh %{ scp -r test/coverage/* #{RUBYFORGE_USER}@rubyforge.org:/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/coverage/ }
|
114
|
+
end
|
115
|
+
|
116
|
+
task :release_files => [:clean, :package] do
|
117
|
+
require 'meta_project'
|
118
|
+
project = MetaProject::Project::XForge::RubyForge.new(RUBYFORGE_PROJECT)
|
119
|
+
|
120
|
+
release_files = FileList[
|
121
|
+
"pkg/#{PKG_FILE_NAME}.gem",
|
122
|
+
"pkg/#{PKG_FILE_NAME}.zip",
|
123
|
+
"pkg/#{PKG_FILE_NAME}.tgz"
|
124
|
+
]
|
125
|
+
|
126
|
+
Rake::XForge::Release.new(project) do |release|
|
127
|
+
release.user_name = RUBYFORGE_USER
|
128
|
+
release.password = ENV['RUBYFORGE_PASSWORD']
|
129
|
+
release.files = release_files.to_a
|
130
|
+
release.package_name = PKG_NAME
|
131
|
+
release.release_name = "Cerberus #{PKG_VERSION}"
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
task :publish_news do
|
137
|
+
require 'meta_project'
|
138
|
+
|
139
|
+
project = MetaProject::Project::XForge::RubyForge.new(RUBYFORGE_PROJECT)
|
140
|
+
Rake::XForge::NewsPublisher.new(project) do |publisher|
|
141
|
+
publisher.user_name = RUBYFORGE_USER
|
142
|
+
publisher.password = ENV['RUBYFORGE_PASSWORD']
|
143
|
+
publisher.subject = "[ANN] Cerberus #{PKG_VERSION} Released"
|
144
|
+
publisher.details = IO.read(File.dirname(__FILE__) + '/README')
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
if require 'webgen/rake/webgentask'
|
149
|
+
|
150
|
+
Webgen::Rake::WebgenTask.new do |t|
|
151
|
+
t.directory = File.join( File.dirname( __FILE__ ), 'doc/site')
|
152
|
+
t.clobber_outdir = true
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
task :publish_site => :webgen do
|
158
|
+
sh %{scp -r -q doc/site/output/* #{RUBYFORGE_USER}@rubyforge.org:/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/}
|
159
|
+
end
|
160
|
+
|
161
|
+
task :release => [:release_files, :publish_news, :publish_site]
|
data/bin/cerberus
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
require 'cerberus/cli'
|
2
|
-
|
1
|
+
require 'cerberus/cli'
|
2
|
+
|
3
3
|
Cerberus::CLI.new(*ARGV)
|
@@ -1,39 +1,39 @@
|
|
1
|
-
require 'cerberus/builder/base'
|
2
|
-
|
3
|
-
class Cerberus::Builder::Maven2
|
4
|
-
attr_reader :output, :brokeness
|
5
|
-
|
6
|
-
def initialize(config)
|
7
|
-
@config = config
|
8
|
-
end
|
9
|
-
|
10
|
-
def run
|
11
|
-
Dir.chdir @config[:application_root]
|
12
|
-
cmd = @config[:builder, :maven2, :cmd] || 'mvn'
|
13
|
-
task = @config[:builder, :maven2, :task] || 'test'
|
14
|
-
@output = `#{@config[:bin_path]}#{cmd} #{task} 2>&1`
|
15
|
-
add_error_information
|
16
|
-
successful?
|
17
|
-
end
|
18
|
-
|
19
|
-
def successful?
|
20
|
-
$?.exitstatus == 0 and not @output.include?('[ERROR] BUILD FAILURE')
|
21
|
-
end
|
22
|
-
|
23
|
-
def add_error_information
|
24
|
-
str = @output
|
25
|
-
@output = ''
|
26
|
-
@brokeness = 0
|
27
|
-
while str =~ / <<< FAILURE!$/
|
28
|
-
@brokeness += 1
|
29
|
-
s = $'
|
30
|
-
|
31
|
-
$` =~ /^(.|\n)*Running (.*)$/
|
32
|
-
failed_class = $2
|
33
|
-
@output << $` << $& << ' <<< FAILURE!'
|
34
|
-
@output << "\n" << IO.readlines("#{@config[:application_root]}/target/surefire-reports/#{failed_class}.txt")[4..-1].join.lstrip #map{|str| ' ' + str}..gsub(' <<< FAILURE!','')
|
35
|
-
str = s
|
36
|
-
end
|
37
|
-
@output << str
|
38
|
-
end
|
1
|
+
require 'cerberus/builder/base'
|
2
|
+
|
3
|
+
class Cerberus::Builder::Maven2
|
4
|
+
attr_reader :output, :brokeness
|
5
|
+
|
6
|
+
def initialize(config)
|
7
|
+
@config = config
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
Dir.chdir @config[:application_root]
|
12
|
+
cmd = @config[:builder, :maven2, :cmd] || 'mvn'
|
13
|
+
task = @config[:builder, :maven2, :task] || 'test'
|
14
|
+
@output = `#{@config[:bin_path]}#{cmd} #{task} 2>&1`
|
15
|
+
add_error_information
|
16
|
+
successful?
|
17
|
+
end
|
18
|
+
|
19
|
+
def successful?
|
20
|
+
$?.exitstatus == 0 and not @output.include?('[ERROR] BUILD FAILURE')
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_error_information
|
24
|
+
str = @output
|
25
|
+
@output = ''
|
26
|
+
@brokeness = 0
|
27
|
+
while str =~ / <<< FAILURE!$/
|
28
|
+
@brokeness += 1
|
29
|
+
s = $'
|
30
|
+
|
31
|
+
$` =~ /^(.|\n)*Running (.*)$/
|
32
|
+
failed_class = $2
|
33
|
+
@output << $` << $& << ' <<< FAILURE!'
|
34
|
+
@output << "\n" << IO.readlines("#{@config[:application_root]}/target/surefire-reports/#{failed_class}.txt")[4..-1].join.lstrip #map{|str| ' ' + str}..gsub(' <<< FAILURE!','')
|
35
|
+
str = s
|
36
|
+
end
|
37
|
+
@output << str
|
38
|
+
end
|
39
39
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'cerberus/builder/ruby_base'
|
2
|
-
|
3
|
-
class Cerberus::Builder::Rake < Cerberus::Builder::RubyBase
|
4
|
-
def initialize(config)
|
5
|
-
super(config, "rake")
|
6
|
-
end
|
7
|
-
end
|
1
|
+
require 'cerberus/builder/ruby_base'
|
2
|
+
|
3
|
+
class Cerberus::Builder::Rake < Cerberus::Builder::RubyBase
|
4
|
+
def initialize(config)
|
5
|
+
super(config, "rake")
|
6
|
+
end
|
7
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'cerberus/builder/ruby_base'
|
2
|
-
|
3
|
-
class Cerberus::Builder::Rant < Cerberus::Builder::RubyBase
|
4
|
-
def initialize(config)
|
5
|
-
super(config, "rant")
|
6
|
-
end
|
7
|
-
end
|
1
|
+
require 'cerberus/builder/ruby_base'
|
2
|
+
|
3
|
+
class Cerberus::Builder::Rant < Cerberus::Builder::RubyBase
|
4
|
+
def initialize(config)
|
5
|
+
super(config, "rant")
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'cerberus/builder/ruby_base'
|
2
|
+
|
3
|
+
class Cerberus::Builder::RSpec < Cerberus::Builder::RubyBase
|
4
|
+
def initialize(config)
|
5
|
+
super(config, "rspec", "spec")
|
6
|
+
end
|
7
|
+
|
8
|
+
def brokeness
|
9
|
+
if @output =~ /\d+ examples, (\d+) failures/
|
10
|
+
$1.to_i
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|