Implement code coverage in GitHub actions (#6441)
Implement code coverage in GitHub actions
This commit is contained in:
commit
00adb4e42f
|
@ -1,8 +1,7 @@
|
||||||
# evaluating GitHub actions for CI, disconsider failures when evaluating PRs
|
# evaluating GitHub actions for CI, disregard failures when evaluating PRs
|
||||||
#
|
#
|
||||||
# this is still missing:
|
# this is still missing:
|
||||||
# - deploy
|
# - deploy
|
||||||
# - coverage
|
|
||||||
# - upload github notes
|
# - upload github notes
|
||||||
#
|
#
|
||||||
name: main
|
name: main
|
||||||
|
@ -17,7 +16,6 @@ on:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
|
@ -86,6 +84,8 @@ jobs:
|
||||||
python: "3.7"
|
python: "3.7"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "py37-freeze"
|
tox_env: "py37-freeze"
|
||||||
|
# coverage does not apply for freeze test, skip it
|
||||||
|
skip_coverage: true
|
||||||
- name: "ubuntu-py38"
|
- name: "ubuntu-py38"
|
||||||
python: "3.8"
|
python: "3.8"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
|
@ -94,6 +94,8 @@ jobs:
|
||||||
python: "pypy3"
|
python: "pypy3"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "pypy3-xdist"
|
tox_env: "pypy3-xdist"
|
||||||
|
# coverage too slow with pypy3, skip it
|
||||||
|
skip_coverage: true
|
||||||
|
|
||||||
- name: "macos-py37"
|
- name: "macos-py37"
|
||||||
python: "3.7"
|
python: "3.7"
|
||||||
|
@ -118,6 +120,37 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install tox
|
pip install tox coverage
|
||||||
- name: Test
|
|
||||||
run: tox -e ${{ matrix.tox_env }}
|
- name: Test without coverage
|
||||||
|
if: "matrix.skip_coverage"
|
||||||
|
run: "tox -e ${{ matrix.tox_env }}"
|
||||||
|
|
||||||
|
- name: Test with coverage
|
||||||
|
if: "! matrix.skip_coverage"
|
||||||
|
env:
|
||||||
|
_PYTEST_TOX_COVERAGE_RUN: "coverage run -m"
|
||||||
|
COVERAGE_PROCESS_START: ".coveragerc"
|
||||||
|
_PYTEST_TOX_EXTRA_DEP: "coverage-enable-subprocess"
|
||||||
|
run: "tox -e ${{ matrix.tox_env }}"
|
||||||
|
|
||||||
|
- name: Prepare coverage token
|
||||||
|
if: success() && !matrix.skip_coverage && ( github.repository == 'pytest-dev/pytest' || github.event_name == 'pull_request' )
|
||||||
|
run: |
|
||||||
|
python scripts/append_codecov_token.py
|
||||||
|
|
||||||
|
- name: Combine coverage
|
||||||
|
if: success() && !matrix.skip_coverage
|
||||||
|
run: |
|
||||||
|
python -m coverage combine
|
||||||
|
python -m coverage xml
|
||||||
|
|
||||||
|
- name: Codecov upload
|
||||||
|
if: success() && !matrix.skip_coverage
|
||||||
|
uses: codecov/codecov-action@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.codecov }}
|
||||||
|
file: ./coverage.xml
|
||||||
|
flags: ${{ runner.os }}
|
||||||
|
fail_ci_if_error: false
|
||||||
|
name: ${{ matrix.name }}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
"""
|
||||||
|
Appends the codecov token to the 'codecov.yml' file at the root of the repository.
|
||||||
|
|
||||||
|
This is done by CI during PRs and builds on the pytest-dev repository so we can upload coverage, at least
|
||||||
|
until codecov grows some native integration like it has with Travis and AppVeyor.
|
||||||
|
|
||||||
|
See discussion in https://github.com/pytest-dev/pytest/pull/6441 for more information.
|
||||||
|
"""
|
||||||
|
import os.path
|
||||||
|
from textwrap import dedent
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
this_dir = os.path.dirname(__file__)
|
||||||
|
cov_file = os.path.join(this_dir, "..", "codecov.yml")
|
||||||
|
|
||||||
|
assert os.path.isfile(cov_file), "{cov_file} does not exist".format(
|
||||||
|
cov_file=cov_file
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(cov_file, "a") as f:
|
||||||
|
# token from: https://codecov.io/gh/pytest-dev/pytest/settings
|
||||||
|
# use same URL to regenerate it if needed
|
||||||
|
text = dedent(
|
||||||
|
"""
|
||||||
|
codecov:
|
||||||
|
token: "1eca3b1f-31a2-4fb8-a8c3-138b441b50a7"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
f.write(text)
|
||||||
|
|
||||||
|
print("Token updated:", cov_file)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
2
tox.ini
2
tox.ini
|
@ -26,7 +26,7 @@ passenv = USER USERNAME COVERAGE_* TRAVIS PYTEST_ADDOPTS TERM
|
||||||
setenv =
|
setenv =
|
||||||
_PYTEST_TOX_DEFAULT_POSARGS={env:_PYTEST_TOX_POSARGS_LSOF:} {env:_PYTEST_TOX_POSARGS_XDIST:}
|
_PYTEST_TOX_DEFAULT_POSARGS={env:_PYTEST_TOX_POSARGS_LSOF:} {env:_PYTEST_TOX_POSARGS_XDIST:}
|
||||||
|
|
||||||
# Configuration to run with coverage similar to Travis/Appveyor, e.g.
|
# Configuration to run with coverage similar to CI, e.g.
|
||||||
# "tox -e py37-coverage".
|
# "tox -e py37-coverage".
|
||||||
coverage: _PYTEST_TOX_COVERAGE_RUN=coverage run -m
|
coverage: _PYTEST_TOX_COVERAGE_RUN=coverage run -m
|
||||||
coverage: _PYTEST_TOX_EXTRA_DEP=coverage-enable-subprocess
|
coverage: _PYTEST_TOX_EXTRA_DEP=coverage-enable-subprocess
|
||||||
|
|
Loading…
Reference in New Issue