My current workflow is github PRs and Builds tested on Travis CI, with tox testing pytest and reporting coverage to codeclimate.
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
However, Travis isn't passing my environmental variables for pull requests, which makes my coverage reporting fail. Travis documentation shows this as solution:
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'
However, in tox this doesn't work as tox is using subprocess python module and doesn't recognize if as a command (naturally).
How do I run codeclimate-test-reporter only for builds and not for pull requests based on the TRAVIS_PULL_REQUEST variable? Do I have to create my own script and call that? Is there a smarter solution?
tox.ini
files does not understand flow control (which is understandable, they are.ini
files). Creating custom script with logic is one option. Second option is to move CI-related functionality to.travis.yml
. At the end of the day,tox.ini
should contain logic which may and should be run on each dev local machine.pylint
does something like that.coveralls
venv is declared in tox, but is triggered by entry in.travis.yml
. – Łukasz Rogalskishell=True
into subprocess. That's hard-coded, and buried pretty deep: github.com/tox-dev/tox/blob/… – RecursivelyIronic/bin/bash -c
work? – iScrE4m