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.
Files changed (42) hide show
  1. data/CHANGES +159 -129
  2. data/LICENSE +21 -21
  3. data/README +75 -75
  4. data/Rakefile +161 -159
  5. data/bin/cerberus +2 -2
  6. data/lib/cerberus/builder/maven2.rb +38 -38
  7. data/lib/cerberus/builder/rake.rb +7 -7
  8. data/lib/cerberus/builder/rant.rb +7 -7
  9. data/lib/cerberus/builder/rspec.rb +13 -0
  10. data/lib/cerberus/builder/ruby_base.rb +48 -47
  11. data/lib/cerberus/cli.rb +73 -70
  12. data/lib/cerberus/component_lazy_loader.rb +2 -0
  13. data/lib/cerberus/config.example.yml +28 -28
  14. data/lib/cerberus/config.rb +47 -46
  15. data/lib/cerberus/constants.rb +8 -8
  16. data/lib/cerberus/latch.rb +26 -26
  17. data/lib/cerberus/manager.rb +296 -267
  18. data/lib/cerberus/publisher/base.rb +47 -47
  19. data/lib/cerberus/publisher/gmailer.rb +17 -0
  20. data/lib/cerberus/publisher/irc.rb +27 -27
  21. data/lib/cerberus/publisher/jabber.rb +25 -25
  22. data/lib/cerberus/publisher/mail.rb +36 -36
  23. data/lib/cerberus/publisher/netsmtp_tls_fix.rb +66 -66
  24. data/lib/cerberus/publisher/rss.rb +27 -28
  25. data/lib/cerberus/scm/cvs.rb +48 -48
  26. data/lib/cerberus/scm/darcs.rb +70 -70
  27. data/lib/cerberus/scm/svn.rb +83 -83
  28. data/lib/cerberus/utils.rb +156 -156
  29. data/test/config_test.rb +45 -45
  30. data/test/functional_test.rb +288 -287
  31. data/test/integration_test.rb +104 -104
  32. data/test/irc_publisher_test.rb +18 -18
  33. data/test/jabber_publisher_test.rb +21 -21
  34. data/test/mail_publisher_test.rb +25 -25
  35. data/test/maven2_builer_test.rb +81 -81
  36. data/test/mock/irc.rb +20 -20
  37. data/test/mock/manager.rb +10 -10
  38. data/test/mock/xmpp4r.rb +19 -19
  39. data/test/rss_publisher_test.rb +21 -21
  40. data/test/test_helper.rb +105 -105
  41. metadata +58 -40
  42. 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.2'
54
- s.add_dependency 'rake', '>= 0.7.1'
55
- s.add_dependency 'xmpp4r', '>= 0.3'
56
- s.add_dependency 'Ruby-IRC', '>= 1.0.7'
57
-
58
- s.files = Dir.glob("{bin,lib,test}/**/*").delete_if { |item| item.include?('__workdir') }
59
- s.files += %w(LICENSE README CHANGES Rakefile)
60
- s.files += Dir.glob("doc/*").delete_if { |item| item.include?('__workdir') }
61
-
62
- s.bindir = "bin"
63
- s.executables = ["cerberus"]
64
- s.default_executable = "cerberus"
65
-
66
- s.require_path = 'lib'
67
-
68
- s.has_rdoc = false
69
-
70
- s.test_suite_file = "test/integration_test.rb"
71
-
72
- s.author = "Anatol Pomozov"
73
- s.email = "anatol.pomozov@gmail.com"
74
- s.homepage = "http://rubyforge.org/projects/cerberus"
75
- s.rubyforge_project = RUBYFORGE_PROJECT
76
- end
77
-
78
-
79
- Rake::GemPackageTask.new(GEM_SPEC) do |p|
80
- p.gem_spec = GEM_SPEC
81
- p.need_tar = true
82
- p.need_zip = true
83
- end
84
-
85
- task :install => [:clean, :test, :package] do
86
- system "gem install pkg/#{PKG_NAME}-#{PKG_VERSION}.gem"
87
- end
88
-
89
- task :uninstall => [:clean] do
90
- system "gem uninstall #{PKG_NAME}"
91
- end
92
-
93
- desc "Look for TODO and FIXME tags in the code"
94
- task :todo do
95
- FileList.new(File.dirname(__FILE__)+'/**/*.rb').egrep(/#.*(FIXME|TODO|TBD|DEPRECATED)/i)
96
- end
97
-
98
- task :reinstall => [:uninstall, :install]
99
-
100
- begin
101
- require 'rcov/rcovtask'
102
- Rcov::RcovTask.new do |t|
103
- t.test_files = FileList['test/*_test.rb']
104
- t.output_dir = File.dirname(__FILE__) + "/coverage"
105
- t.verbose = true
106
- end
107
- rescue Object
108
- end
109
-
110
- task :site_coverage => [:rcov] do
111
- sh %{ scp -r test/coverage/* #{RUBYFORGE_USER}@rubyforge.org:/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/coverage/ }
112
- end
113
-
114
- task :release_files => [:clean, :package] do
115
- require 'meta_project'
116
- project = MetaProject::Project::XForge::RubyForge.new(RUBYFORGE_PROJECT)
117
-
118
- release_files = FileList[
119
- "pkg/#{PKG_FILE_NAME}.gem",
120
- "pkg/#{PKG_FILE_NAME}.zip",
121
- "pkg/#{PKG_FILE_NAME}.tgz"
122
- ]
123
-
124
- Rake::XForge::Release.new(project) do |release|
125
- release.user_name = RUBYFORGE_USER
126
- release.password = ENV['RUBYFORGE_PASSWORD']
127
- release.files = release_files.to_a
128
- release.package_name = PKG_NAME
129
- release.release_name = "Cerberus #{PKG_VERSION}"
130
- end
131
-
132
- end
133
-
134
- task :publish_news do
135
- require 'meta_project'
136
-
137
- project = MetaProject::Project::XForge::RubyForge.new(RUBYFORGE_PROJECT)
138
- Rake::XForge::NewsPublisher.new(project) do |publisher|
139
- publisher.user_name = RUBYFORGE_USER
140
- publisher.password = ENV['RUBYFORGE_PASSWORD']
141
- publisher.subject = "[ANN] Cerberus #{PKG_VERSION} Released"
142
- publisher.details = IO.read(File.dirname(__FILE__) + '/README')
143
- end
144
- end
145
-
146
- if require 'webgen/rake/webgentask'
147
-
148
- Webgen::Rake::WebgenTask.new do |t|
149
- t.directory = File.join( File.dirname( __FILE__ ), 'doc/site')
150
- t.clobber_outdir = true
151
- end
152
-
153
- end
154
-
155
- task :publish_site => :webgen do
156
- sh %{scp -r -q doc/site/output/* #{RUBYFORGE_USER}@rubyforge.org:/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/}
157
- end
158
-
159
- task :release => [:release_files, :publish_news, :publish_site]
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