tl;dr:
Я настраиваю CI для своего проекта, размещенного на github, используя tox
и travis-ci
. В конце сборки я запускаю converalls
, чтобы отправить отчеты о покрытии в coveralls.io
. Я хотел бы сделать эту команду «условной» - для выполнения только тогда, когда тесты запускаются на travis; не тогда, когда они запускаются на моей локальной машине. Есть ли способ сделать это?
Подробности:
Пакет, который я пытаюсь протестировать, представляет собой пакет Python. Я использую/планирую использовать следующую «инфраструктуру» для настройки тестов:
- Сами тесты относятся к типу
py.test
. - Сценарии CI, так сказать, из
tox
. Это позволяет мне запускать тесты локально, что очень важно для меня. Я не хочу заходить на github каждый раз, когда мне нужен тестовый прогон. Я также используюnumpy
иmatplotlib
в своем пакете, поэтому запускать бессмысленное количество тестовых циклов наtravis-ci
мне кажется чрезмерно расточительным. Таким образом, отказаться отtox
и просто использовать только.travis.yml
не вариант. - CI-сервер
travis-ci
Соответствующие тестовые сценарии выглядят примерно так:
.travis.yml
language: python
python: 2.7
env:
- TOX_ENV=py27
install:
- pip install tox
script:
- tox -e $TOX_ENV
tox.ini
[tox]
envlist = py27
[testenv]
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
deps =
pytest
coverage
pytest-cov
coveralls
commands =
py.test --cov={envsitepackagesdir}/mypackage --cov-report=term --basetemp={envtmpdir}
coveralls
Этот файл позволяет мне запускать тесты локально. Однако из-за последнего вызова coveralls
тест в принципе не проходит:
py27 runtests: commands[1] | coveralls
You have to provide either repo_token in .coveralls.yml, or launch via Travis
ERROR: InvocationError: ...coveralls'
Это ожидаемая ошибка. Бит passenv
отправляет необходимую информацию из travis
, чтобы можно было записать в coveralls
, и без travis для предоставления этой информации команда должна завершиться ошибкой. Я также не хочу, чтобы результаты отправлялись на сайт coveralls.io. Я бы хотел, чтобы coveralls
запускался только в том случае, если тест проводится travis-ci
. Есть ли способ, которым я могу запустить эту команду условно или настроить конфигурацию сборки, которая достигает того же эффекта?
Я уже пытался переместить часть комбинезона в .travis.yml
, но когда это выполняется, coveralls
, похоже, не может найти соответствующий файл .coverage
для отправки. Я предпринял различные попытки в этом направлении, ни одна из которых не привела к успешной подаче на coveralls.io
, за исключением комбинации, указанной выше. Я надеялся, что следующее сработает, учитывая, что когда я запускаю tox
локально, я получаю файл .coverage
там, где и ожидал - в корневой папке моего исходного дерева.
Нет отправки на сайт coveralls.io
language: python
python: 2.7
env:
- TOX_ENV=py27
install:
- pip install tox
- pip install python-coveralls
script:
- tox -e $TOX_ENV
after_success:
- coveralls