Travis Continious Integration
Нашел чудесный сервис, позволяющий бесплатно выполнять непрерывную интеграцию для проектов, размещающихся на GitHub: Travis CI.
После простейшей регистрации в настройках профиля можно выбрать, какие из проектов будут автоматически собираться и тестироваться на нодах этого сервиса. Для Python есть ноды с 2.5, 2.6, 2.7, 3.2 и pypy версиями интерпретатора.
Для примера я решил сделать тестирование ctypes биндингов к libquirc (написанной на C библиотеки для распознавания QR кодов), которые сейчас пишу.
Тестирование проекта происходит автоматически после каждого нового коммита на основе конфигурационного файла “.travis.yml”. Файл настроек кладется в корень проекта и описывает конфигурацию для тестирования.
Для начала указываем язык исходников:
language: python
Описываем версии, под которыми будет тестироваться проект:
python:
- '2.5'
- '2.6'
- '2.7'
- 'pypy'
Так как в моем случае проект — это биндинги к уже имеющейся библиотеке, нужно сначала установить саму библиотеку, чтобы было что тестировать. В репозиториях дистрибутивов ее нет, поэтому собираем ее вручную. Для этого подходит секция “before_install” в конфиге, куда можно написать ряд команд bash, чтобы собрать себе работоспособное окружение.
before_install:
- 'sudo apt-get install libsdl1.2-dev'
- 'git clone --depth 1 git://github.com/dlbeer/quirc.git /tmp/quirc'
- 'make -C /tmp/quirc libquirc.so libquirc.a'
- 'sudo install -o root -g root -m 0644 /tmp/quirc/libquirc.a /usr/local/lib'
- 'sudo install -o root -g root -m 0755 /tmp/quirc/libquirc.so /usr/local/lib/libquirc.so.1.0'
- 'sudo ln -sf /usr/local/lib/libquirc.so.1.0 /usr/local/lib/libquirc.so.1'
- 'sudo ln -sf /usr/local/lib/libquirc.so.1.0 /usr/local/lib/libquirc.so'
На мое счастье, в окружении доступны gcc и make, поэтому библиотеку собрать не составляет труда.
Кроме того, для тестирования под версиями python<2.7 используется библиотека unittest2, чтобы задействовать новые возможности штатной unittest. В той же секции “before_install” проверяем версию python в окружении и при необходимости устанавливаем библиотеку:
- 'if [[ $TRAVIS_PYTHON_VERSION == "2.5" ]]; then pip install unittest2 --use-mirrors; fi'
- 'if [[ $TRAVIS_PYTHON_VERSION == "2.6" ]]; then pip install unittest2 --use-mirrors; fi'
После этого уже можно запускать тестирование:
script: LD_PRELOAD=/usr/local/lib/libquirc.so python setup.py test
Теперь после каждого коммита будет происходить сборка проекта, на почту будут приходить ехидные уведомления «The build is still failing», а на странице проекта можно будет посмотреть подробную информацию о результатах тестирования.
Не забудьте в README проекта добавить плашку с информацией о результатах билда, это весело: 