Codeship is pretty cool, other than their requirement to log in to view even public builds. They support Python to some extent, even going as far as creating and activating a virtualenv for your test environment.
However, I like to use tox to do matrix testing against packages, and try to cover as many cases as possible. For instance, for django-boardinghouse, I currently test against:
- Python 2.7
- Python 3.3
- Python 3.4
- Python 3.5
…and Django 1.7 through 1.9. In most cases, each version of python should be tested with each version of django. In practice, there are some exceptions.
However, Codeship only have Python 2.7.6 and 3.4.0 installed.
You can run arbitrary code as part of your test/setup, but you can’t install stuff using
sudo. Instead, I wrote a script that can be called from within the test setup that installs other pythons:
# We already have some versions of python, but want some more... cd ~/src mkdir -p pypy cd pypy wget https://bitbucket.org/squeaky/portable-pypy/downloads/pypy-5.0.1-linux_x86_64-portable.tar.bz2 tar --strip-components 1 -xvf pypy-5.0.1-linux_x86_64-portable.tar.bz2 cd .. mkdir -p pypy3 cd pypy3 wget https://bitbucket.org/squeaky/portable-pypy/downloads/pypy3-2.4-linux_x86_64-portable.tar.bz2 tar --strip-components 1 -xvf pypy3-2.4-linux_x86_64-portable.tar.bz2 cd .. mkdir -p ~/.local wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xz tar xvf Python-3.5.1.tar.xz cd Python-3.5.1 ./configure --prefix=/home/$USER/.local/ make make install # You actually need to put this line in the tests section. Not sure of a better solution. export PATH=$PATH:~/src/pypy3/bin:~/src/pypy/bin:~/.local/bin/
I have this as a reusable snippet on BitBucket: codeship helper scripts, however as mentioned you need to grab the
export PATH=... section and stick that in the tests section. Also notably you get a different URL for the raw version of each revision, which is actually really good, because it means someone cannot change the code between you inspecting it an executing it.
In my case, I have a line in the test setup:
curl https://bitbucket.org/\!api/2.0/snippets/schinckel/oKXKy/c7cc02bcd96d4a8f444cd997d5c3bc0bb92106d6/files/install-python.sh | sh
Also of note is that
pypy* have a pre-built version, which is much faster than building from source, however there doesn’t seem to be a non-rpm version of