cerberus 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
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