I wanted to play the field of continuous integration tools a little bit more, so I finally gave Integrity a go. Its promise of being lightweight sure was tempting.

It's a small Sinatra app, and therefore should've been easy to set up using Passenger. The Integrity team recommends using nginx and Thin. Though I'm rather fond of nginx, I don't see any point using a different setup just for my CI system.

Getting it up and running is rather straight-forward. You create your local Integrity template directory using integrity install /path. For this to work with Passenger you also need a directory public in that directory, so if you create that you can just throw the usual Passenger virtual host block into your Apache configuration, the document root pointing to the freshly created public directory, and you're good to go. In the current master, there's already a fix for this issue, and running integrity install will create the public directory for you.

I have some gripes with Integrity though, one of them being that configuring notifiers for projects currently seems to be broken. It's sort of a big deal to me, because continuous integration lives from the team receiving notifications.

But otherwise, do give it a go, it's pretty slim and pretty slick too, though it doesn't yet have asynchronous building. It needs some sort a hook, e.g. a GitHub one to run automatically. There's also a demo available for your viewing pleasure.

Update: The issue with notification configuration not being saved seems to be resolved in the current master. It's not perfectly fixed, but at least now I can have Integrity notify me through Twitter. So if you need to, fetch the master, and build your own gem. Remember to rename it to 'foca-integrity' in the Rakefile's Jeweler configuration, otherwise it won't really catch on.

For a new project I wanted to try some new things, the moment just seemed right, so let me just give you a quick round-up.

  • Machinist - Now I liked factory_girl, but after looking into Machinist it still seemed too tedious. It took me a while to replace the fixtures with Machinist, but it was totally worth it.

  • resource_controller - Way to DRY out your controllers. It abstracts away a lot of the tasks you repeat in RESTful controllers, but in a way that doesn't feel like it's totally out of your hand. Just the right amount of abstraction.

  • Cucumber - When I first saw the PeepCode on RSpec user stories I was a little bummed, but that was mainly because the PeepCode itself didn't really show the power of stories for integration tests. Quite the opposite, it used the stories to directly work with the model, and to test validations. Not really what I fancied, I already had a tool for that.

    But Cucumber, where have you been all my life? I started working with it today, and just after a few hours it already felt so natural to put the things you expect from your application on the user level into sentences, and to write or reuse the according steps. If you haven't already, do give it a go. It's been the missing tool for integration testing in my toolbox, and I'm in love with it already.

    It integrates nicely with a lot of things, for me right now, Webrat is sufficient, but if you fancy it, use Selenium, Celerity, Mechanize or whatnot.

In other news, I gave actsassolr a new home, it's not fancy yet, but at least there's an up-to-date RDoc available.

Personally, I'm a big fan of Webistrano, a neat web app that sits on top of Capistrano, adds some nice features, and generally makes the deployment process a little bit easier.

But I didn't want to have to be in the web application all the time to monitor the deployment's progress. Plus, I wanted to have a project to play around with RubyCocoa. Webistrano comes with an XML-based REST-API. So why not throw all these together, and build a nice application around it?

I originally started working on it last April (I think), using plain Ruby APIs, but quickly discovered that they just don't match with Cocoa's view of the world, especially when it comes to asynchronous things. It's still not a perfect match, there are some glitches, but the current state works out pretty well.


Enough blabber, in the spirit of Getting Things Done, I'm officially announcing the first public release of Macistrano. It allows you to run and monitor deployments from the comfort of your desktop. That's pretty much all it does, but the goal is to make it do that perfectly of course.

If you're using Webistrano (which you should, go and install it asap), give a Macistrano a whirl, and let me know how you like it. Head over to the project's page for more information and download. Check the GitHub project page if you're interested in the source code.

Tags: macosx, ruby