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 <[email protected]>
+
+- 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
[email protected](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