Today I took my name back and got Armstrong tests running on Travis CI. Travis CI is the distributed, community run continuous integration server that the Ruby community has put together. It lets you do all manner of fun things, like testing in dozens of different Ruby version configurations.
You’re probably wondering what Armstrong is doing there with all of this
talk of Ruby. No, I didn’t rewrite Armstrong in Rails last night. No, I
didn’t convert all of our
fabfiles over to
Rakefiles either. Instead, I
subverted it from within.
Travis CI uses a
.travis.yml file for all of its configuration. There are
two key fields that it gives you that let you do fun things with it:
before_scripts runs before anything starts. It’s like setup in the xUnit
world, but for your whole environment. Each of the Armstrong components ships
requirements/dev.txt file, so I tell Travis to do a
pip install -r of
that during setup. That’s right, Travis CI has pip installed!
Next, I’ve set the
script to use our test runner,
fab test and we’re set.
I had to add a few environment variables to turn off our coverage
reports—they don’t provide much value when there’s no one there to view
them—and we don’t need to do a re-install like we do on a local environment.
You can see this in action by checking out the current build status for the armstrong.core.arm_wells component here. Here’s the .travis.yml file’s contents:
rvm: - 1.9.3 before_script: - sudo pip install -r requirements/dev.txt - sudo pip install . env: - SKIP_COVERAGE=1 SKIP_INSTALL=1 script: - fab test notifications: email: false irc: - "irc.freenode.net#armstrongcms"
There’s work happening to bring native Python support. Native support means being able to test against multiple versions and such. Be sure to check out the #travis channel on Freenode if you’re interested in helping out.