couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Lehnardt <>
Subject Continuous Integration Redux
Date Mon, 29 Jun 2015 21:21:46 GMT
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 ( / rough docs at:
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 for a while but eventually, this
should live on
- 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 or Jenkins
installs ( 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
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

* * * 

## 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

* * *

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! :)

Professional Support for Apache CouchDB:

View raw message