tl; डॉ:टोक्स में सशर्त कमांड? (Tox, ट्रैविस-सीआई, और coveralls)
मैं मेरा एक परियोजना, GitHub पर होस्ट, tox
और travis-ci
प्रयोग करने के लिए सीआई सेट कर रहा हूं। निर्माण के अंत में, मैं coveralls.io
पर कवरेज रिपोर्ट को धक्का देने के लिए converalls
चलाता हूं। मैं इस आदेश को 'सशर्त' बनाना चाहता हूं - केवल तभी निष्पादन के लिए जब ट्रेविस पर परीक्षण चलाए जाते हैं; जब वे मेरी स्थानीय मशीन पर नहीं चलते हैं। क्या ऐसा करने का कोई तरीका है?
विवरण:
पैकेज मैं परीक्षण करने के लिए कोशिश कर रहा हूँ एक अजगर पैकेज है। मैं उपयोग कर रहा हूँ/निम्नलिखित 'बुनियादी ढांचे' का उपयोग करने के परीक्षण की स्थापना करने की योजना बना:
- परीक्षण खुद को
py.test
किस्म के हैं। - सीआई स्क्रिप्टिंग, बोलने के लिए,
tox
से है। यह मुझे स्थानीय स्तर पर परीक्षण चलाने देता है, जो मेरे लिए महत्वपूर्ण है। जब भी मुझे टेस्ट रन की आवश्यकता होती है, मैं गिटूब को धक्का नहीं देना चाहता हूं। मैं अपने पैकेज मेंnumpy
औरmatplotlib
का भी उपयोग करता हूं, इसलिएtravis-ci
पर परीक्षण चक्रों की एक निष्क्रिय संख्या चलाना मेरे लिए अत्यधिक अपमानजनक लगता है। इस प्रकार,tox
डुबकी और केवल.travis.yml
का उपयोग कर एक विकल्प नहीं है।.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
- सीआई सर्वर
travis-ci
प्रासंगिक परीक्षण स्क्रिप्ट कुछ इस तरह दिखाई है
यह फ़ाइल मुझे स्थानीय स्तर पर परीक्षण चलाने देती है। हालांकि, अंतिम 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 भाग चलती की कोशिश की है, लेकिन जब कि निष्पादित किया जाता है coveralls
पर भेजने के लिए उचित .coverage
फ़ाइल पता लगाने में असमर्थ हो रहा है। मैंने इस दिशा में विभिन्न प्रयास किए हैं, जिनमें से कोई भी ऊपर सूचीबद्ध संयोजन को छोड़कर coveralls.io
पर सफल सबमिशन के परिणामस्वरूप हुआ। निम्नलिखित था जो मैंने आशा की थी कि काम करेगा, यह देखते हुए कि जब मैं tox
स्थानीय रूप से चलाता हूं तो मैं .coverage
फ़ाइल के साथ समाप्त होता हूं जहां मैं इसकी अपेक्षा करता हूं - मेरे स्रोत पेड़ के रूट फ़ोल्डर में।
कवरॉल्स को कोई सबमिशन नहीं।कब
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
अच्छा समाधान! लेकिन वास्तविक 'coveralls' पैकेज के साथ नाम टकराव से बचने के लिए, 'run_coveralls.py' स्क्रिप्ट का नाम देना बेहतर है। – alexanderlukanin13
मुझे आश्चर्य है कि कैसे 'run_coveralls.py' को आसानी से शामिल/कॉल किया जाना चाहिए? एक त्रुटि संदेश है 'फ़ाइल' run_coveralls.py 'नहीं खोल सकता: [Errno 2] फ़ाइल के रूप में ऐसी कोई फ़ाइल या निर्देशिका' टोक्स 'वर्चुअल वातावरण में कॉपी नहीं की गई है। मुझे लगता है कि इसे पैकेज के हिस्से के रूप में शामिल नहीं किया जाना चाहिए। –
मुझे लगता है कि मैं खुद को एक समाधान खोजने में कामयाब रहा। 'python {toxinidir}/run_coveralls.py' काम करने लगता है। –