Travis and tox revisited

Two years on, and I still love the combination of tox and Travis. I still write changes to my tox.ini and .travis.yml files separately, despite having written a tool for this.¬†It occurred to me yesterday that there was a better way of writing this now - since tox now has a command for listing out what environments are set up (something which I think didn’t exist when I wrote the original Python script).

My original tool was used a bit like this:

python > .travis.yml

Rewritten in bash, it now looks like this:

set -o nounset
set -o errexit
command -v tox >/dev/null 2>&1 || { echo >&2 "tox2travis requires tox but it's not installed. Aborting."; exit 1; }

if [ ! -f tox.ini ]; then
     echo "tox.ini not found. Aborting."
     exit 1

echo "language: python"
echo "python: 2.7"
echo "env:"
for env in $(tox -l); do
     echo "  - TOX_ENV=${env}"
echo "install:" echo "  - pip install tox"
echo "script:" echo "  - tox -e $TOX_ENV"

This is functionally pretty identical (though a little better at error checking) to my previous effort, but is a good deal neater, and doesn’t depend on tox internals.

I’ve also set it up so that it’s on my path, which is the main (stupid) reason why I never really got used to using the old version.