Continuum is a lightweight continuous integration server for Ruby. It runs on Sinatra and can run RSpec test suites on Git repositories. It is inspired by Continuity, but strives to be simpler and prettier.
Installing Continuum is fairly straightforward:
$ git clone https://github.com/flipsasser/continuum $ cd continuum
TODO: Ideally this will turn into
$ gem install humiliation $ cd RAILS_ROOT $ humiliate
... which might generate a .humiliate file and produce a repository they can push to Heroku or its friends. Not 100% sure on that one.
At this point, you can either run it locally:
$ rackup config.ru
... or move it to Heroku:
$ heroku create my-ci-server $ git push heroku master
Wowsa! Done! Now open up http://localhost:9292/ (or http://my-ci-server.heroku.com if you opted for Heroku) and try adding a few Git repos. Simple! Fun! Easy!
Continuum is configured similarly to Continuity - in an init.rb file you store in the app's root. The default init.rb will work with Heroku, or just about any other server where you have write-access to the app's directory:
Continuum.configure do |config| config.storage = "tmp" config.workers = 1 end
Looks cool, right? Until you realize what that's really saying is:
Continuum.storage = "tmp" Continuum.workers = 1
... because it's simple, remember?
Continuum Configuration Options
Continuum supports a few simple configuration options. They are:
Tells Continuum where to stash builds and pids. Defaults to app_root/tmp, which will work on most platforms (including Heroku). Pass it a relative path (like
tmp/continuum/storage) to store in
app_root/tmp/continuum/store, or a full path to specify elsewhere in the system (e.g.
Tells Continuum to keep x workers running at a time. Defaults to 1, and it's probably all you'll need at the outset. Workers are just forks of Continuum that run the latest build.
App-specific Configuration Options
Continuum also works off of a .continuum file in your app's root, which is a YAML-formatted set of overrides. You can specify all kinds of handy-dandy things there, and Continuum will do its best to guess the rest. For example!:
--- suite: rspec command: RAILS_ENV=test rake db:test:prepare && rake spec db: "pgsql://my_app_test"
This will tell Continuum to run this app's Rspec suite, and use command-line Rake tasks (instead of attempting to run them directly using Rspec). It also specifies testing with a PostgreSQL database instead of the default in-memory SQLite3 database. Here are all of the overrides you can add to .continuum:
HAHAHAHA! TODO BITCHES!
Continuum was built on a four-person project, where someone wasn't running
rake spec before they commit.
So with that in mind, Continuum builds EVERY SINGLE COMMIT on the repository. More importantly, it keeps track
of failing builds - and the user who commits them.