diff --git a/.gitattributes b/.gitattributes index 242d3da0d..ec1c66dc1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -CHANGELOG merge=union +*.bat text eol=crlf diff --git a/.gitignore b/.gitignore index 2ae5ea752..1b363494d 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,8 @@ env/ .cache .pytest_cache .coverage +.coverage.* +coverage.xml .ropeproject .idea .hypothesis diff --git a/.travis.yml b/.travis.yml index 89874f5a0..e7ee12de8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -82,7 +82,9 @@ jobs: before_script: - | if [[ "$PYTEST_NO_COVERAGE" != 1 ]]; then - export _PYTEST_TOX_COVERAGE_RUN="env COVERAGE_FILE=$PWD/.coverage COVERAGE_PROCESS_START=$PWD/.coveragerc coverage run --source {envsitepackagesdir}/_pytest/,$PWD/testing -m" + export COVERAGE_FILE="$PWD/.coverage" + export COVERAGE_PROCESS_START="$PWD/.coveragerc" + export _PYTEST_TOX_COVERAGE_RUN="coverage run --source {envsitepackagesdir}/_pytest/,{toxinidir}/testing -m" export _PYTEST_TOX_EXTRA_DEP=coverage-enable-subprocess fi @@ -94,9 +96,9 @@ after_success: set -e pip install codecov coverage combine - coverage xml - coverage report -m - codecov --required -X gcov pycov search -f coverage.xml --flags ${TOXENV//-/ } + coverage xml --ignore-errors + coverage report -m --ignore-errors + codecov --required -X gcov pycov search -f coverage.xml --flags ${TOXENV//-/ } linux # Coveralls does not support merged reports. if [[ "$TOXENV" = py37 ]]; then diff --git a/appveyor.yml b/appveyor.yml index 11e57f0c8..949397d3b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,27 +1,18 @@ environment: - COVERALLS_REPO_TOKEN: - secure: 2NJ5Ct55cHJ9WEg3xbSqCuv0rdgzzb6pnzOIG5OkMbTndw3wOBrXntWFoQrXiMFi - # this is pytest's token in coveralls.io, encrypted - # using pytestbot account as detailed here: - # https://www.appveyor.com/docs/build-configuration#secure-variables - matrix: - # coveralls is not in the default env list - - TOXENV: "coveralls" - # note: please use "tox --listenvs" to populate the build matrix below - TOXENV: "linting" + PYTEST_NO_COVERAGE: "1" - TOXENV: "py27" - TOXENV: "py34" - TOXENV: "py35" - TOXENV: "py36" - TOXENV: "py37" - TOXENV: "pypy" - - TOXENV: "py27-pexpect" + PYTEST_NO_COVERAGE: "1" - TOXENV: "py27-xdist" - TOXENV: "py27-trial" - TOXENV: "py27-numpy" - TOXENV: "py27-pluggymaster" - - TOXENV: "py36-pexpect" - TOXENV: "py36-xdist" - TOXENV: "py36-trial" - TOXENV: "py36-numpy" @@ -29,7 +20,9 @@ environment: - TOXENV: "py27-nobyte" - TOXENV: "doctesting" - TOXENV: "py36-freeze" + PYTEST_NO_COVERAGE: "1" - TOXENV: "docs" + PYTEST_NO_COVERAGE: "1" install: - echo Installed Pythons @@ -37,12 +30,19 @@ install: - if "%TOXENV%" == "pypy" call scripts\install-pypy.bat + - C:\Python36\python -m pip install --upgrade pip - C:\Python36\python -m pip install --upgrade --pre tox build: false # Not a C# project, build stuff at the test step instead. +before_test: + - call scripts\prepare-coverage.bat + test_script: - - call scripts\call-tox.bat + - C:\Python36\python -m tox + +on_success: + - call scripts\upload-coverage.bat cache: - '%LOCALAPPDATA%\pip\cache' diff --git a/scripts/call-tox.bat b/scripts/call-tox.bat deleted file mode 100644 index 86fb25c1d..000000000 --- a/scripts/call-tox.bat +++ /dev/null @@ -1,8 +0,0 @@ -REM skip "coveralls" run in PRs or forks -if "%TOXENV%" == "coveralls" ( - if not defined COVERALLS_REPO_TOKEN ( - echo skipping coveralls run because COVERALLS_REPO_TOKEN is not defined - exit /b 0 - ) -) -C:\Python36\python -m tox diff --git a/scripts/prepare-coverage.bat b/scripts/prepare-coverage.bat new file mode 100644 index 000000000..fbf4da66a --- /dev/null +++ b/scripts/prepare-coverage.bat @@ -0,0 +1,10 @@ +REM scripts called by AppVeyor to setup the environment variables to enable coverage +if not defined PYTEST_NO_COVERAGE ( + set "COVERAGE_FILE=%CD%\.coverage" + set "COVERAGE_PROCESS_START=%CD%\.coveragerc" + set "_PYTEST_TOX_COVERAGE_RUN=coverage run --source {envsitepackagesdir}/_pytest/,{toxinidir}/testing -m" + set "_PYTEST_TOX_EXTRA_DEP=coverage-enable-subprocess" + echo Coverage setup completed +) else ( + echo Skipping coverage setup, PYTEST_NO_COVERAGE is set +) diff --git a/scripts/upload-coverage.bat b/scripts/upload-coverage.bat new file mode 100644 index 000000000..97553676c --- /dev/null +++ b/scripts/upload-coverage.bat @@ -0,0 +1,11 @@ +REM script called by AppVeyor to combine and upload coverage information to codecov +if not defined PYTEST_NO_COVERAGE ( + echo Prepare to upload coverage information + C:\Python36\Scripts\pip install codecov + C:\Python36\Scripts\coverage combine + C:\Python36\Scripts\coverage xml --ignore-errors + C:\Python36\Scripts\coverage report -m --ignore-errors + C:\Python36\Scripts\codecov --required -X gcov pycov search -f coverage.xml --flags %TOXENV:-= % windows +) else ( + echo Skipping coverage upload, PYTEST_NO_COVERAGE is set +) diff --git a/tox.ini b/tox.ini index fbc5d4779..69397665f 100644 --- a/tox.ini +++ b/tox.ini @@ -18,14 +18,14 @@ envlist = [testenv] commands = - {env:_PYTEST_TOX_COVERAGE_RUN:} pytest --lsof -ra {env:_PYTEST_TEST_OPTS:} {posargs:testing} - coverage: coverage report -m --skip-covered + {env:_PYTEST_TOX_COVERAGE_RUN:} pytest --lsof -ra {posargs:testing} +passenv = USER USERNAME setenv = + # configuration if a user runs tox with a "coverage" factor, for example "tox -e py36-coverage" coverage: _PYTEST_TOX_COVERAGE_RUN=coverage run -m coverage: _PYTEST_TOX_EXTRA_DEP=coverage-enable-subprocess coverage: COVERAGE_FILE={toxinidir}/.coverage coverage: COVERAGE_PROCESS_START={toxinidir}/.coveragerc -passenv = USER USERNAME deps = hypothesis>=3.56 nose @@ -56,9 +56,8 @@ deps = nose hypothesis>=3.56 {env:_PYTEST_TOX_EXTRA_DEP:} -changedir=testing commands = - {env:_PYTEST_TOX_COVERAGE_RUN:} pytest -n8 -ra {posargs:.} + {env:_PYTEST_TOX_COVERAGE_RUN:} pytest -n8 -ra {posargs:testing} [testenv:py36-xdist] deps = {[testenv:py27-xdist]deps} @@ -177,21 +176,6 @@ commands = {envpython} create_executable.py {envpython} tox_run.py - -[testenv:coveralls] -passenv = CI TRAVIS TRAVIS_* COVERALLS_REPO_TOKEN -usedevelop = True -changedir = . -deps = - {[testenv]deps} - coveralls - codecov -commands = - coverage run -m pytest testing - coverage report -m - coveralls - codecov - [testenv:release] decription = do a release, required posarg of the version number basepython = python3.6