Squeak 4.4 Ulam Spiral is finally ready to be born. I semi-volunteered to be its release manager, and I’d like to look back over the last six months and talk a bit about what’s happened.

The trunk model continues to pay its way, making for an easy way for people to track and vet commits and proposals. One huge improvement in 4.4 is infrastructural: we now have a [old link: http://squeakci.org] Jenkins build server running all tests. And of course if you have something that can run jobs after every commit, you can chain them: the CI server now produces [old link: http://squeakci.org/job/SqueakTrunk/lastSuccessfulBuild/] up-to-date images that one can immediately use wherever. Dale Henrich’s filetree integration with Travis CI uses this.

One wrinkle in the running of tests is this: Smalltalk has a strong tradition of working “in-image” – your IDE and the thing you’re building live in the same environment. This has benefits and costs, but for the purpose of CI the interesting part is the cost. Sometimes, tests aren’t written perfectly. Sometimes they leave cruft lying around, or alter their environment in some way. Even with a perfect test suite, the changes file – a bit like a database’s transaction log – will be touched. Were this Ruby, say, we’d just take the base Ruby environment (run ruby), add our tests ( require things), run them, output some results, and throw the environment away. To duplicate this, we update the image to the latest version (this is analogous to checking out your HEAD and require ing your gems), copy the image, and run the tests in the copy. This way we have a pristine image, and can still get test results. At the end of the test run, we discard the tainted test image. In other words, in Smalltalk we have to do explicitly (in this case) what most language/environments do implicitly.

So what have I learned about being a release manager? A few things: your job’s to get a release out the door. It’s not your job to do everything. When things seem to be slowing down, gently encourage folk by perhaps posting a progress report and a list of things to do next. Keep people informed as to what’s going on: improvements in infrastructure, ticking boxes on the todo list, and so on.