Hey all, last week I did a bit of outreach on Twitter, trying to grow our CI team. “What CI team?” you ask. — Exactly.
CouchDB needs world-class continuous integration in order to guarantee that we deliver quality software across many platforms and configuration without wasting too much time. In the past, I’ve handled the CI setup (http://ci.couchdb.org:8888 / rough docs at: http://wiki.apache.org/couchdb/CI where you see that we are a little out of date ;) on a Mac Mini in my home. It was meant as a temporary measure until a larger team could take over. This never happened and we are trying to revive the effort now for the upcoming 2.0 release. Before you ask: we are already using Travis CI, and it is really nice to do baseline checks for ongoing development and Pull Requests, but it is inadequate to satisfy all our testing needs. In particular testing on multiple operating systems, different operating system versions, dependency versions and configurations (and Windows!) — I’m very good personal friends with the Travis team, and they want to work towards supporting these things, but it’s nowhere near on their roadmap, and we need better CI now. ## There are a bunch of things to do Before I go into details, I’d like to point out that the most important thing we need here is someone, or better a group of people that are *interested in assuming ownership of the CouchDB Continuous Integration operations*. You’ll be part of a uniquely friendly community and would work on something, while sometimes thankless, that would be of incredible benefit to the project. And we are here to hold your hands getting started. :) Also, nothing here requires any specific Erlang knowledge. Any test suites are up to the Erlang devs in the community and other than that, Erlang is just another Unix/Windows binary, nothing special required, *and* you have a bunch of experts eager to help you at your disposal :) And one final prelude item: While these things might seem overly specific, it doesn’t really matter how you arrive at what we need. One of the appeals of Open Source is to do your own thing and see that it helps, so if you have a completely different vision for CI that would give us the same or even better benefits, by all means, it’s your show :) With all that out of the way, there are multiple areas that need tackling: - Coordination with the ASF Infra/CI team for the existing Jenkins setup and build-machine configuration (we can continue to use ci.couchdb.org:8888 for a while but eventually, this should live on ci.apache.org) - Automation of build-machine configuration with Ansible or whatever else floats your boat / is required by ASF Infra. - Invent system to maintain and extend this going forward, with new operating system releases and Erlang versions being released. - Set up newly minted build-machines with either ci.apache.org or ci.couchdb.org:8888 Jenkins installs (ci.apache.org preferred) This is already a bit of work. I’d recommend to start small: 1. Get one OS in a single configuration going (maybe even just current Ubuntu and latest-ish Erlang). 2. Go through the whole process and see it running on master and our test branches, set up all the integrations (Github/IRC/Email) etc. just to see that we have a full system running, from build-machine config to succeeding builds. 3. Only then, start extending to multiple OSs and configurations (of course, if you can roll some work for this into step 1., don’t hold off on it, but this is only crucial at a later state). * * * ## Configurations A small sidebar on configurations: the most interesting build variation is different Erlang versions. CouchDB supports quite a wide range of Erlang versions (R14B01|R14B03|R14B04|R16B02|R16B03-1|17), and eventually it’d be nice to test against the whole range, or at least the last in a major release line. Erlang also releases preview versions of upcoming major versions frequently and being up to speed what is going to happen would be nice. Most other CouchDB dependencies are rather stable. At this point we mostly run on SpiderMonkey 1.8.5 and whatever is the latest ICU (icu4c) release, but some variation there would be nice as well. Other devs, what am I missing? As for operating systems, like mentioned in the wiki link above, it’d be nice to arrive at a policy where we support all current and LTS releases of Linux distros/FreeBSD/*BSD/{Solaris,Illumos}/Windows/etc. If we get to it, even latest-1 versions. Also interesting are non-x86/ia64 architectures, especially embedded ARM things like RasPI. All this is nice to have for *way* later, just so you have an idea where this is going. * * * One last thing that we also want to get going eventually is release channels for the various package management systems where the Apache CouchDB Project maintains releases in that channel. Ideally, they are built and tested on our CI infrastructure on each platform/version configuration and ideally of of this is automated, with testing and stable channels, so people can test in-development versions for CouchDB really easily. All this should make CouchDB a lot easier to install on various platforms. But again, this is a little off, and not a primary goal just yet. * * * Okay, that’s it for now. I hope you are still with me! :) Thank you Francis and Bastian (in CC) for responding to the call to action last week and Dominik, who voiced interest in this at the CouchDB Day in Hamburg earlier this year. I’ll be pointing more folks to this mailing list post, so I hope we’ll get some more to join. If you know anyone partial to these topics, please point them here as well! If you have any questions, feel free to ask here or on Freenode IRC #couchdb or #couchdb-dev, but for now, the mailing list is probably best, with IRC being reserved for hashing out details that need higher bandwidth. Thanks for reading and I hope we can get this off the ground! :) Best Jan -- Professional Support for Apache CouchDB: http://www.neighbourhood.ie/couchdb-support/