Hello community, here is the log from the commit of package python-coveralls for openSUSE:Leap:15.2 checked in at 2020-04-02 16:49:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/python-coveralls (Old) and /work/SRC/openSUSE:Leap:15.2/.python-coveralls.new.3248 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-coveralls" Thu Apr 2 16:49:13 2020 rev:5 rq:790661 version:1.11.1 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/python-coveralls/python-coveralls.changes 2020-03-09 18:04:09.376781496 +0100 +++ /work/SRC/openSUSE:Leap:15.2/.python-coveralls.new.3248/python-coveralls.changes 2020-04-02 16:49:21.226027980 +0200 @@ -1,0 +2,12 @@ +Wed Apr 1 13:54:08 UTC 2020 - Marketa Calabkova <mcalabk...@suse.com> + +- 1.11.1 + * add service_number for github actions + * Python 2.7 and 3.4 are now officially End-Of-Life'd. Consider + them deprecated from the perspective of this package -- we'll + remove them in an upcoming release (likely the first one which + requires non-trivial work to continue supporting them!). + * support coverage>=5.0 + * mark Python 3.8 as officially supported. + +------------------------------------------------------------------- Old: ---- 1.8.2.tar.gz New: ---- 1.11.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-coveralls.spec ++++++ --- /var/tmp/diff_new_pack.t9Dm4X/_old 2020-04-02 16:49:21.638028469 +0200 +++ /var/tmp/diff_new_pack.t9Dm4X/_new 2020-04-02 16:49:21.642028474 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-coveralls # -# Copyright (c) 2019 SUSE LLC +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-coveralls -Version: 1.8.2 +Version: 1.11.1 Release: 0 Summary: Module for showing coverage stats online via coverallsio License: MIT ++++++ 1.8.2.tar.gz -> 1.11.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/.circleci/config.yml new/coveralls-python-1.11.1/.circleci/config.yml --- old/coveralls-python-1.8.2/.circleci/config.yml 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/.circleci/config.yml 2020-02-15 01:13:01.000000000 +0100 @@ -1,102 +1,153 @@ -version: 2 +version: 2.1 -jobs: - check: - docker: - - image: python:3.6 - steps: - - checkout - - run: pip install pre-commit - - run: pre-commit run --all-files +orbs: + linter: thekevjames/linter@1 - test-py27: +jobs: + toxpy: docker: - - image: python:2.7-alpine + - image: python:<<parameters.docker_image>>-alpine + parameters: + docker_image: + type: string + # TODO: figure out `<<parameters.docker_image>>.replace('.','')` + tox_environment: + type: string + cov_version: + default: "" + type: string steps: - run: apk add --no-cache gcc git libffi-dev musl-dev openssh-client openssl-dev - checkout - - run: pip install tox - - run: tox -e "py27-cov{3,4,41}-{default,pyyaml}" - - test-py34: - docker: - - image: python:3.4-alpine - steps: - - run: apk add --no-cache git openssh-client - - checkout - - run: pip install tox - - run: tox -e "py34-cov{3,4,41}-{default,pyyaml}" - - test-py35: - docker: - - image: python:3.5-alpine - steps: - - run: apk add --no-cache git openssh-client - - checkout - - run: pip install tox - - run: tox -e "py35-cov{3,4,41}-{default,pyyaml}" - - test-py36: - docker: - - image: python:3.6-alpine - steps: - - run: apk add --no-cache git openssh-client - - checkout - - run: pip install tox - - run: tox -e "py36-cov41-{default,pyyaml}" - - test-py37: - docker: - - image: python:3.7-alpine - steps: - - run: apk add --no-cache git openssh-client - - checkout - - run: pip install tox - - run: tox -e "py37-cov41-{default,pyyaml}" - - test-pypy2-5: - docker: - - image: pypy:2-5.8.0 - steps: - - checkout - - run: pip install tox - - run: tox -e "pypy-cov{3,4,41}-{default,pyyaml}" - - test-pypy2-6: - docker: - - image: pypy:2-6.0.0 - steps: - - checkout - - run: pip install tox - - run: tox -e "pypy-cov{3,4,41}-{default,pyyaml}" - - test-pypy3-5: - docker: - - image: pypy:3-5.8.0 - steps: - - checkout - - run: pip install tox - - run: tox -e "pypy3-cov{3,4,41}-{default,pyyaml}" - - test-pypy3-6: - docker: - - image: pypy:3-6.0.0 - steps: - - checkout - - run: pip install tox - - run: tox -e "pypy3-cov{3,4,41}-{default,pyyaml}" + - run: pip install tox tox-factor + - unless: + condition: <<parameters.cov_version>> + steps: + - run: tox -f <<parameters.tox_environment>> + - run: tox -e coveralls41 + - when: + condition: <<parameters.cov_version>> + steps: + - run: tox -f <<parameters.tox_environment>>-cov<<parameters.cov_version>> + - run: tox -e coveralls<<parameters.cov_version>> + + # TODO: by introspecting `docker_image` (or `tox_environment`), we could + # these job definitions + toxpypy: + docker: + - image: pypy:<<parameters.docker_image>> + parameters: + docker_image: + type: string + # TODO: figure out `<<parameters.docker_image>>.replace('.','')` + tox_environment: + type: string + cov_version: + default: "" + type: string + steps: + - checkout + - run: pip install tox tox-factor + - unless: + condition: <<parameters.cov_version>> + steps: + - run: tox -f <<parameters.tox_environment>> + - run: tox -e coveralls41 + - when: + condition: <<parameters.cov_version>> + steps: + - run: tox -f <<parameters.tox_environment>>-cov<<parameters.cov_version>> + - run: tox -e coveralls<<parameters.cov_version>> workflows: - version: 2 - test-all-envs: + run-jobs: jobs: - - check - - test-py27 - - test-py34 - - test-py35 - - test-py36 - - test-py37 - - test-pypy2-5 - - test-pypy2-6 - - test-pypy3-5 - - test-pypy3-6 + - linter/pre-commit: + python_version: 3.7.5 + + - toxpy: + name: test-py2.7 + docker_image: '2.7' + tox_environment: py27 + - toxpy: + name: test-py3.4 + docker_image: '3.4' + tox_environment: py34 + - toxpy: + name: test-py3.5 + docker_image: '3.5' + tox_environment: py35 + - toxpy: + name: test-py3.6-cov4 + docker_image: '3.6' + tox_environment: py36 + cov_version: '41' + - toxpy: + name: test-py3.6-cov5 + docker_image: '3.6' + tox_environment: py36 + cov_version: '5' + - toxpy: + name: test-py3.7-cov4 + docker_image: '3.7' + tox_environment: py37 + cov_version: '41' + - toxpy: + name: test-py3.7-cov5 + docker_image: '3.7' + tox_environment: py37 + cov_version: '5' + - toxpy: + name: test-py3.8-cov4 + docker_image: '3.8' + tox_environment: py38 + cov_version: '41' + - toxpy: + name: test-py3.8-cov5 + docker_image: '3.8' + tox_environment: py38 + cov_version: '5' + + - toxpypy: + name: test-pypy2-5 + docker_image: 2-5 + tox_environment: pypy + - toxpypy: + name: test-pypy2-6 + docker_image: 2-6 + tox_environment: pypy + - toxpypy: + name: test-pypy2-7 + docker_image: 2-7 + tox_environment: pypy + + - toxpypy: + name: test-pypy3-5-cov4 + docker_image: 3-5 + tox_environment: pypy3 + cov_version: '41' + - toxpypy: + name: test-pypy3-5-cov5 + docker_image: 3-5 + tox_environment: pypy3 + cov_version: '5' + - toxpypy: + name: test-pypy3-6-cov4 + docker_image: 3-6 + tox_environment: pypy3 + cov_version: '41' + - toxpypy: + name: test-pypy3-6-cov5 + docker_image: 3-6 + tox_environment: pypy3 + cov_version: '5' + - toxpypy: + name: test-pypy3-7-cov4 + docker_image: 3-7 + tox_environment: pypy3 + cov_version: '41' + - toxpypy: + name: test-pypy3-7-cov5 + docker_image: 3-7 + tox_environment: pypy3 + cov_version: '5' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/.github/workflows/pythonpackage.yml new/coveralls-python-1.11.1/.github/workflows/pythonpackage.yml --- old/coveralls-python-1.8.2/.github/workflows/pythonpackage.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/coveralls-python-1.11.1/.github/workflows/pythonpackage.yml 2020-02-15 01:13:01.000000000 +0100 @@ -0,0 +1,26 @@ +name: coveralls + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + max-parallel: 4 + matrix: + python-version: [2.7, 3.5, 3.6, 3.7, 3.8] + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 # no history, just HEAD + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip tox tox-gh-actions + - name: Test with tox + run: | + tox diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/.pre-commit-config.yaml new/coveralls-python-1.11.1/.pre-commit-config.yaml --- old/coveralls-python-1.8.2/.pre-commit-config.yaml 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/.pre-commit-config.yaml 2020-02-15 01:13:01.000000000 +0100 @@ -31,6 +31,7 @@ args: - --max-line-length=79 - --ignore-imports=yes + - -d broad-except - -d fixme - -d import-error - -d invalid-name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/.travis.yml new/coveralls-python-1.11.1/.travis.yml --- old/coveralls-python-1.8.2/.travis.yml 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/.travis.yml 2020-02-15 01:13:01.000000000 +0100 @@ -1,24 +1,18 @@ sudo: false + language: python python: - 2.7 - 3.4 - 3.5 + - 3.6 + - 3.7 + - 3.8 - pypy - pypy3 -env: - - $COVPYYAML=cov3-default,coveralls3 - - $COVPYYAML=cov4-pyyaml,coveralls4 - - $COVPYYAML=cov41-pyyaml,coveralls41 -matrix: - include: - - python: 3.6 - env: $COVPYYAML=cov41-pyyaml,coveralls41 - - python: 3.7 - dist: xenial # https://github.com/travis-ci/travis-ci/issues/9815 - sudo: true - env: $COVPYYAML=cov41-pyyaml,coveralls41 + install: - pip install tox + script: - - tox -e $(echo py$TRAVIS_PYTHON_VERSION | tr -d . | sed -e 's/pypypy/pypy/')-$COVPYYAML + - tox -e $(echo py$TRAVIS_PYTHON_VERSION | tr -d . | sed -e 's/pypypy/pypy/')-cov41-pyyaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/CHANGELOG.md new/coveralls-python-1.11.1/CHANGELOG.md --- old/coveralls-python-1.8.2/CHANGELOG.md 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/CHANGELOG.md 2020-02-15 01:13:01.000000000 +0100 @@ -1,3 +1,60 @@ +<a name="1.11.1"></a> +## 1.11.1 (2020-02-15) + +#### Bug Fixes + +* **github:** rename to github-actions ([9e65a059](9e65a059)) + This fixes a regression introduced with v1.11.0, which may have prevented + usage of this library on Github Actions. + +<a name="1.11.0"></a> +## 1.11.0 (2020-02-12) + +#### Fixes + +* **github:** add service_number for github actions ([9f93bd8e](9f93bd8e)) + This should fix support for parallel builds. + +#### Compatibility + +* Python 2.7 and 3.4 are now officially End-Of-Life'd. Consider them deprecated + from the perspective of this package -- we'll remove them in an upcoming + release (likely the first one which requires non-trivial work to continue + supporting them!). + +<a name="1.10.0"></a> +## 1.10.0 (2019-12-31) + +#### Features + +* support coverage>=5.0 (#214) ([4a917402](4a917402)) + +<a name="1.9.2"></a> +## 1.9.2 (2019-12-03) + +#### Bug Fixes + +* **github:** fixup incorrect API usage (#209) ([c338cab4](c338cab4)) + +<a name="1.9.1"></a> +## 1.9.1 (2019-12-03) + +#### Compatibility + +* this release marks Python 3.8 as officially supported. Earlier versions probably + supported Python 3.8 too, but now we're *sure*. + +<a name="1.9.0"></a> +## 1.9.0 (2019-12-03) + +#### Features + +* **support:** support Github Actions CI (#207) ([817119c3](817119c3)) + +#### Bug Fixes + +* **compatibility:** fixup coverage.__version__ comparisons (#208) ([03a57a9a](03a57a9a)) + <a name="1.8.2"></a> ## 1.8.2 (2019-07-29) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/README.rst new/coveralls-python-1.11.1/README.rst --- old/coveralls-python-1.8.2/README.rst 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/README.rst 2020-02-15 01:13:01.000000000 +0100 @@ -1,29 +1,38 @@ -Coveralls for python +Coveralls for Python ==================== -.. image:: https://img.shields.io/circleci/project/github/coveralls-clients/coveralls-python/master.svg?style=flat-square - :target: https://circleci.com/gh/coveralls-clients/coveralls-python +:Test Status: + .. image:: https://img.shields.io/circleci/project/github/coveralls-clients/coveralls-python/master.svg?style=flat-square&label=CircleCI + :target: https://circleci.com/gh/coveralls-clients/coveralls-python -.. image:: https://img.shields.io/travis/coveralls-clients/coveralls-python/master.svg?style=flat-square - :target: https://travis-ci.org/coveralls-clients/coveralls-python + .. image:: https://img.shields.io/travis/coveralls-clients/coveralls-python/master.svg?style=flat-square&label=TravisCI + :target: https://travis-ci.org/coveralls-clients/coveralls-python -.. image:: https://img.shields.io/coveralls/coveralls-clients/coveralls-python/master.svg?style=flat-square - :target: https://coveralls.io/r/coveralls-clients/coveralls-python + .. image:: https://img.shields.io/github/workflow/status/coveralls-clients/coveralls-python/coveralls/master?style=flat-square&label=Github%20Actions + :target: https://github.com/coveralls-clients/coveralls-python/actions -.. image:: https://img.shields.io/pypi/dm/coveralls.svg?style=flat-square - :target: https://pypi.org/project/coveralls/ + .. image:: https://img.shields.io/coveralls/coveralls-clients/coveralls-python/master.svg?style=flat-square&label=Coverage + :target: https://coveralls.io/r/coveralls-clients/coveralls-python -.. image:: https://anaconda.org/conda-forge/coveralls/badges/version.svg - :target: https://anaconda.org/conda-forge/coveralls +:Version Info: + .. image:: https://img.shields.io/conda/v/conda-forge/coveralls?style=flat-square&label=Conda + :target: https://anaconda.org/conda-forge/coveralls -.. image:: https://img.shields.io/pypi/v/coveralls.svg?style=flat-square - :target: https://pypi.org/project/coveralls/ + .. image:: https://img.shields.io/pypi/v/coveralls.svg?style=flat-square&label=PyPI + :target: https://pypi.org/project/coveralls/ -.. image:: https://img.shields.io/pypi/pyversions/coveralls.svg?style=flat-square - :target: https://pypi.org/project/coveralls/ + .. image:: https://img.shields.io/conda/dn/conda-forge/coveralls?label=Conda%20Downloads&style=flat-square + :target: https://anaconda.org/conda-forge/coveralls -.. image:: https://img.shields.io/pypi/implementation/coveralls.svg?style=flat-square - :target: https://pypi.org/project/coveralls/ + .. image:: https://img.shields.io/pypi/dm/coveralls.svg?style=flat-square&label=PyPI%20Downloads + :target: https://pypi.org/project/coveralls/ + +:Compatibility: + .. image:: https://img.shields.io/pypi/pyversions/coveralls.svg?style=flat-square&label=Python%20Versions + :target: https://pypi.org/project/coveralls/ + + .. image:: https://img.shields.io/pypi/implementation/coveralls.svg?style=flat-square&label=Python%20Implementations + :target: https://pypi.org/project/coveralls/ `coveralls.io`_ is a service for publishing your coverage stats online. This package provides seamless integration with `coverage.py`_ (and thus ``pytest``, ``nosetests``, etc...) in your Python projects:: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/coveralls/api.py new/coveralls-python-1.11.1/coveralls/api.py --- old/coveralls-python-1.8.2/coveralls/api.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/coveralls/api.py 2020-02-15 01:13:01.000000000 +0100 @@ -51,7 +51,13 @@ name, job, pr = self.load_config_from_ci_environment() self.config['service_name'] = self.config.get('service_name', name) if job: - self.config['service_job_id'] = job + # N.B. Github Actions uses a different chunk of the Coveralls + # config when running parallel builds, ie. `service_number` instead + # of `service_job_id`. + if name.startswith('github'): + self.config['service_number'] = job + else: + self.config['service_job_id'] = job if pr: self.config['service_pull_request'] = pr @@ -62,8 +68,8 @@ return raise CoverallsException( - 'Not on Travis or CircleCI. You have to provide either repo_token ' - 'in {} or set the COVERALLS_REPO_TOKEN env var.'.format( + 'Not on TravisCI. You have to provide either repo_token in {} or ' + 'set the COVERALLS_REPO_TOKEN env var.'.format( self.config_filename)) @staticmethod @@ -84,6 +90,15 @@ return 'circle-ci', os.environ.get('CIRCLE_BUILD_NUM'), pr @staticmethod + def load_config_from_github(): + service_number = os.environ.get('GITHUB_SHA') + pr = None + if os.environ.get('GITHUB_REF', '').startswith('refs/pull/'): + pr = os.environ.get('GITHUB_REF', '//').split('/')[2] + service_number += '-PR-{0}'.format(pr) + return 'github-actions', service_number, pr + + @staticmethod def load_config_from_jenkins(): pr = os.environ.get('CI_PULL_REQUEST', '').split('/')[-1] or None return 'jenkins', os.environ.get('BUILD_NUMBER'), pr @@ -108,8 +123,9 @@ elif os.environ.get('BUILDKITE'): name, job, pr = self.load_config_from_buildkite() elif os.environ.get('CIRCLECI'): - self._token_required = False name, job, pr = self.load_config_from_circle() + elif os.environ.get('GITHUB_ACTIONS'): + name, job, pr = self.load_config_from_github() elif os.environ.get('JENKINS_HOME'): name, job, pr = self.load_config_from_jenkins() elif os.environ.get('TRAVIS'): @@ -257,7 +273,7 @@ else: workman.get_data() - return CoverallReporter(workman, workman.config).report() + return CoverallReporter(workman, workman.config).coverage @staticmethod def debug_bad_encoding(data): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/coveralls/git.py new/coveralls-python-1.11.1/coveralls/git.py --- old/coveralls-python-1.8.2/coveralls/git.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/coveralls/git.py 2020-02-15 01:13:01.000000000 +0100 @@ -34,6 +34,29 @@ return unicode(glog) # pylint: disable=undefined-variable +def git_branch(): + branch = None + if os.environ.get('GITHUB_ACTIONS'): + github_ref = os.environ.get('GITHUB_REF') + if github_ref.startswith('refs/heads/'): + # E.g. in push events. + branch = github_ref.split('/', 2)[-1] + else: + # E.g. in pull_request events. + branch = os.environ.get('GITHUB_HEAD_REF') + else: + branch = (os.environ.get('APPVEYOR_REPO_BRANCH') + or os.environ.get('BUILDKITE_BRANCH') + or os.environ.get('CI_BRANCH') + or os.environ.get('CIRCLE_BRANCH') + or os.environ.get('GIT_BRANCH') + or os.environ.get('TRAVIS_BRANCH') + or os.environ.get('BRANCH_NAME') + or run_command('git', 'rev-parse', '--abbrev-ref', 'HEAD')) + + return branch + + def git_info(): """ A hash of Git data that can be used to display more information to users. @@ -56,14 +79,7 @@ } """ try: - branch = (os.environ.get('APPVEYOR_REPO_BRANCH') - or os.environ.get('BUILDKITE_BRANCH') - or os.environ.get('CI_BRANCH') - or os.environ.get('CIRCLE_BRANCH') - or os.environ.get('GIT_BRANCH') - or os.environ.get('TRAVIS_BRANCH') - or os.environ.get('BRANCH_NAME') - or run_command('git', 'rev-parse', '--abbrev-ref', 'HEAD')) + branch = git_branch() head = { 'id': gitlog('%H'), 'author_name': gitlog('%aN'), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/coveralls/reporter.py new/coveralls-python-1.11.1/coveralls/reporter.py --- old/coveralls-python-1.8.2/coveralls/reporter.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/coveralls/reporter.py 2020-02-15 01:13:01.000000000 +0100 @@ -7,7 +7,6 @@ from coverage.misc import NoSource from coverage.misc import NotPython from coverage.phystokens import source_encoding -from coverage.report import Reporter from .exception import CoverallsException @@ -15,47 +14,137 @@ log = logging.getLogger('coveralls.reporter') -class CoverallReporter(Reporter): +class CoverallReporter(object): """Custom coverage.py reporter for coveralls.io""" - def __init__(self, *args, **kwargs): - self.source_files = [] - super(CoverallReporter, self).__init__(*args, **kwargs) + def __init__(self, cov, conf): + self.coverage = [] + self.report(cov, conf) + + def report5(self, cov): + # N.B. this method is 99% copied from the coverage source code; + # unfortunately, the coverage v5 style of `get_analysis_to_report` + # errors out entirely if any source file has issues -- which would be a + # breaking change for us. In the interest of backwards compatibility, + # I've copied their code here so we can maintain the same `coveralls` + # API regardless of which `coverage` version is being used. + # + # TODO: deprecate the relevant APIs so we can just use the coverage + # public API directly. + # + # from coverage.report import get_analysis_to_report + # try: + # for cu, analyzed in get_analysis_to_report(cov, None): + # self.parse_file(cu, analyzed) + # except NoSource: + # # Note that this behavior must necessarily change between + # # coverage<5 and coverage>=5, as we are no longer interweaving + # # with get_analysis_to_report (a single exception breaks the + # # whole loop) + # log.warning('No source for at least one file') + # except NotPython: + # # Note that this behavior must necessarily change between + # # coverage<5 and coverage>=5, as we are no longer interweaving + # # with get_analysis_to_report (a single exception breaks the + # # whole loop) + # log.warning('A source file is not python') + # except CoverageException as e: + # if str(e) != 'No data to report.': + # raise + + from coverage.files import FnmatchMatcher, prep_patterns + + # get_analysis_to_report starts here; changes marked with TODOs + file_reporters = cov._get_file_reporters(None) # pylint: disable=W0212 + config = cov.config + + if config.report_include: + matcher = FnmatchMatcher(prep_patterns(config.report_include)) + file_reporters = [fr for fr in file_reporters + if matcher.match(fr.filename)] + + if config.report_omit: + matcher = FnmatchMatcher(prep_patterns(config.report_omit)) + file_reporters = [fr for fr in file_reporters + if not matcher.match(fr.filename)] + + # TODO: deprecate changes + # if not file_reporters: + # raise CoverageException("No data to report.") - def report(self, morfs=None): + for fr in sorted(file_reporters): + try: + analysis = cov._analyze(fr) # pylint: disable=W0212 + except NoSource: + if not config.ignore_errors: + # TODO: deprecate changes + # raise + log.warning('No source for %s', fr.filename) + except NotPython: + # Only report errors for .py files, and only if we didn't + # explicitly suppress those errors. + # NotPython is only raised by PythonFileReporter, which has a + # should_be_python() method. + if fr.should_be_python(): + if config.ignore_errors: + msg = "Couldn't parse Python file '{}'".format( + fr.filename) + cov._warn(msg, # pylint: disable=W0212 + slug="couldnt-parse") + else: + # TODO: deprecate changes + # raise + log.warning('Source file is not python %s', + fr.filename) + else: + # TODO: deprecate changes (well, this one is fine /shrug) + # yield (fr, analysis) + self.parse_file(fr, analysis) + + def report(self, cov, conf, morfs=None): """ Generate a part of json report for coveralls `morfs` is a list of modules or filenames. `outfile` is a file object to write the json to. """ + # pylint: disable=too-many-branches + try: + from coverage.report import Reporter + self.reporter = Reporter(cov, conf) + except ImportError: # coverage >= 5.0 + return self.report5(cov) + units = None - if hasattr(self, 'find_code_units'): - self.find_code_units(morfs) + if hasattr(self.reporter, 'find_code_units'): + self.reporter.find_code_units(morfs) else: - units = self.find_file_reporters(morfs) + units = self.reporter.find_file_reporters(morfs) if units is None: - if hasattr(self, 'code_units'): - units = self.code_units + if hasattr(self.reporter, 'code_units'): + units = self.reporter.code_units else: - units = self.file_reporters + units = self.reporter.file_reporters for cu in units: try: - analyzed = self.coverage._analyze(cu) # pylint: disable=W0212 + _fn = self.reporter.coverage._analyze # pylint: disable=W0212 + analyzed = _fn(cu) self.parse_file(cu, analyzed) except NoSource: - if not self.config.ignore_errors: + if not self.reporter.config.ignore_errors: log.warning('No source for %s', cu.filename) except NotPython: # Only report errors for .py files, and only if we didn't # explicitly suppress those errors. - if cu.should_be_python() and not self.config.ignore_errors: + if (cu.should_be_python() + and not self.reporter.config.ignore_errors): log.warning('Source file is not python %s', cu.filename) except KeyError: - cov3x = __version__[0] < 4 - cov40 = __version__[0] == 4 and __version__[1] < 1 + version = [int(x) for x in __version__.split('.')] + cov3x = version[0] < 4 + cov40 = version[0] == 4 and version[1] < 1 if cov3x or cov40: raise CoverallsException( 'Old (<4.1) versions of coverage.py do not work ' @@ -65,7 +154,7 @@ raise - return self.source_files + return self.coverage @staticmethod def get_hits(line_num, analysis): @@ -100,7 +189,14 @@ if not analysis.has_arcs(): return None - branch_lines = analysis.branch_lines() + if not hasattr(analysis, 'branch_lines'): + # N.B. switching to the public method analysis.missing_branch_arcs + # would work for half of what we need, but there doesn't seem to be + # an equivalent analysis.executed_branch_arcs + branch_lines = analysis._branch_lines() # pylint: disable=W0212 + else: + branch_lines = analysis.branch_lines() + branches = [] for l1, l2 in analysis.arcs_executed(): @@ -159,4 +255,4 @@ if branches: results['branches'] = branches - self.source_files.append(results) + self.coverage.append(results) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/coveralls/version.py new/coveralls-python-1.11.1/coveralls/version.py --- old/coveralls-python-1.8.2/coveralls/version.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/coveralls/version.py 2020-02-15 01:13:01.000000000 +0100 @@ -1 +1 @@ -__version__ = '1.8.2' +__version__ = '1.11.1' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/docs/index.rst new/coveralls-python-1.11.1/docs/index.rst --- old/coveralls-python-1.8.2/docs/index.rst 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/docs/index.rst 2020-02-15 01:13:01.000000000 +0100 @@ -34,4 +34,4 @@ release .. _coveralls.io: https://coveralls.io/ -.. _coverage.py: https://coverage.readthedocs.io/en/coverage-4.4.1/ +.. _coverage.py: https://coverage.readthedocs.io/en/latest/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/docs/release.rst new/coveralls-python-1.11.1/docs/release.rst --- old/coveralls-python-1.8.2/docs/release.rst 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/docs/release.rst 2020-02-15 01:13:01.000000000 +0100 @@ -7,11 +7,10 @@ 1. Update the ``CHANGELOG.md`` with the new version (``clog -C CHANGELOG.md -F --setversion x.y.z``). 2. Bump the version number in ``version.py``. -3. Tag that commit with the version number (``git tag x.y.z``). -4. Push the new tag to GitHub. -5. Create a new `GitHub release`_. - -Make sure to push the release commit to GitHub. +3. Commit and push (``git commit -am 'chore(release): bump version' && git push``) +4. Tag that commit with the version number (``git tag x.y.z``). +5. Push the new tag to GitHub. +6. Create a new `GitHub release`_. To create a new PyPI release, do the following: @@ -22,7 +21,9 @@ 1. Fork `coveralls-feedstock`_. 2. Update ``recipe/meta.yaml`` with the new version number and `sha`_. -3. Create a PR. A conda-forge maintainer will get to it eventually. +3. Create a PR. +4. Comment on your own PR with: "@conda-forge-admin, please rerender". +5. Merge along with the automated commit from Conda. .. _coveralls: https://pypi.org/project/coveralls/ .. _coveralls-feedstock: https://github.com/conda-forge/coveralls-feedstock diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/docs/usage/configuration.rst new/coveralls-python-1.11.1/docs/usage/configuration.rst --- old/coveralls-python-1.8.2/docs/usage/configuration.rst 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/docs/usage/configuration.rst 2020-02-15 01:13:01.000000000 +0100 @@ -3,7 +3,7 @@ Configuration ============= -coveralls-python often works without any outside configuration by examining the environment it is being run in. Special handling has been added for AppVeyor, BuildKite, CircleCI, Jenkins, and TravisCI to make coveralls-python as close to "plug and play" as possible. +coveralls-python often works without any outside configuration by examining the environment it is being run in. Special handling has been added for AppVeyor, BuildKite, CircleCI, Github Actions, Jenkins, and TravisCI to make coveralls-python as close to "plug and play" as possible. Most often, you will simply need to run coveralls-python with no additional options after you have run your coverage suite:: @@ -21,7 +21,7 @@ If you are interested in merging the coverage results between multiple languages/projects, see our :ref:`multi-language <multilang>` documentation. -If coveralls-python is being run on CircleCI or TravisCI, it will automatically set the token for communication with coveralls.io. Otherwise, you should set the environment variable ``COVERALLS_REPO_TOKEN``, which can be found on the dashboard for your project in coveralls.io:: +If coveralls-python is being run on TravisCI, it will automatically set the token for communication with coveralls.io. Otherwise, you should set the environment variable ``COVERALLS_REPO_TOKEN``, which can be found on the dashboard for your project in coveralls.io:: COVERALLS_REPO_TOKEN=mV2Jajb8y3c6AFlcVNagHO20fiZNkXPVy coveralls diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/docs/usage/index.rst new/coveralls-python-1.11.1/docs/usage/index.rst --- old/coveralls-python-1.8.2/docs/usage/index.rst 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/docs/usage/index.rst 2020-02-15 01:13:01.000000000 +0100 @@ -3,7 +3,7 @@ This package works with any CI environment. Special handling has been included for some CI service providers, but coveralls-python can run anywhere. -To get started with coveralls-python, make sure to `add your repo`_ on the coveralls.io website. If you will be using coveralls-python on CircleCI or TravisCI, you're done here -- otherwise, take note of the "repo token" in the coveralls.io dashboard. +To get started with coveralls-python, make sure to `add your repo`_ on the coveralls.io website. If you will be using coveralls-python on TravisCI, you're done here -- otherwise, take note of the "repo token" in the coveralls.io dashboard. After that, its as simple as installing coveralls-python, collecting coverage results, and sending them to coveralls.io. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/docs/usage/tox.rst new/coveralls-python-1.11.1/docs/usage/tox.rst --- old/coveralls-python-1.8.2/docs/usage/tox.rst 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/docs/usage/tox.rst 2020-02-15 01:13:01.000000000 +0100 @@ -56,6 +56,19 @@ - ``CIRCLE_BRANCH`` - ``CI_PULL_REQUEST`` +Github Actions +-------------- +:: + + passenv = GITHUB_* + +All variables: + +- ``GITHUB_ACTIONS`` +- ``GITHUB_REF`` +- ``GITHUB_SHA`` +- ``GITHUB_HEAD_REF`` + Jenkins ------- :: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/setup.py new/coveralls-python-1.11.1/setup.py --- old/coveralls-python-1.8.2/setup.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/setup.py 2020-02-15 01:13:01.000000000 +0100 @@ -33,13 +33,15 @@ ], }, install_requires=[ - 'coverage>=3.6,<5.0', + 'coverage>=3.6,<6.0', 'docopt>=0.6.1', 'requests>=1.0.0', ], - tests_require=['mock', 'pytest', 'sh>=1.08'], + tests_require=['mock', 'pytest'], extras_require={ - 'yaml': ['PyYAML>=3.10'], + # N.B. PyYAML 5.3 dropped support for Python 3.4... which we should + # also do... + 'yaml': ['PyYAML>=3.10,<5.3'], ':python_version < "3"': ['urllib3[secure]'], }, classifiers=[ @@ -54,6 +56,7 @@ 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/tests/api/configuration_test.py new/coveralls-python-1.11.1/tests/api/configuration_test.py --- old/coveralls-python-1.8.2/tests/api/configuration_test.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/tests/api/configuration_test.py 2020-02-15 01:13:01.000000000 +0100 @@ -7,7 +7,6 @@ import mock import pytest -import sh try: import yaml except ImportError: @@ -22,7 +21,7 @@ def setUp(self): self.dir = tempfile.mkdtemp() - sh.cd(self.dir) + os.chdir(self.dir) with open('.coveralls.mock', 'w+') as fp: fp.write('repo_token: xxx\n') fp.write('service_name: jenkins\n') @@ -65,8 +64,8 @@ Coveralls() assert str(excinfo.value) == ( - 'Not on Travis or CircleCI. You have to provide either repo_token ' - 'in .coveralls.mock or set the COVERALLS_REPO_TOKEN env var.') + 'Not on TravisCI. You have to provide either repo_token in ' + '.coveralls.mock or set the COVERALLS_REPO_TOKEN env var.') @mock.patch.dict(os.environ, {'APPVEYOR': 'True', 'APPVEYOR_BUILD_ID': '1234567', @@ -105,13 +104,39 @@ 'CI_PULL_REQUEST': 'https://github.com/org/repo/pull/9999'}, clear=True) def test_circleci_no_config(self): - cover = Coveralls() + cover = Coveralls(repo_token='xxx') assert cover.config['service_name'] == 'circle-ci' assert cover.config['service_job_id'] == '888' assert cover.config['service_pull_request'] == '9999' @mock.patch.dict( os.environ, + {'GITHUB_ACTIONS': 'true', + 'GITHUB_REF': 'refs/pull/1234/merge', + 'GITHUB_SHA': 'bb0e00166b28f49db04d6a8b8cb4bddb5afa529f', + 'GITHUB_HEAD_REF': 'fixup-branch'}, + clear=True) + def test_github_no_config(self): + cover = Coveralls(repo_token='xxx') + assert cover.config['service_name'] == 'github-actions' + assert cover.config['service_pull_request'] == '1234' + assert 'service_job_id' not in cover.config + + @mock.patch.dict( + os.environ, + {'GITHUB_ACTIONS': 'true', + 'GITHUB_REF': 'refs/heads/master', + 'GITHUB_SHA': 'bb0e00166b28f49db04d6a8b8cb4bddb5afa529f', + 'GITHUB_HEAD_REF': ''}, + clear=True) + def test_github_no_config_no_pr(self): + cover = Coveralls(repo_token='xxx') + assert cover.config['service_name'] == 'github-actions' + assert 'service_pull_request' not in cover.config + assert 'service_job_id' not in cover.config + + @mock.patch.dict( + os.environ, {'JENKINS_HOME': '/var/lib/jenkins', 'BUILD_NUMBER': '888', 'CI_PULL_REQUEST': 'https://github.com/org/repo/pull/9999'}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/tests/api/encoding_test.py new/coveralls-python-1.11.1/tests/api/encoding_test.py --- old/coveralls-python-1.8.2/tests/api/encoding_test.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/tests/api/encoding_test.py 2020-02-15 01:13:01.000000000 +0100 @@ -2,11 +2,11 @@ import json import logging import os +import subprocess import sys import coverage import pytest -import sh from coveralls import Coveralls @@ -17,7 +17,7 @@ def test_non_unicode(): os.chdir(NONUNICODE_DIR) - sh.coverage('run', 'nonunicode.py') + subprocess.call(['coverage', 'run', 'nonunicode.py'], cwd=NONUNICODE_DIR) actual_json = json.dumps(Coveralls(repo_token='xxx').get_coverage()) expected_json_part = ( @@ -32,7 +32,7 @@ reason='coverage 4 not affected') def test_malformed_encoding_declaration(capfd): os.chdir(NONUNICODE_DIR) - sh.coverage('run', 'malformed.py') + subprocess.call(['coverage', 'run', 'malformed.py'], cwd=NONUNICODE_DIR) logging.getLogger('coveralls').addHandler(logging.StreamHandler()) assert Coveralls(repo_token='xxx').get_coverage() == [] @@ -46,7 +46,7 @@ reason='coverage 3 fails') def test_malformed_encoding_declaration_py3_or_coverage4(): os.chdir(NONUNICODE_DIR) - sh.coverage('run', 'malformed.py') + subprocess.call(['coverage', 'run', 'malformed.py'], cwd=NONUNICODE_DIR) result = Coveralls(repo_token='xxx').get_coverage() assert len(result) == 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/tests/api/reporter_test.py new/coveralls-python-1.11.1/tests/api/reporter_test.py --- old/coveralls-python-1.8.2/tests/api/reporter_test.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/tests/api/reporter_test.py 2020-02-15 01:13:01.000000000 +0100 @@ -1,10 +1,9 @@ # coding: utf-8 # pylint: disable=no-self-use import os +import subprocess import unittest -import sh - from coveralls import Coveralls @@ -23,11 +22,17 @@ def setUp(self): os.chdir(EXAMPLE_DIR) - sh.rm('-f', '.coverage') - sh.rm('-f', 'extra.py') + try: + os.remove('.coverage') + except Exception: + pass + try: + os.remove('extra.py') + except Exception: + pass def test_reporter(self): - sh.coverage('run', 'runtests.py') + subprocess.call(['coverage', 'run', 'runtests.py'], cwd=EXAMPLE_DIR) results = Coveralls(repo_token='xxx').get_coverage() assert len(results) == 2 @@ -59,7 +64,8 @@ 'coverage': [None, 1, None, 1, 1, 1, 1]}) def test_reporter_with_branches(self): - sh.coverage('run', '--branch', 'runtests.py') + subprocess.call(['coverage', 'run', '--branch', 'runtests.py'], + cwd=EXAMPLE_DIR) results = Coveralls(repo_token='xxx').get_coverage() assert len(results) == 2 @@ -98,13 +104,19 @@ 'coverage': [None, 1, None, 1, 1, 1, 1]}) def test_missing_file(self): - sh.echo('print("Python rocks!")', _out='extra.py') - sh.coverage('run', 'extra.py') - sh.rm('-f', 'extra.py') + with open('extra.py', 'w') as f: + f.write('print("Python rocks!")\n') + subprocess.call(['coverage', 'run', 'extra.py'], cwd=EXAMPLE_DIR) + try: + os.remove('extra.py') + except Exception: + pass assert Coveralls(repo_token='xxx').get_coverage() == [] def test_not_python(self): - sh.echo('print("Python rocks!")', _out='extra.py') - sh.coverage('run', 'extra.py') - sh.echo("<h1>This isn't python!</h1>", _out='extra.py') + with open('extra.py', 'w') as f: + f.write('print("Python rocks!")\n') + subprocess.call(['coverage', 'run', 'extra.py'], cwd=EXAMPLE_DIR) + with open('extra.py', 'w') as f: + f.write("<h1>This isn't python!</h1>\n") assert Coveralls(repo_token='xxx').get_coverage() == [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/tests/api/wear_test.py new/coveralls-python-1.11.1/tests/api/wear_test.py --- old/coveralls-python-1.8.2/tests/api/wear_test.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/tests/api/wear_test.py 2020-02-15 01:13:01.000000000 +0100 @@ -8,7 +8,6 @@ import coverage import mock import pytest -import sh import coveralls from coveralls.api import log @@ -23,7 +22,10 @@ @mock.patch('coveralls.api.requests') class WearTest(unittest.TestCase): def setUp(self): - sh.rm('-f', '.coverage') + try: + os.remove('.coverage') + except Exception: + pass def test_wet_run(self, mock_requests): mock_requests.post.return_value.json.return_value = EXPECTED diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/tests/api_test.py new/coveralls-python-1.11.1/tests/api_test.py --- old/coveralls-python-1.8.2/tests/api_test.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/tests/api_test.py 2020-02-15 01:13:01.000000000 +0100 @@ -1,9 +1,12 @@ # coding: utf-8 import json +import os +import mock from coveralls import Coveralls +@mock.patch.dict(os.environ, {}, clear=True) def test_output_to_file(tmpdir): """Check we can write coveralls report into the file.""" test_log = tmpdir.join('test.log') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/tests/git_test.py new/coveralls-python-1.11.1/tests/git_test.py --- old/coveralls-python-1.8.2/tests/git_test.py 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/tests/git_test.py 2020-02-15 01:13:01.000000000 +0100 @@ -5,11 +5,11 @@ import os import re import shutil +import subprocess import tempfile import unittest import mock -import sh import coveralls.git @@ -25,15 +25,18 @@ def setUp(self): self.dir = tempfile.mkdtemp() - sh.cd(self.dir) - sh.touch('README') + os.chdir(self.dir) + open('README', 'a').close() - sh.git.init() - sh.git.config('user.name', '"{}"'.format(GIT_NAME)) - sh.git.config('user.email', '"{}"'.format(GIT_EMAIL)) - sh.git.add('README') - sh.git.commit('-m', GIT_COMMIT_MSG) - sh.git.remote('add', GIT_REMOTE, GIT_URL) + subprocess.call(['git', 'init'], cwd=self.dir) + subprocess.call(['git', 'config', 'user.name', + '"{}"'.format(GIT_NAME)], cwd=self.dir) + subprocess.call(['git', 'config', 'user.email', + '"{}"'.format(GIT_EMAIL)], cwd=self.dir) + subprocess.call(['git', 'add', 'README'], cwd=self.dir) + subprocess.call(['git', 'commit', '-m', GIT_COMMIT_MSG], cwd=self.dir) + subprocess.call(['git', 'remote', 'add', GIT_REMOTE, GIT_URL], + cwd=self.dir) def tearDown(self): shutil.rmtree(self.dir) @@ -118,3 +121,25 @@ 'branch': 'master', }, } + + +class GitInfoTestBranch(GitTest): + @mock.patch.dict(os.environ, { + 'GITHUB_ACTIONS': 'true', + 'GITHUB_REF': 'refs/pull/1234/merge', + 'GITHUB_SHA': 'bb0e00166b28f49db04d6a8b8cb4bddb5afa529f', + 'GITHUB_HEAD_REF': 'fixup-branch' + }, clear=True) + def test_gitinfo_github_pr(self): + git_info = coveralls.git.git_info() + assert git_info['git']['branch'] == 'fixup-branch' + + @mock.patch.dict(os.environ, { + 'GITHUB_ACTIONS': 'true', + 'GITHUB_REF': 'refs/heads/master', + 'GITHUB_SHA': 'bb0e00166b28f49db04d6a8b8cb4bddb5afa529f', + 'GITHUB_HEAD_REF': '' + }, clear=True) + def test_gitinfo_github_nopr(self): + git_info = coveralls.git.git_info() + assert git_info['git']['branch'] == 'master' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/coveralls-python-1.8.2/tox.ini new/coveralls-python-1.11.1/tox.ini --- old/coveralls-python-1.8.2/tox.ini 2019-07-29 21:36:54.000000000 +0200 +++ new/coveralls-python-1.11.1/tox.ini 2020-02-15 01:13:01.000000000 +0100 @@ -1,5 +1,13 @@ [tox] -envlist = py{27,34,35,py,py3}-cov{3,4,41,5}-{default,pyyaml},py{36,37}-cov{41,5}-{default,pyyaml} +envlist = py{27,34,35,py}-cov{3,4,41}-{default,pyyaml},py{36,37,38,py3}-cov{41,5}-{default,pyyaml} + +[gh-actions] +python = + 2.7: py27 + 3.5: py35 + 3.6: py36-cov5 + 3.7: py37-cov5 + 3.8: py38-cov5 [testenv] passenv = * @@ -7,28 +15,15 @@ deps = mock pytest - sh - pyyaml: PyYAML>=3.10 + pyyaml: PyYAML>=3.10,<5.3 cov3: coverage<4.0 cov4: coverage>=4.0,<4.1 cov41: coverage>=4.1,<5.0 - cov5: coverage>=5.0 + cov5: coverage>=5.0,<6.0 commands = coverage run --branch --source=coveralls -m pytest tests/ coverage report -m -[testenv:coveralls3] -deps = - coverage<4.0 -commands = - coveralls --verbose - -[testenv:coveralls4] -deps = - coverage>=4.0,<4.1 -commands = - coveralls --verbose - [testenv:coveralls41] deps = coverage>=4.1,<5.0 @@ -37,6 +32,6 @@ [testenv:coveralls5] deps = - coverage>=5.0 + coverage>=5.0,<6.0 commands = coveralls --verbose