2016-09-16 8 views
5

पर आधारित टोक्स रनिंग कमांड मेरा वर्तमान वर्कफ़्लो जिथब पीआरएस और ट्रेविस सीआई पर परीक्षण करता है, जिसमें टोक्स परीक्षण पायस्ट और कोडेक्लिम पर रिपोर्टिंग कवरेज है।एनएन परिवर्तनीय

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 

tox.ini

[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 

हालांकि, ट्रैविस खींच लिए अनुरोध किया गया मेरी कवरेज रिपोर्टिंग असफल बनाता है के लिए मेरे पर्यावरण चर गुजर नहीं है। ट्रैविस प्रलेखन समाधान के रूप में यह पता चलता है:

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 उपप्रक्रिया अजगर मॉड्यूल उपयोग कर रहा है और एक कमांड (स्वाभाविक रूप से) के रूप में अगर नहीं पहचानता है काम नहीं करता।

मैं केवल कोड बनाने के लिए कोडेक्लिम-टेस्ट-रिपोर्टर कैसे चला सकता हूं और TRAVIS_PULL_REQUEST चर के आधार पर पुल अनुरोधों के लिए नहीं? क्या मुझे अपनी खुद की लिपि बनाना है और उसे कॉल करना है? क्या कोई बेहतर समाधान है?

+1

'tox.ini' फ़ाइलें प्रवाह नियंत्रण को समझ में नहीं आती हैं (जो समझ में आता है, वे' .ini' फ़ाइलें हैं)। तर्क के साथ कस्टम स्क्रिप्ट बनाना एक विकल्प है। दूसरा विकल्प सीआई से संबंधित कार्यक्षमता को '.travis.yml' पर ले जाना है। दिन के अंत में, 'tox.ini' में तर्क होना चाहिए जो प्रत्येक देव स्थानीय मशीन पर चल सकता है और चलाया जाना चाहिए। ['पिलिंट'] (https://github.com/PyCQA/pylint/blob/master/tox.ini) ऐसा कुछ करता है। 'coveralls' venv को विष में घोषित किया गया है, लेकिन' .travis.yml' में प्रविष्टि से ट्रिगर किया जाता है। –

+1

मुझे लगता है कि काम करने के लिए बैश के माध्यम से नियंत्रण प्रवाह करना है, आपको उप-प्रोसेस में 'खोल = ट्रू' पास करने के लिए टोक्स की आवश्यकता होगी। यह कड़ी-कोडित है, और बहुत गहरी दफन है: https://github.com/tox-dev/tox/blob/85cce631a1bab5fe056ed2cbbcab49ebaf51b259/tox/session.py#L226 – RecursivelyIronic

+0

कुछ/'bin/bash -c' काम की तरह कुछ हो सकता है? – iScrE4m

उत्तर

0

से मेरे समाधान setup.py आदेश जो सब कुछ का ख्याल रखता है

Tox.ini

[testenv:py35] 
commands = 
    python setup.py testcov 
passenv = ... 
से गुजर रहा है कर सकते हैं

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

आप दो 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