I recently set up a build in Travis CI environment. It is really cool hosted continuous integration service for the open source community and well integrated with GitHub to boot. Every time I push code into my public repository in GitHub, Travis is notified and will run 3 test builds for me. Each build is done with different version of Python, so I can now easily cover 2.6, 2.7 and 3.2. Especially 3.2 is very good, since I don’t have that set up on my system. If everything goes fine, I don’t even notice the whole process. Only when build breaks, I get an email stating the problem and I can start hunting the error.
Setting up Travis was really easy. I just had to enable hook for it in GitHub and write a simple configuration file:
language: python python: - "2.6" - "2.7" - "3.2" # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors install: - "easy_install -U mockito" - "easy_install -U pyhamcrest" - "easy_install -U decorator" # command to run tests, e.g. python setup.py test script: nosetests -w ./src/pyherc
The configuration is for running for three versions of Python (2.6, 2.7 and 3.2). At the start of the build, the system will install three libraries (mockito, pyhamcrest and decorator). Builds are always done in a clean environment and all changes are rolled back after finishing the build.
After that the system was more or less working and the only thing I had to do was to fix the codebase to work with Python 3.2.
The system has been set up to run only unit tests from pyherc project (more or less the engine of my game). UI tests I can not run without PyQt being installed and currently that is not provided as a easy install package. CPU time and bandwidth are considerations too, since I don’t want to take too much resources from a free service.
For a single developer working on a hobby project, this is probably a little bit overkill. But I like to tinker with things and try out them in a small software project, where it is easier than on a huge one.