= DamageControl - a cross platform continuous integration server. = Feature overview * Builds projects of any kind: * Java * .NET * Ruby * C/C++ * (This is getting boring, you can build projects in any language) * Supports any kind of build tools: * Ant * Nant * Make * Rake * Maven * Bash/Sh/Bat scripts * (You get the picture) * Several notification channels * Email * IRC * RSS * Growl * Supports all SCMs supported by RSCM: * CVS * Subversion * Perforce * Monotone * ClearCase * (See http://rscm.codehaus.org for details) * Trend graphs and statistics (soming soon) * Web interface based on RoR (http://www.rubyonrails.org/) * No funny config files, all web based configuration (you can use config files if you wish) * Colourised HTML diffs. * Integration with several SCM web front-ends. * Integration with several issue trackers. * Uses UTC times according to the SCM server's clock, not the machine running RSCM. No NTP needed! == DamageControl Server DamageControl ships with a web app based on Ruby On Rails (which you currently have to install separately). To launch: ruby script/server You also need to launch (in a separate console) the DamageControl daemon process: ruby -Ilib lib/damagecontrol/server.rb The daemon process is the core of DamageContriol that performs SCM access and executes builds. The web app communicates with this process over Drb to display results. The reason why two processes are needed is due to the fact that Dir.chdir may happen in various threads, which would confuse the webapp if they ran in the same Ruby process. We tried with forking, but this is not supported on Windows. We may support a fork-based one-process alternative for Linux/Cygwin in the future. Once the two servers are started, you can access the web app on: http://localhost:4712/ == Colourised HTML diffs The web interface will present changesets as colourised diffs. Even for SCMs you never thought would support that kind of feature. (As long as there is an RSCM plugin for it). == RSS Support The DamageControl daemon can generate RSS feeds for all supported SCMs. The RSS feeds will have one item per changeset. Each RSS item's description contains the changeset's commit message, optionally with HTML links to issue/bug tracker issues (if detected in the changeset's commit message). The item's description will also contain a list of all the modified files, optionally with HTML links to a diff page in an SCM web front-end. == Supported Issue trackers DamageControl can recognise bug/issue numbers (in commit messages) for a number of popular issue tracking systems. It converts the SCM commit message to HTML with links to the issues mentioned in the commit message. * Bugzilla - http://www.bugzilla.org/ * JIRA - http://www.atlassian.com/software/jira/ * RubyForge - http://rubyforge.org/ * Scarab - http://scarab.tigris.org/ * SourceForge - http://sourceforge.net/ * Trac - http://www.edgewall.com/trac/ Planned: * RT - http://fsck.com/projects/rt/ == SCM web front-ends DamageControl's web interface features colourised diffs for all changes in a changeset (for any supported SCM). It can also generate links to individual diff pages in other SCM web frontends, provided it's compatible with the given project's SCM: * Fisheye - http://www.cenqua.com/fisheye/ * ViewCVS - http://viewcvs.sourceforge.net/ * Trac - http://www.edgewall.com/trac/ Planned: * Chora - http://horde.org/chora/ = Extending DamageControl == SourceControl See http://rscm.rubyforge.org for instructions about how to add support for new SCMs == Build Publishers If you have an idea for a new publisher it's very easy to hook in. Just drop your class into the lib/publisher directory. Your publisher class must implement the following methods: # This method will be called when a build is complete. def publish(build) ... end # This is the display name of the publisher def name ... end You must also make sure your publisher class registers with the Project class. Put this in the class body: Project.available_publisher_classes << self If your publisher requires some sort of configuration, just make an attr_accessor for each configuration option. DamageControl will automatically pick up your publisher, render it under the Publishers tab on the project configuration page. If you want to share your publisher with the rest of the world, just upload it to DamageControl's JIRA. If you include a unit test for it, we'll be extra happy.