The Culture ain't It

So let’s imagine we want to run a CI server. And we want it to work with both githubs and gits and subversions and pwn everything. We skip CruiseControl.rb (after all it’s not awares of githubs right?) and decide to try out the new kid on the block. First of all, we immediately find out that:

gem sources -a http://gems.github.com
sudo gem install foca-integrity

Which in realistic parlance means there is no official gem, no official Rubyforge project - who hell needs Rubyforge now? Ok, on to business.

After 10 minutes of chugging, my Quad G5 finally manages to install all the 33 (it’s not a joke! 33) gems (of course they contain all the latest versions of datamapper and do-boo and do-foo and supermodular and whatnot - because you know, who the hell needs ActiveRecord anymore? we all do new modern stuff right? get out of the ghetto already!)

integrity install ~/integrity

The script complains that we do not have the right version of rspec. I mean, it’s ok that it did not pull it with the other 33 gems, might have been 34 - who cares? Of course there is no rspec-1.1.11 anywhere, because we’re on githubs and there are no official releases anymore. We’re all hippies and stuff.

integrity install ~/integrity

The script complains that it wants cucumber. Now this is downright insluting. Look, I do not need to have all the latest and greatest BDD megatools known to the universe to just run the application. I will never, ever need Cucumber I swear! Ok, let’s proceed.

 Installing RDoc documentation for cucumber-0.1.16
 /usr/local/lib/ruby/1.8/rdoc/parsers/parse_rb.rb:122:
 [BUG] Segmentation fault

Now, this has nothing to do with integrity itself, but cmon - before making gems check that your docs build. I know rdoc is not stellar, and this is probably a bug in Ruby itself, but still - latest and greatest has it’s specificities.

Ok, swell. After bypassing rdoc with --no-rdoc option cucumber finally installs and we can install the app itself. Gee. But clearly, depending on the universe of bleeding-edge testing gems that are only on github is a massive FAIL. Excuse me but this is just so.

Now… the app says that to enable email notifications I need another gem from githubs. Y’know folks, probably 99 percent of people installing a CI server would want emails on broken builds, why I need a gem 35? Well, nevermind… another gem install.

Oh wait we also need thin (this is recommended). Another gem. Let’s get rolling. Just add the repo over here…

repo-setup.png

Wait a minute, this is for githubs and stuff - why should I copy the repo URL into the interface if it knows more about githubs than I would ever to know in my lifetime?

Anyways, let’s build.

oops-dm.png

Oops.

Folks, these are really cool. Swell. Trust me. Besides, watching your fork queue on the same githubs might work well too.

Note: - I am not bashing on Datamapper specifically, I’m sure it’s got it’s pros and cons and I sure know that it has a migration engine. However, when you transform your source control into your download site you better know what you are doing and which state your build has.

To put the final note to the piece, we proxy our external server to my box where Integrity is running (just to try out the setup). 503 Service Unavailable

 review:~ julik$ curl http://xx.xx.xx.xx:8910/
 curl: (7) couldn't connect to host

So the default install is not routable from the outside (either due to port number being too high or to the defaults of thin). If there were an art to choosing bad defaults - this is a masterpiece.

Here ends my adventure with Integrity. I’m off to figure out how to uninstall all this crap that found it’s way onto my system for this entertaining user experience moment.

P.S. Just for comparison, on the same machine:

  review:tmp julik$ git clone git://github.com/thoughtworks/cruisecontrol.rb.git
  Initialized empty Git repository in /private/tmp/cruisecontrol.rb/.git/
  remote: Counting objects: 8917, done.
  remote: Compressing objects: 100% (3598/3598), done.
  remote: Total 8917 (delta 5090), reused 8688 (delta 4940)
  Receiving objects: 100% (8917/8917), 9.97 MiB | 26 KiB/s, done.
  Resolving deltas: 100% (5090/5090), done.
  review:tmp julik$ cd cruisecontrol.rb/
  review:cruisecontrol.rb julik$ rake
  318 tests, 765 assertions, 0 failures, 0 errors
  39 tests, 174 assertions, 0 failures, 0 errors
  22 tests, 43 assertions, 0 failures, 0 errors

Here’s the same done right.