Being a release manager for khmer

Written by: C. Titus Brown

Primary Source: Living in an Ivory Basement

We just released khmer v1.1, a minor version update from khmer v1.0.1 (minor version update:220 commits, 370 files changed.

Cancel that — _I_ just released khmer, because I’m the release manager for v1.1!

As part of an effort to find holes in our documentation, “surface” any problematic assumptions we’re making, and generally increase the bus factor of the khmer project, we have been switching up the release manager for every 1.0+ release. The first release manager (for v1.0) was Michael Crusoe (@biocrusoe); the second (for v1.0.1) was (@luizirber); and I’m the third, for v1.1.

Each time through, we make our release process docs more explicit and more correct. There’s really no better way to do it; each RM comes with a different background and a different skillset, so by the time four or five people have cut a release, we should have ironed out any wrinkles.

Roughly speaking, our release process consists of:

  1. Building a release candidate
  2. Testing the release candidate in multiple ways using virtualenvs on a Linux box.
  3. Pushing to the test PyPI server and doing install tests in a virtualenv.
  4. Doing multi-system tests on the BaTLab, and running our acceptance tests on Amazon Web Services.
  5. If that all passes for a release candidate, cutting the final release!

There are about a dozen steps in all, with 40-50 command line steps. It’s a bit complicated but it’s all codified in asomewhat cockamamie semi-automated copy-and-paste doc that actually works pretty well.

For me, the big challenge was getting the BaTLab multi-platform install tests to run; this required about 30 minutes of handholding by Michael. Once they ran we discovered a few problems, the biggest of which was a breakage of Python 2.6 compatibility — which we simply wouldn’t have found otherwise.

For the next release manager, the challenge will be to get through the acceptance tests; for v1.1, we added acceptance tests based on our metagenome protocol, so we now test about 90% of our software’s command line interface on real data before releasing it. But since I’m the person in charge of the acceptance testing system, there are a few tricks and tips that I haven’t completely codified, so I’ll have to work on pushing those out the door.

The main lesson I’ve learned from all of this is that you catch a lot more bugs with all this testing than you would any other way. It will hopefully result in a more pleasant user experience as people find fewer and fewer “dumb” bugs, and it certainly is giving us more confidence in our software processes’ robustness as we contemplate some bigger changes to khmer down the line.

Something that’s also rather exciting is that we have three people who aren’t part of the lab contributing code —@chuckpr@accaldwell, and @znruss. As our process becomes more explicit, I think we’re attracting people who want to contribute but (6 months ago) wouldn’t have known how.

What’s up next on the khmer timeline? We’re participating in the July Mozilla Science Labs hackathon by offering akhmer contributathon so people can try out our workflow, and we’re going to revamp the docs for that. We’ll let you know how it goes.


The following two tabs change content below.
C. Titus Brown
C. Titus Brown is an assistant professor in the Department of Computer Science and Engineering and the Department of Microbiology and Molecular Genetics. He earned his PhD ('06) in developmental molecular biology from the California Institute of Technology. Brown is director of the laboratory for Genomics, Evolution, and Development (GED) at Michigan State University. He is a member of the Python Software Foundation and an active contributor to the open source software community. His research interests include computational biology, bioinformatics, open source software development, and software engineering.