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/

Reply via email to