The Automaton

The staging environment for the release automation project (aka "bootstrap") is up and running. This includes a CVS mirror, so everything from tagging to build to updates (with verification each step along the way) can be done without affecting the production environment.

The setup/teardown of the environment is scripted out, and bootstrap can now get through each individual release step and produce useful output (well, using the patches in my private tree).

The first big deliverable of this system is to automate the currently human-driven tasks we do as part of the Firefox and Thunderbird release process, and it is almost there. The next phase is more about what kinds of improvements and increased reliability/reproducability can be brought into the process, so I will have more to say on that later, once my patches have all landed and we try actually using this thing.

I've been using this project as an opportunity to try out some more interesting tools, the workflow I've been using is:

  • keep a private repo in SVK on my laptop, sync'd from Mozilla CVS
  • push to personal Subversion repo when ready for integration testing
  • Buildbot on my laptop runs unit tests automatically when it sees the Subversion checkin
  • pull changes from Subversion to staging environment and run staged release

When I am ready to post a patch to Bugzilla for review, I do it via "svk diff" against the Mozilla CVS version. Admittedly a lot of overhead for a small project, but it being so simple means I can simply drop one of these tools if something goes horribly wrong, and not suffer a huge setback.

Overall I like this workflow a lot, although I am thinking that next time around I will try another version control system (most likely Mercurial) instead of the SVK/SVN combo. I'd really like to try some newer features like having a patch queue, and it'd be excellent to write a few extensions to do things like pull a patch from Bugzilla and stick into the patch queue automatically (I do that now with "curl | patch", but it'd be nicer to just "hg bzpatch 1234" or something like that, and have it go into the queue).

Vlad is currently importing the Mozilla CVS trunk (using cvsps and hg-cvs-import) into a testing Mercurial repo, which makes deciding which system to try next an easier decision for me.

There is nothing wrong with SVK/SVN combo and in fact I like it quite a bit, but I really want to get away from the need to send patches around before they are ready for review; I'd rather just give someone a URL to my repo to pull from so we can stay integrated.