# Continuous Integration ## Document Status This specification is a draft. ## Abstract ### Features * Minimalistic * No locking * Easy to use and setup * Git-centric * Distributed * Client/Server ### Terminology * Collection of steps: Formula? * Unit of a Formula: Step? * Client: ? * Server: ? ### Formula * Conditions (if this or that step succeeded do this and that) * Prebuilt Steps (i.e. `InstallLithiumCoreStep`) #### Typical Steps **Continuous** * Download project * Download dependencies (cached?) * Lithium Core * Lithium Plugins * Git Submodules * Tarballs * Setup dependencies * Setup connections * Run all tests * Run syntax check * Gather metrics through tools * Cleanup **Nightly** * Package * Upload package ### Client * Commandline ### Server * Exposes REST Interface * Web GUI ### Communication between Client and Server JSON over HTTP. * Client registers at server * Client asks for a job * Client wants to download recipe * (Client executes recipe) * Client reports back * Client says goodbye ## Resources ### Similar Projects * [Buildbot ](http://buildbot.net/trac) * [Chromium Buildbot](http://build.chromium.org/buildbot/waterfall/waterfall) * [CI Joe](http://github.com/defunkt/cijoe) * [Sismo ](http://ci.symfony-project.org/) * [Lithium Lab](http://rad-dev.org/li3_lab) * [Integrity ](http://integrityapp.com/) ### Tools * [Mess Detector](http://phpmd.org/) * [Dead Code Detector](http://github.com/sebastianbergmann/phpdcd) * [Copy and Paste Detector](http://github.com/sebastianbergmann/phpcpd) * [Code Metrics - ohcount](http://sourceforge.net/projects/ohcount/) * [Code Metrics - phploc](http://github.com/sebastianbergmann/phploc) * [Code Metrics - pdepend](http://pdepend.org/) ### Reading * [Martin Fowler on CI](http://www.martinfowler.com/articles/continuousIntegration.html) * [QA at Mozilla](http://quality.mozilla.org/documents) * [More interesting links on the Ceberus Site](http://cerberus.rubyforge.org/in_the_web.html)