home / specs / ci
# 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)