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, и без трайва там, чтобы предоставить эту информацию, команда должна выйти из строя. Я не хочу, чтобы это подталкивало результаты к 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