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