tl;dr:
tox
と を使用して、github でホストされている私のプロジェクトの CI をセットアップしていtravis-ci
ます。ビルドの最後に実行converalls
して、カバレッジ レポートを にプッシュしcoveralls.io
ます。このコマンドを「条件付き」にしたいと思います-テストがtravisで実行されている場合にのみ実行します。私のローカルマシンで実行されたときではありません。これを実現する方法はありますか?
詳細:
テストしようとしているパッケージは python パッケージです。テストをセットアップするために、次の「インフラストラクチャ」を使用しています/使用する予定です。
- テスト自体は
py.test
さまざまです。 - CI スクリプティングは、いわば
tox
. これにより、テストをローカルで実行できます。これは私にとってかなり重要です。テストの実行が必要になるたびに github にプッシュする必要はありません。私も自分のパッケージでnumpy
andmatplotlib
を使用しているので、非常に多くのテスト サイクルを実行するの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