From c72b10ad4dc3c31402fddb91465fb92492c95a1e Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Mon, 17 Sep 2018 08:45:05 +0200 Subject: [PATCH 1/2] Revisit coverage reporting: use coveragepy directly --- .coveragerc | 8 +++++--- .travis.yml | 52 +++++++++++++++++++--------------------------------- tox.ini | 20 ++++++++++++-------- 3 files changed, 36 insertions(+), 44 deletions(-) diff --git a/.coveragerc b/.coveragerc index 318dad712..168f57853 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,6 +1,8 @@ [run] -parallel = true -source = . -branch = true +parallel = 1 +source = ${PYTESTDJANGO_COVERAGE_SRC}. +branch = 1 + [report] include = pytest_django/*,pytest_django_test/*,tests/* +skip_covered = 1 diff --git a/.travis.yml b/.travis.yml index 627305e83..1084e51da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,42 +8,42 @@ jobs: # py37 is not available in trusty dist, and requires sudo=true with xenial. - stage: test python: 3.7 - env: TOXENV=py37-dj21-sqlite + env: TOXENV=py37-dj21-sqlite-coverage dist: xenial sudo: true - python: 3.6 - env: TOXENV=py36-djmaster-sqlite + env: TOXENV=py36-djmaster-sqlite-coverage - python: 3.6 - env: TOXENV=py36-dj20-postgres + env: TOXENV=py36-dj20-postgres-coverage - python: 3.6 - env: TOXENV=py36-dj111-sqlite + env: TOXENV=py36-dj111-sqlite-coverage - python: 3.5 - env: TOXENV=py35-dj110-postgres + env: TOXENV=py35-dj110-postgres-coverage - python: 3.4 - env: TOXENV=py34-dj19-sqlite_file + env: TOXENV=py34-dj19-sqlite_file-coverage - python: 2.7 - env: TOXENV=py27-dj111-mysql_innodb + env: TOXENV=py27-dj111-mysql_innodb-coverage - python: 2.7 - env: TOXENV=py27-dj111-mysql_myisam + env: TOXENV=py27-dj111-mysql_myisam-coverage - python: 2.7 - env: TOXENV=py27-dj18-postgres + env: TOXENV=py27-dj18-postgres-coverage # pypy/pypy3: not included with coverage reports (much slower then). - python: pypy - env: TOXENV=pypy-dj111-sqlite_file SKIP_COVERAGE=1 + env: TOXENV=pypy-dj111-sqlite_file - python: pypy3 - env: TOXENV=pypy3-dj110-sqlite SKIP_COVERAGE=1 + env: TOXENV=pypy3-dj110-sqlite - python: 3.6 - env: TOXENV=checkqa,docs SKIP_COVERAGE=1 + env: TOXENV=checkqa,docs - stage: test_release python: 3.6 - env: TOXENV=py36-dj20-postgres SKIP_COVERAGE=1 + env: TOXENV=py36-dj20-postgres - stage: release script: skip @@ -61,11 +61,12 @@ jobs: # NOTE: does not show up in "allowed failures" section, but is allowed to # fail (for the "test" stage). allow_failures: - - env: TOXENV=py36-djmaster-sqlite + - env: TOXENV=py36-djmaster-sqlite-coverage stages: - name: test if: tag IS NOT present + - name: test_release if: tag IS present - name: release @@ -73,15 +74,6 @@ stages: install: - pip install tox==3.3.0 - - | - # Setup coverage tracking. - if [[ "$SKIP_COVERAGE" != "1" ]]; then - PYTEST_DJANGO_COVERAGE=1 - export PYTEST_ADDOPTS='--cov=pytest_django --cov=tests --cov=pytest_django_test --cov-report=term-missing:skip-covered' - export _PYTESTDJANGO_TOX_EXTRA_DEPS='pytest-cov==2.5.1' - else - PYTEST_DJANGO_COVERAGE=0 - fi script: - tox @@ -89,15 +81,9 @@ script: after_success: - | set -ex - if [[ "$PYTEST_DJANGO_COVERAGE" = 1 ]]; then - pip install codecov - - coverage --version - coverage combine - coverage xml - - codecov_flags=${TOXENV//./} - codecov_flags=${codecov_flags//-/ } - codecov --required -X search gcov pycov -f coverage.xml --flags $codecov_flags + if [[ "${TOXENV%-coverage}" != "$TOXENV" ]]; then + codecov_flags=${TOXENV%-coverage} + codecov_flags=${codecov_flags//-/,} + bash <(curl -s https://codecov.io/bash) -Z -X gcov -X xcode -X gcovout -F "$codecov_flags" fi set +x diff --git a/tox.ini b/tox.ini index 1d3027d7f..39701dd1d 100644 --- a/tox.ini +++ b/tox.ini @@ -9,8 +9,6 @@ envlist = [testenv] extras = testing deps = - {env:_PYTESTDJANGO_TOX_EXTRA_DEPS:} - djmaster: https://github.com/django/django/archive/master.tar.gz dj21: Django>=2.1a1,<2.2 dj20: Django>=2.0a1,<2.1 @@ -23,24 +21,30 @@ deps = mysql_innodb: mysql-python==1.2.5 postgres: psycopg2-binary + coverage: coverage-enable-subprocess + setenv = PYTHONPATH = {toxinidir}:{env:PYTHONPATH:} - # Ref: https://github.com/pytest-dev/pytest-django/pull/412#issuecomment-340077539 - COV_CORE_SOURCE={toxinidir} - COV_CORE_CONFIG={toxinidir}/.coveragerc - COV_CORE_DATAFILE={toxinidir}/.coverage.eager - mysql_innodb: DJANGO_SETTINGS_MODULE=pytest_django_test.settings_mysql_innodb mysql_myisam: DJANGO_SETTINGS_MODULE=pytest_django_test.settings_mysql_myisam postgres: DJANGO_SETTINGS_MODULE=pytest_django_test.settings_postgres sqlite: DJANGO_SETTINGS_MODULE=pytest_django_test.settings_sqlite sqlite_file: DJANGO_SETTINGS_MODULE=pytest_django_test.settings_sqlite_file + coverage: PYTESTDJANGO_TEST_RUNNER=coverage run -m pytest + coverage: COVERAGE_PROCESS_START={toxinidir}/.coveragerc + coverage: COVERAGE_FILE={toxinidir}/.coverage + coverage: PYTESTDJANGO_COVERAGE_SRC={toxinidir}/ + passenv = PYTEST_ADDOPTS usedevelop = True commands = - pytest --strict {posargs:tests} + coverage: coverage erase + {env:PYTESTDJANGO_TEST_RUNNER:pytest} {posargs:tests} + coverage: coverage combine + coverage: coverage report + coverage: coverage xml [testenv:checkqa] deps = From b2c91c6c58952ef281ff79073fd6643bea307c1f Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Mon, 17 Sep 2018 09:18:31 +0200 Subject: [PATCH 2/2] Travis: add baseline stage --- .travis.yml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1084e51da..a95552ba6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,8 +5,18 @@ dist: trusty jobs: fast_finish: true include: - # py37 is not available in trusty dist, and requires sudo=true with xenial. + - stage: baseline + python: 3.6 + env: TOXENV=py36-dj20-postgres-coverage + - python: 3.6 + env: TOXENV=py36-dj111-sqlite-coverage + - python: 2.7 + env: TOXENV=py27-dj111-mysql_innodb-coverage + - python: 3.6 + env: TOXENV=checkqa,docs + - stage: test + # py37 is not available in trusty dist, and requires sudo=true with xenial. python: 3.7 env: TOXENV=py37-dj21-sqlite-coverage dist: xenial @@ -14,10 +24,6 @@ jobs: - python: 3.6 env: TOXENV=py36-djmaster-sqlite-coverage - - python: 3.6 - env: TOXENV=py36-dj20-postgres-coverage - - python: 3.6 - env: TOXENV=py36-dj111-sqlite-coverage - python: 3.5 env: TOXENV=py35-dj110-postgres-coverage @@ -25,8 +31,6 @@ jobs: - python: 3.4 env: TOXENV=py34-dj19-sqlite_file-coverage - - python: 2.7 - env: TOXENV=py27-dj111-mysql_innodb-coverage - python: 2.7 env: TOXENV=py27-dj111-mysql_myisam-coverage - python: 2.7 @@ -38,9 +42,6 @@ jobs: - python: pypy3 env: TOXENV=pypy3-dj110-sqlite - - python: 3.6 - env: TOXENV=checkqa,docs - - stage: test_release python: 3.6 env: TOXENV=py36-dj20-postgres @@ -64,9 +65,10 @@ jobs: - env: TOXENV=py36-djmaster-sqlite-coverage stages: + - name: baseline + if: tag IS NOT present - name: test if: tag IS NOT present - - name: test_release if: tag IS present - name: release