2016-09-16 18 views
5

私の現在のワークフローは、toxテストpytestとコーデックメイトへのレポートカバレッジでTravis CIでテストされたgithub PRとBuildsです。env変数に基づくTox実行コマンド

[tox] 
envlist = py33, py34, py35, pypy3, docs, flake8, nightly, pypy3.3-5.2-alpha1 

[tox:travis] 
3.5 = py35, docs, flake8 

[testenv] 
deps = -rrequirements.txt 
platform = 
    win: windows 
    linux: linux 
commands = 
    py.test --cov=pyCardDeck --durations=10 tests 

[testenv:py35] 
commands = 
    py.test --cov=pyCardDeck --durations=10 tests 
    codeclimate-test-reporter --file .coverage 
passenv = 
    CODECLIMATE_REPO_TOKEN 
    TRAVIS_BRANCH 
    TRAVIS_JOB_ID 
    TRAVIS_PULL_REQUEST 
    CI_NAME 

tox.ini

travis.yml

os: 
- linux 
sudo: false 
language: python 
python: 
- "3.3" 
- "3.4" 
- "3.5" 
- "pypy3" 
- "pypy3.3-5.2-alpha1" 
- "nightly" 
install: pip install tox-travis 
script: tox 

しかし、トラヴィスは私のカバレッジ・レポートが失敗しますれ、プル要求のための私の環境変数を渡していません。トラヴィスのドキュメントではソリューションとしてこれを示しています

script: 
    - 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then bash ./travis/run_on_pull_requests; fi' 
    - 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./travis/run_on_non_pull_requests; fi' 

しかし、TOXにこれはTOXは、サブプロセスのpythonモジュールを使用して、コマンド(自然)などあれば認識していないと動作しません。

コーデックリートテストレポーターはビルド専用で、TRAVIS_PULL_REQUEST変数に基づいたプルリクエストは実行できません。自分のスクリプトを作成して呼び出す必要がありますか?もっとスマートな解決策がありますか?

+1

'tox.ini'ファイルはフロー制御を理解しません(これは理解できる、' .ini'ファイルです)。ロジックを使ってカスタムスクリプトを作成することも可能です。 2番目のオプションは、CI関連の機能を '.travis.yml'に移すことです。終わりに、 'tox.ini'には、各devローカルマシン上で実行されるべきロジックが含まれていなければなりません。 ['pylint'](https://github.com/PyCQA/pylint/blob/master/tox.ini)はそういったことをします。 'coveralls' venvはtoxで宣言されていますが、' .travis.yml'のエントリによってトリガされます。 –

+1

私はbashを介して制御フローを作って動作させると思いますが、サブプロセスに 'shell = True'を渡すためにはtoxが必要です。それはハードコードされており、かなり深く埋まっています:https://github.com/tox-dev/tox/blob/85cce631a1bab5fe056ed2cbbababebeb51b259/tox/session.py#L226 – RecursivelyIronic

+0

'/ bin/bash -c'のようなものが使えますか? – iScrE4m

答えて

0

から私のソリューションは、すべての

Tox.ini

[testenv:py35] 
commands = 
    python setup.py testcov 
passenv = ... 
を面倒をsetup.pyのコマンドを通過していることを呼び出すことができます

setup.py

class PyTestCov(Command): 
    description = "run tests and report them to codeclimate" 
    user_options = [] 

    def initialize_options(self): 
     pass 

    def finalize_options(self): 
     pass 

    def run(self): 
     errno = call(["py.test --cov=pyCardDeck --durations=10 tests"], shell=True) 
     if os.getenv("TRAVIS_PULL_REQUEST") == "false": 
      call(["python -m codeclimate_test_reporter --file .coverage"], shell=True) 
     raise SystemExit(errno) 

... 


    cmdclass={'testcov': PyTestCov}, 
0

次の2つのtox.iniのファイルを持っているとtravis.yml

script: if [ $TRAVIS_PULL_REQUEST ]; then tox -c tox_nocodeclimate.ini; else tox -c tox.ini; fi

+0

私の現在の解決策(https://github.com/iScrE4m/pyCardDeck/blob/master/setup.py#L34)はちょっと改善されていますが、それでも気に入らない – iScrE4m

関連する問題