continuous4r 0.0.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.
Files changed (84) hide show
  1. data/History.txt +4 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +83 -0
  4. data/README.txt +1 -0
  5. data/Rakefile +4 -0
  6. data/config/hoe.rb +71 -0
  7. data/config/requirements.rb +17 -0
  8. data/lib/capistrano_formatter.rb +19 -0
  9. data/lib/continuous4r/version.rb +9 -0
  10. data/lib/continuous4r.rb +490 -0
  11. data/lib/flog_formatter.rb +48 -0
  12. data/lib/heckle_formatter.rb +27 -0
  13. data/lib/httperf_formatter.rb +160 -0
  14. data/lib/site/body-capistrano.rhtml +8 -0
  15. data/lib/site/body-changelog.rhtml +8 -0
  16. data/lib/site/body-continuous4r-reports.rhtml +83 -0
  17. data/lib/site/body-dcov.rhtml +27 -0
  18. data/lib/site/body-dependencies.rhtml +52 -0
  19. data/lib/site/body-flog.rhtml +15 -0
  20. data/lib/site/body-heckle.rhtml +16 -0
  21. data/lib/site/body-httperf.rhtml +8 -0
  22. data/lib/site/body-index.rhtml +71 -0
  23. data/lib/site/body-issue-tracking.rhtml +38 -0
  24. data/lib/site/body-kwala.rhtml +35 -0
  25. data/lib/site/body-railroad.rhtml +29 -0
  26. data/lib/site/body-rcov.rhtml +23 -0
  27. data/lib/site/body-rdoc.rhtml +12 -0
  28. data/lib/site/body-scm-usage.rhtml +37 -0
  29. data/lib/site/body-stats.rhtml +8 -0
  30. data/lib/site/body-team-list.rhtml +73 -0
  31. data/lib/site/body-tests.rhtml +8 -0
  32. data/lib/site/body-zentest.rhtml +8 -0
  33. data/lib/site/header.rhtml +41 -0
  34. data/lib/site/images/continuous4r-logo.png +0 -0
  35. data/lib/site/images/external.png +0 -0
  36. data/lib/site/images/icon_error_sml.gif +0 -0
  37. data/lib/site/images/icon_success_sml.gif +0 -0
  38. data/lib/site/images/newwindow.png +0 -0
  39. data/lib/site/menu-capistrano.rhtml +23 -0
  40. data/lib/site/menu-changelog.rhtml +23 -0
  41. data/lib/site/menu-continuous4r-reports.rhtml +31 -0
  42. data/lib/site/menu-dcov.rhtml +23 -0
  43. data/lib/site/menu-dependencies.rhtml +19 -0
  44. data/lib/site/menu-flog.rhtml +23 -0
  45. data/lib/site/menu-heckle.rhtml +23 -0
  46. data/lib/site/menu-httperf.rhtml +23 -0
  47. data/lib/site/menu-index.rhtml +19 -0
  48. data/lib/site/menu-issue-tracking.rhtml +19 -0
  49. data/lib/site/menu-kwala.rhtml +23 -0
  50. data/lib/site/menu-railroad.rhtml +23 -0
  51. data/lib/site/menu-rcov.rhtml +23 -0
  52. data/lib/site/menu-rdoc.rhtml +23 -0
  53. data/lib/site/menu-scm-usage.rhtml +19 -0
  54. data/lib/site/menu-stats.rhtml +23 -0
  55. data/lib/site/menu-team-list.rhtml +19 -0
  56. data/lib/site/menu-tests.rhtml +23 -0
  57. data/lib/site/menu-zentest.rhtml +23 -0
  58. data/lib/site/style/commons-maven.css +113 -0
  59. data/lib/site/style/maven-base.css +151 -0
  60. data/lib/site/style/maven-theme.css +100 -0
  61. data/lib/site/style/project.css +1 -0
  62. data/lib/stats_formatter.rb +51 -0
  63. data/lib/subversion_extractor.rb +64 -0
  64. data/lib/tests_formatter.rb +65 -0
  65. data/lib/zen_test_formatter.rb +48 -0
  66. data/log/debug.log +0 -0
  67. data/script/destroy +14 -0
  68. data/script/destroy.cmd +1 -0
  69. data/script/generate +14 -0
  70. data/script/generate.cmd +1 -0
  71. data/script/txt2html +74 -0
  72. data/script/txt2html.cmd +1 -0
  73. data/setup.rb +1585 -0
  74. data/tasks/deployment.rake +34 -0
  75. data/tasks/environment.rake +7 -0
  76. data/tasks/website.rake +17 -0
  77. data/test/test_continuous4r.rb +11 -0
  78. data/test/test_helper.rb +2 -0
  79. data/website/index.html +411 -0
  80. data/website/index.txt +298 -0
  81. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  82. data/website/stylesheets/screen.css +138 -0
  83. data/website/template.rhtml +48 -0
  84. metadata +141 -0
@@ -0,0 +1,34 @@
1
+ desc 'Release the website and new gem version'
2
+ task :deploy => [:check_version, :website, :release] do
3
+ puts "Remember to create SVN tag:"
4
+ puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
5
+ "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
6
+ puts "Suggested comment:"
7
+ puts "Tagging release #{CHANGES}"
8
+ end
9
+
10
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
11
+ task :local_deploy => [:website_generate, :install_gem]
12
+
13
+ task :check_version do
14
+ unless ENV['VERSION']
15
+ puts 'Must pass a VERSION=x.y.z release version'
16
+ exit
17
+ end
18
+ unless ENV['VERSION'] == VERS
19
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
20
+ exit
21
+ end
22
+ end
23
+
24
+ desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
25
+ task :install_gem_no_doc => [:clean, :package] do
26
+ sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
27
+ end
28
+
29
+ namespace :manifest do
30
+ desc 'Recreate Manifest.txt to include ALL files'
31
+ task :refresh do
32
+ `rake check_manifest | patch -p0 > Manifest.txt`
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ task :ruby_env do
2
+ RUBY_APP = if RUBY_PLATFORM =~ /java/
3
+ "jruby"
4
+ else
5
+ "ruby"
6
+ end unless defined? RUBY_APP
7
+ end
@@ -0,0 +1,17 @@
1
+ desc 'Generate website files'
2
+ task :website_generate => :ruby_env do
3
+ (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
4
+ sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
5
+ end
6
+ end
7
+
8
+ desc 'Upload website files to rubyforge'
9
+ task :website_upload do
10
+ host = "#{rubyforge_username}@rubyforge.org"
11
+ remote_dir = "/var/www/gforge-projects/#{PATH}/"
12
+ local_dir = 'website'
13
+ sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
14
+ end
15
+
16
+ desc 'Generate and upload website files'
17
+ task :website => [:website_generate, :website_upload, :publish_docs]
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestContinuous4r < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/continuous4r'
@@ -0,0 +1,411 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+ continuous4r
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1>continuous4r</h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/continuous4r"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/continuous4r" class="numbers">0.0.1</a>
37
+ </div>
38
+ <h2><br/>What is it ?</h2>
39
+
40
+
41
+ <p>Continuous4R is a continuous integration tool for Ruby on Rails. With it, you can
42
+ aggregate reports of the best analysis, quality, tests and deployment tools for
43
+ Ruby and Rails.
44
+ By just defining one Rake task and writing an <span class="caps">XML</span> file describing your project,
45
+ Continuous4R builds for you an entire website in a Maven form.</p>
46
+
47
+
48
+ <h2>Installing</h2>
49
+
50
+
51
+ <p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">continuous4r</span></pre></p>
52
+
53
+
54
+ <h2>The basics</h2>
55
+
56
+
57
+ <h3>Defining the Rake task</h3>
58
+
59
+
60
+ <p>In order to build your project, you need to declare one Rake task. Under the lib/tasks
61
+ directory of your project, create a file named continuous4r.rake :</p>
62
+
63
+
64
+ <p><pre class='syntax'><span class="ident">require</span> <span class="punct">'</span><span class="string">rubygems</span><span class="punct">'</span>
65
+ <span class="ident">require</span> <span class="punct">'</span><span class="string">continuous4r</span><span class="punct">'</span>
66
+
67
+ <span class="comment"># Tache Rake pour la construction du site Continuous4R</span>
68
+ <span class="ident">namespace</span> <span class="symbol">:continuous4r</span> <span class="keyword">do</span>
69
+ <span class="ident">desc</span> <span class="punct">'</span><span class="string">Build Continuous4R Website for the current project</span><span class="punct">'</span>
70
+ <span class="ident">task</span> <span class="symbol">:build</span> <span class="keyword">do</span>
71
+ <span class="constant">Continuous4r</span><span class="punct">.</span><span class="ident">generate_site</span>
72
+ <span class="keyword">end</span>
73
+ <span class="keyword">end</span></pre></p>
74
+
75
+
76
+ <h3>Writing the <span class="caps">XML</span> file describing your project</h3>
77
+
78
+
79
+ <p>This file must be named continuous4r-project.xml, and must be placed at the top
80
+ of your Rails project directory. This file must not have a <span class="caps">XML</span> header (&lt;?xml version&#8230;).
81
+ Here&#8217;s the model of this file :</p>
82
+
83
+
84
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">project</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">PROJECT_NAME</span><span class="punct">&quot;&gt;</span>
85
+ <span class="punct">&lt;</span><span class="tag">description</span><span class="punct">&gt;</span>PROJECT_DESCRIPTION<span class="punct">&lt;/</span><span class="tag">description</span><span class="punct">&gt;</span>
86
+ <span class="punct">&lt;</span><span class="tag">url</span><span class="punct">&gt;</span>PROJECT_URL<span class="punct">&lt;/</span><span class="tag">url</span><span class="punct">&gt;</span>
87
+ <span class="punct">&lt;</span><span class="tag">logo</span><span class="punct">&gt;</span>PROJECT_IMAGE_URI<span class="punct">&lt;/</span><span class="tag">logo</span><span class="punct">&gt;</span>
88
+ <span class="comment">&lt;!-- Describing your project members --&gt;</span>
89
+ <span class="punct">&lt;</span><span class="tag">members</span><span class="punct">&gt;</span>
90
+ <span class="punct">&lt;</span><span class="tag">member</span> <span class="attribute">id</span><span class="punct">=&quot;</span><span class="string">MEMBER_LOGIN</span><span class="punct">&quot;</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">MEMBER_NAME</span><span class="punct">&quot;</span> <span class="attribute">email</span><span class="punct">=&quot;</span><span class="string">MEMBER_EMAIL</span><span class="punct">&quot;</span>
91
+ <span class="attribute">roles</span><span class="punct">=&quot;</span><span class="string">MEMBER_ROLES</span><span class="punct">&quot;</span> <span class="attribute">company</span><span class="punct">=&quot;</span><span class="string">MEMBER_COMPANY_NAME</span><span class="punct">&quot;/&gt;</span>
92
+ ...
93
+ <span class="punct">&lt;/</span><span class="tag">members</span><span class="punct">&gt;</span>
94
+ <span class="punct">&lt;</span><span class="tag">bugtracker</span><span class="punct">&gt;</span>
95
+ <span class="punct">&lt;</span><span class="tag">tracker_type</span><span class="punct">&gt;</span>[Trac|Bugzilla|Mantis|etc...]<span class="punct">&lt;/</span><span class="tag">tracker_type</span><span class="punct">&gt;</span>
96
+ <span class="punct">&lt;</span><span class="tag">tracker_url</span><span class="punct">&gt;</span>BUGTRACKER_URL<span class="punct">&lt;/</span><span class="tag">tracker_url</span><span class="punct">&gt;</span>
97
+ <span class="punct">&lt;</span><span class="tag">tracker_account_create</span><span class="punct">&gt;</span>BUGTRACKER_URL_ACCOUNT_CREATION<span class="punct">&lt;/</span><span class="tag">tracker_account_create</span><span class="punct">&gt;</span>
98
+ <span class="punct">&lt;</span><span class="tag">search</span><span class="punct">&gt;</span>BUGTRACKER_URL_SEARCH_TICKETS<span class="punct">&lt;/</span><span class="tag">search</span><span class="punct">&gt;</span>
99
+ <span class="punct">&lt;</span><span class="tag">url</span><span class="punct">&gt;</span>BUGTRACKER_URL_TICKETS_LIST<span class="punct">&lt;/</span><span class="tag">url</span><span class="punct">&gt;</span>
100
+ <span class="punct">&lt;</span><span class="tag">add</span><span class="punct">&gt;</span>BUGTRACKER_URL_TICKET_ADD<span class="punct">&lt;/</span><span class="tag">add</span><span class="punct">&gt;</span>
101
+ <span class="punct">&lt;/</span><span class="tag">bugtracker</span><span class="punct">&gt;</span>
102
+ <span class="punct">&lt;</span><span class="tag">scm</span><span class="punct">&gt;</span>
103
+ <span class="punct">&lt;</span><span class="tag">repository_type</span><span class="punct">&gt;</span>[svn|cvs]<span class="punct">&lt;/</span><span class="tag">repository_type</span><span class="punct">&gt;</span>
104
+ <span class="punct">&lt;</span><span class="tag">url</span><span class="punct">&gt;</span>SCM_URL<span class="punct">&lt;/</span><span class="tag">url</span><span class="punct">&gt;</span>
105
+ <span class="punct">&lt;</span><span class="tag">view</span><span class="punct">&gt;</span>SCM_VIEWER_URL<span class="punct">&lt;/</span><span class="tag">view</span><span class="punct">&gt;</span>
106
+ <span class="comment">&lt;!-- needed if authentication for access is mandatory --&gt;</span>
107
+ <span class="punct">&lt;</span><span class="tag">user</span><span class="punct">&gt;</span>userlogin<span class="punct">&lt;/</span><span class="tag">user</span><span class="punct">&gt;</span>
108
+ <span class="punct">&lt;</span><span class="tag">password</span><span class="punct">&gt;</span>userpassword<span class="punct">&lt;/</span><span class="tag">password</span><span class="punct">&gt;</span>
109
+ <span class="punct">&lt;/</span><span class="tag">scm</span><span class="punct">&gt;</span>
110
+ <span class="comment">&lt;!-- Gems mandatory for your project --&gt;</span>
111
+ <span class="punct">&lt;</span><span class="tag">gems</span><span class="punct">&gt;</span>
112
+ <span class="punct">&lt;</span><span class="tag">gem</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">GEM_NAME</span><span class="punct">&quot;</span> <span class="attribute">version</span><span class="punct">=&quot;</span><span class="string">GEM_VERSION</span><span class="punct">&quot;/&gt;</span>
113
+ ...
114
+ <span class="punct">&lt;/</span><span class="tag">gems</span><span class="punct">&gt;</span>
115
+ <span class="comment">&lt;!-- Tasks in order to generate reports, described further --&gt;</span>
116
+ <span class="punct">&lt;</span><span class="tag">tasks</span> [<span class="attribute">autoinstall</span><span class="punct">=&quot;</span><span class="string">true</span><span class="punct">&quot;]</span> &lt;!<span class="attribute">--</span> <span class="attribute">activates</span> <span class="attribute">autoinstall</span> <span class="attribute">for</span> <span class="attribute">gems</span> <span class="attribute">needed</span> <span class="attribute">by</span> <span class="attribute">tasks</span> <span class="attribute">--</span><span class="punct">&gt;</span> &gt;
117
+ ...
118
+ <span class="punct">&lt;/</span><span class="tag">tasks</span><span class="punct">&gt;</span>
119
+ <span class="punct">&lt;/</span><span class="tag">project</span><span class="punct">&gt;</span></pre></p>
120
+
121
+
122
+ <h2>Defining tasks</h2>
123
+
124
+
125
+ <h3>Changelog task</h3>
126
+
127
+
128
+ <p>Builds a report of the last modifications on the <span class="caps">SCM</span> repository. Only Subversion is supported
129
+ at the time.</p>
130
+
131
+
132
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">changelog</span><span class="punct">&quot;/&gt;</span>
133
+ </pre></p>
134
+
135
+
136
+ <p><a href="changelog.png" target="_blank">Sample</a></p>
137
+
138
+
139
+ <h3>Stats task</h3>
140
+
141
+
142
+ <p>Generates a report of the Rails statistics on your project.</p>
143
+
144
+
145
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">stats</span><span class="punct">&quot;&gt;</span>
146
+ <span class="punct">&lt;</span><span class="tag">description</span><span class="punct">&gt;</span>Provides statistics on your Rails code<span class="punct">&lt;/</span><span class="tag">description</span><span class="punct">&gt;</span>
147
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span></pre></p>
148
+
149
+
150
+ <p><a href="stats.png" target="_blank">Sample</a></p>
151
+
152
+
153
+ <h3>Dcov task</h3>
154
+
155
+
156
+ <p>Generates a report on the rdoc coverage of your Ruby code. The parts
157
+ which are not covered are colored in red.<br/>
158
+ The <strong>pattern</strong> param enables you to select the Ruby code to control.<br/>
159
+ The <strong>report</strong> param is the path where Continuous4R can find the dcov
160
+ original report (due to a bug in dcov).</p>
161
+
162
+
163
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">dcov</span><span class="punct">&quot;&gt;</span>
164
+ <span class="punct">&lt;</span><span class="tag">description</span><span class="punct">&gt;</span>Rdoc coverage analysis report<span class="punct">&lt;/</span><span class="tag">description</span><span class="punct">&gt;</span>
165
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
166
+ <span class="punct">&lt;</span><span class="tag">pattern</span> <span class="attribute">value</span><span class="punct">=&quot;</span><span class="string">app/**/*.rb</span><span class="punct">&quot;/&gt;</span>
167
+ <span class="punct">&lt;</span><span class="tag">report</span> <span class="attribute">path</span><span class="punct">=&quot;</span><span class="string">coverage.html</span><span class="punct">&quot;/&gt;</span>
168
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
169
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span></pre></p>
170
+
171
+
172
+ <p><a href="dcov.png" target="_blank">Sample</a></p>
173
+
174
+
175
+ <h3>Rcov task</h3>
176
+
177
+
178
+ <p>Builds a report on the coverage of your tests over your Ruby code.</p>
179
+
180
+
181
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">rcov</span><span class="punct">&quot;&gt;</span>
182
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
183
+ <span class="comment">&lt;!-- file which loads all the necessary test files (based on requires) --&gt;</span>
184
+ <span class="punct">&lt;</span><span class="tag">file</span> <span class="attribute">path</span><span class="punct">=&quot;</span><span class="string">test/rcov_test_all.rb</span><span class="punct">&quot;/&gt;</span>
185
+ <span class="comment">&lt;!-- path where to find the reports generated by rcov --&gt;</span>
186
+ <span class="punct">&lt;</span><span class="tag">reports</span> <span class="attribute">path</span><span class="punct">=&quot;</span><span class="string">coverage</span><span class="punct">&quot;/&gt;</span>
187
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
188
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span>
189
+ </pre></p>
190
+
191
+
192
+ <p><a href="rcov.png" target="_blank">Sample</a></p>
193
+
194
+
195
+ <h3>Rdoc task</h3>
196
+
197
+
198
+ <p>Generates a report of the rdoc generation, and gives access to the rdoc.</p>
199
+
200
+
201
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">rdoc</span><span class="punct">&quot;/&gt;</span>
202
+ </pre></p>
203
+
204
+
205
+ <p><a href="rdoc.png" target="_blank">Sample</a></p>
206
+
207
+
208
+ <h3>Flog task</h3>
209
+
210
+
211
+ <p><a href="http://ruby.sadi.st/Flog.html" target="_blank">Flog</a> is a tool which
212
+ provides statistics of your Ruby code&#8217;s complexity. This task generates an <span class="caps">HTML</span>
213
+ report of these statistics.</p>
214
+
215
+
216
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">flog</span><span class="punct">&quot;/&gt;</span>
217
+ </pre></p>
218
+
219
+
220
+ <p><a href="flog.png" target="_blank">Sample</a></p>
221
+
222
+
223
+ <h3>Kwala task</h3>
224
+
225
+
226
+ <p><a href="http://kwala.rubyforge.org" target="_blank">Kwala</a> is a continuous integration
227
+ tool which gathers informations of the quality and metrics on your project. This
228
+ task integrates the reports produced by kwala to the site.</p>
229
+
230
+
231
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">kwala</span><span class="punct">&quot;&gt;</span>
232
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
233
+ <span class="comment">&lt;!-- set of actions understood by kwala --&gt;</span>
234
+ <span class="punct">&lt;</span><span class="tag">actions</span><span class="punct">&gt;</span>
235
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>loc<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
236
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>syntax_check<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
237
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>formatting<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
238
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>code_duplication<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
239
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>cyclomatic<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
240
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>unit_test<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
241
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>comment_check<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
242
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>requires<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
243
+ <span class="punct">&lt;</span><span class="tag">action</span><span class="punct">&gt;</span>cycles<span class="punct">&lt;/</span><span class="tag">action</span><span class="punct">&gt;</span>
244
+ <span class="punct">&lt;/</span><span class="tag">actions</span><span class="punct">&gt;</span>
245
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
246
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span>
247
+ </pre></p>
248
+
249
+
250
+ <p><a href="kwala.png" target="_blank">Sample</a></p>
251
+
252
+
253
+ <h3>Railroad task</h3>
254
+
255
+
256
+ <p>Railroad is a tool to generate graphs of your models and/or your controllers. This
257
+ task generates your graphs and presents them on a <span class="caps">HTML</span> report. This task is not
258
+ compatible with CruiseControl.rb.</p>
259
+
260
+
261
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">railroad</span><span class="punct">&quot;&gt;</span>
262
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
263
+ <span class="punct">&lt;</span><span class="tag">generate</span> <span class="attribute">value</span><span class="punct">=&quot;</span><span class="string">controllers|models|all</span><span class="punct">&quot;/&gt;</span>
264
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
265
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span>
266
+ </pre></p>
267
+
268
+
269
+ <h3>Httperf task</h3>
270
+
271
+
272
+ <p><a href="http://www.hpl.hp.com/research/linux/httperf/" target="_blank">Httperf</a>
273
+ is a <span class="caps">HTTP</span> stress tool which generates text reports for a really important number
274
+ of statistics. This task generates a <span class="caps">HTML</span> report for these statistics.</p>
275
+
276
+
277
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">httperf</span><span class="punct">&quot;&gt;</span>
278
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
279
+ <span class="comment">&lt;!-- set of ports which will match Mongrel instances (all managed within) --&gt;</span>
280
+ <span class="punct">&lt;</span><span class="tag">ports</span><span class="punct">&gt;</span>
281
+ <span class="punct">&lt;</span><span class="tag">port</span><span class="punct">&gt;</span>3334<span class="punct">&lt;/</span><span class="tag">port</span><span class="punct">&gt;</span>
282
+ <span class="punct">&lt;/</span><span class="tag">ports</span><span class="punct">&gt;</span>
283
+ <span class="punct">&lt;</span><span class="tag">processes</span><span class="punct">&gt;</span>
284
+ <span class="punct">&lt;</span><span class="tag">process</span> <span class="attribute">port</span><span class="punct">=&quot;</span><span class="string">3334</span><span class="punct">&quot;</span> <span class="attribute">url</span><span class="punct">=&quot;</span><span class="string">/controller/action?param=value</span><span class="punct">&quot;</span>
285
+ <span class="attribute">requests</span><span class="punct">=&quot;</span><span class="string">50</span><span class="punct">&quot;</span> <span class="attribute">timeout</span><span class="punct">=&quot;</span><span class="string">2</span><span class="punct">&quot;&gt;</span>
286
+ <span class="punct">&lt;</span><span class="tag">description</span><span class="punct">&gt;</span>Stressing application with 50 requests (URL http://127.0.0.1:3334/controller/action?param=value),
287
+ with a timeout set to 2 seconds.<span class="punct">&lt;/</span><span class="tag">description</span><span class="punct">&gt;</span>
288
+ <span class="punct">&lt;/</span><span class="tag">process</span><span class="punct">&gt;</span>
289
+ <span class="punct">&lt;</span><span class="tag">process</span> <span class="attribute">port</span><span class="punct">=&quot;</span><span class="string">3334</span><span class="punct">&quot;</span> <span class="attribute">url</span><span class="punct">=&quot;</span><span class="string">/controller/action?param=value</span><span class="punct">&quot;</span>
290
+ <span class="attribute">sessions</span><span class="punct">=&quot;</span><span class="string">10,5,2</span><span class="punct">&quot;</span> <span class="attribute">rate</span><span class="punct">=&quot;</span><span class="string">5</span><span class="punct">&quot;</span> <span class="attribute">timeout</span><span class="punct">=&quot;</span><span class="string">3</span><span class="punct">&quot;&gt;</span>
291
+ <span class="punct">&lt;</span><span class="tag">description</span><span class="punct">&gt;</span>Stressing application with 10 sessions (URL http://127.0.0.1:3334/controller/action?param=value),
292
+ with a rate of 5 sessions per second. Each session consists
293
+ of 5 calls that are spaced out by 2 seconds. Timeout is set to 3 seconds.<span class="punct">&lt;/</span><span class="tag">description</span><span class="punct">&gt;</span>
294
+ <span class="punct">&lt;/</span><span class="tag">process</span><span class="punct">&gt;</span>
295
+ <span class="punct">&lt;/</span><span class="tag">processes</span><span class="punct">&gt;</span>
296
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
297
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span>
298
+ </pre></p>
299
+
300
+
301
+ <p><a href="httperf.png" target="_blank">Sample</a></p>
302
+
303
+
304
+ <h3>Tests task</h3>
305
+
306
+
307
+ <p>Generates a report for the results of your tests.</p>
308
+
309
+
310
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">tests</span><span class="punct">&quot;&gt;</span>
311
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
312
+ <span class="punct">&lt;</span><span class="tag">runner</span> <span class="attribute">type</span><span class="punct">=&quot;</span><span class="string">units</span><span class="punct">&quot;/&gt;</span><span class="comment">&lt;!-- equivalent to rake test:units --&gt;</span>
313
+ <span class="punct">&lt;</span><span class="tag">runner</span> <span class="attribute">type</span><span class="punct">=&quot;</span><span class="string">functionals</span><span class="punct">&quot;/&gt;</span><span class="comment">&lt;!-- equivalent to rake test:functionals --&gt;</span>
314
+ <span class="punct">&lt;</span><span class="tag">runner</span> <span class="attribute">type</span><span class="punct">=&quot;</span><span class="string">integration</span><span class="punct">&quot;/&gt;</span><span class="comment">&lt;!-- equivalent to rake test:integration --&gt;</span>
315
+ <span class="punct">&lt;</span><span class="tag">runner</span> <span class="attribute">type</span><span class="punct">=&quot;</span><span class="string">rspec</span><span class="punct">&quot;/&gt;</span><span class="comment">&lt;!-- equivalent to rake spec --&gt;</span>
316
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
317
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span>
318
+ </pre></p>
319
+
320
+
321
+ <p><a href="tests.png" target="_blank">Sample</a></p>
322
+
323
+
324
+ <h3>ZenTest task</h3>
325
+
326
+
327
+ <p>ZenTest is a tool which generates Ruby code to show your test leaks. This task generates
328
+ a report to show where these leaks are.</p>
329
+
330
+
331
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">zentest</span><span class="punct">&quot;&gt;</span>
332
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
333
+ <span class="comment">&lt;!-- runs an analysis of the efficiency/exhaustiveness of the HomeControllerTest
334
+ test class against the HomeController class --&gt;</span>
335
+ <span class="punct">&lt;</span><span class="tag">runner</span> <span class="attribute">class</span><span class="punct">=&quot;</span><span class="string">app/controllers/home_controller.rb</span><span class="punct">&quot;</span> <span class="attribute">test</span><span class="punct">=&quot;</span><span class="string">test/functional/home_controller_test.rb</span><span class="punct">&quot;/&gt;</span>
336
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
337
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span>
338
+ </pre></p>
339
+
340
+
341
+ <p><a href="zentest.png" target="_blank">Sample</a></p>
342
+
343
+
344
+ <h3>Capistrano task</h3>
345
+
346
+
347
+ <p>Generates reports for you Capistrano deployments.</p>
348
+
349
+
350
+ <p><pre class='syntax'><span class="punct">&lt;</span><span class="tag">task</span> <span class="attribute">name</span><span class="punct">=&quot;</span><span class="string">capistrano</span><span class="punct">&quot;&gt;</span>
351
+ <span class="comment">&lt;!-- set of runners for your Capistrano deployments --&gt;</span>
352
+ <span class="punct">&lt;</span><span class="tag">params</span><span class="punct">&gt;</span>
353
+ <span class="punct">&lt;</span><span class="tag">runner</span> <span class="attribute">task</span><span class="punct">=&quot;</span><span class="string">deploy</span><span class="punct">&quot;/&gt;</span><span class="comment">&lt;!-- equivalent to 'cap deploy' --&gt;</span>
354
+ <span class="punct">&lt;/</span><span class="tag">params</span><span class="punct">&gt;</span>
355
+ <span class="punct">&lt;/</span><span class="tag">task</span><span class="punct">&gt;</span>
356
+ </pre></p>
357
+
358
+
359
+ <p><a href="capistrano.png" target="_blank">Sample</a></p>
360
+
361
+
362
+ <h2>Demonstration of usage</h2>
363
+
364
+
365
+ <p>When the <span class="caps">XML</span> file describing your project is written, you can build the Continuous4R
366
+ website by typing :</p>
367
+
368
+
369
+ <p><pre class='syntax'>rake continuous4r:build</pre></p>
370
+
371
+
372
+ <p>Now you can view the website generated for your project by lauching <strong>[project_folder]/continuous4r_build/index.html</strong>.</p>
373
+
374
+
375
+ <h2>Integration within CruiseControl.rb</h2>
376
+
377
+
378
+ <p>Integration within CruiseControl.rb is quite simple. You just need to configure your
379
+ project to build task &#8220;rake continuous4r:build&#8221;. When the build is done, go to the
380
+ detail page of the build, and click on the link below &#8220;Custom Build Artifacts&#8221;.</p>
381
+
382
+
383
+ <h2>Help needed</h2>
384
+
385
+
386
+ <p>This version 0.0.1 is a beta version of Continuous4r. I&#8217;m searching for volunteers
387
+ to work on this tool. With a more substancial amount of quality and work, this tool
388
+ could be <span class="caps">REALLY GREAT</span>.</p>
389
+
390
+
391
+ <h2>License</h2>
392
+
393
+
394
+ <p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
395
+
396
+
397
+ <h2>Contact</h2>
398
+
399
+
400
+ <p>Comments are welcome. Send an email to <a href="mailto:duboisv@hotmail.com">Vincent Dubois</a>,
401
+ or post a message on the <a href="http://rubyforge.org/forum/forum.php?forum_id=19721" target="_blank">forum</a>.</p>
402
+ <p class="coda">
403
+ <a href="duboisv@hotmail.com">Vincent Dubois</a>, 1st January 2008<br>
404
+ Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
405
+ </p>
406
+ </div>
407
+
408
+ <!-- insert site tracking codes here, like Google Urchin -->
409
+
410
+ </body>
411
+ </html>