From e7188218fd258076e5db7a9835b9e061f7f05af3 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Fri, 20 Dec 2024 05:01:56 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20Publish=20MyPy=20type=20coverage?= =?UTF-8?q?=20to=20Codecov?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .codecov.yml | 27 ++++++++++++++++++++++++++- .github/workflows/ci.yml | 20 +++++++++++++++----- README.rst | 4 ++-- check.sh | 12 ++++++------ test-requirements.in | 2 +- test-requirements.txt | 2 ++ 6 files changed, 52 insertions(+), 15 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index b66d33a41..c3fc07691 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -6,7 +6,7 @@ codecov: notify: # This number needs to be changed whenever the number of runs in CI is changed. # Another option is codecov-cli: https://github.com/codecov/codecov-cli#send-notifications - after_n_builds: 31 + after_n_builds: 32 wait_for_ci: false notify_error: true # if uploads fail, replace cov comment with a comment with errors. require_ci_to_pass: false @@ -27,3 +27,28 @@ coverage: patch: default: target: 100% + lib: + flags: + - pytest + typing: + flags: + - MyPy + project: + default: + target: 100% + lib: + flags: + - pytest + paths: + - src/ + target: 99.62% + tests: + flags: + - pytest + paths: + - tests/ + target: 100% + typing: + flags: + - MyPy + target: 91.52% diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a3013261..bc9b83205 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -215,7 +215,7 @@ jobs: name: Windows (${{ matrix.python }}, ${{ matrix.arch }}${{ matrix.extra_name }}) # multiple flags is marked as an error in codecov UI, but is actually fine # https://github.com/codecov/feedback/issues/567 - flags: Windows,${{ matrix.python }} + flags: pytest,Windows,${{ matrix.python }} # this option cannot be set in .codecov.yml fail_ci_if_error: true @@ -278,8 +278,18 @@ jobs: with: directory: empty name: Ubuntu (${{ matrix.python }}${{ matrix.extra_name }}) - flags: Ubuntu,${{ matrix.python }} + flags: pytest,Ubuntu,${{ matrix.python }} fail_ci_if_error: true + - if: >- + always() + && matrix.check_formatting == '1' + uses: codecov/codecov-action@v5 + with: + disable_search: true + files: mypy-cov-*-py-*/* + flags: MyPy + fail_ci_if_error: true + name: MyPy type coverage macOS: name: 'macOS (${{ matrix.python }})' @@ -320,7 +330,7 @@ jobs: with: directory: empty name: macOS (${{ matrix.python }}) - flags: macOS,${{ matrix.python }} + flags: pytest,macOS,${{ matrix.python }} fail_ci_if_error: true # run CI on a musl linux @@ -356,7 +366,7 @@ jobs: with: directory: empty name: Alpine - flags: Alpine,${{ steps.get-version.outputs.version }} + flags: pytest,Alpine,${{ steps.get-version.outputs.version }} fail_ci_if_error: true Cython: @@ -416,7 +426,7 @@ jobs: uses: codecov/codecov-action@v5 with: name: Cython - flags: Cython,${{ steps.get-version.outputs.version }} + flags: pytest,Cython,${{ steps.get-version.outputs.version }} fail_ci_if_error: true # https://github.com/marketplace/actions/alls-green#why diff --git a/README.rst b/README.rst index e3620546a..dda27062d 100644 --- a/README.rst +++ b/README.rst @@ -18,8 +18,8 @@ :target: https://anaconda.org/conda-forge/trio :alt: Latest conda-forge version -.. image:: https://codecov.io/gh/python-trio/trio/branch/main/graph/badge.svg - :target: https://codecov.io/gh/python-trio/trio +.. image:: https://codecov.io/gh/python-trio/trio/graph/badge.svg?flag=pytest + :target: https://app.codecov.io/gh/python-trio/trio?flags[]=pytest :alt: Test coverage Trio – a friendly Python library for async concurrency and I/O diff --git a/check.sh b/check.sh index 3fb959ce8..75e2f907f 100755 --- a/check.sh +++ b/check.sh @@ -57,19 +57,19 @@ echo "::group::Mypy" rm -f mypy_annotate.dat # Pipefail makes these pipelines fail if mypy does, even if mypy_annotate.py succeeds. set -o pipefail -mypy --show-error-end --python-version=3.13 --platform linux | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Linux \ +mypy --show-error-end --python-version=3.13 --cobertura-xml-report=mypy-cov-linux-py-3.13 --platform linux | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Linux \ || { echo "* Mypy (Linux, Python 3.13) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; } # Darwin tests FreeBSD too -mypy --show-error-end --python-version=3.13 --platform darwin | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Mac \ +mypy --show-error-end --python-version=3.13 --cobertura-xml-report=mypy-cov-macos-py-3.13 --platform darwin | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Mac \ || { echo "* Mypy (Mac, Python 3.13) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; } -mypy --show-error-end --python-version=3.13 --platform win32 | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Windows \ +mypy --show-error-end --python-version=3.13 --cobertura-xml-report=mypy-cov-windows-py-3.13 --platform win32 | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Windows \ || { echo "* Mypy (Windows, Python 3.13) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; } -mypy --show-error-end --python-version=3.9 --platform linux | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Linux \ +mypy --show-error-end --python-version=3.9 --cobertura-xml-report=mypy-cov-linux-py-3.9 --platform linux | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Linux \ || { echo "* Mypy (Linux, Python 3.9) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; } # Darwin tests FreeBSD too -mypy --show-error-end --python-version=3.9 --platform darwin | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Mac \ +mypy --show-error-end --python-version=3.9 --cobertura-xml-report=mypy-cov-macos-py-3.9 --platform darwin | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Mac \ || { echo "* Mypy (Mac, Python 3.9) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; } -mypy --show-error-end --python-version=3.9 --platform win32 | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Windows \ +mypy --show-error-end --python-version=3.9 --cobertura-xml-report=mypy-cov-windows-py-3.9 --platform win32 | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Windows \ || { echo "* Mypy (Windows, Python 3.9) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; } set +o pipefail # Re-display errors using Github's syntax, read out of mypy_annotate.dat diff --git a/test-requirements.in b/test-requirements.in index 809e171e3..6fb2763f5 100644 --- a/test-requirements.in +++ b/test-requirements.in @@ -11,7 +11,7 @@ cryptography>=41.0.0 # cryptography<41 segfaults on pypy3.10 # Tools black; implementation_name == "cpython" -mypy # Would use mypy[faster-cache], but orjson has build issues on pypy +mypy[reports] # Would use mypy[faster-cache], but orjson has build issues on pypy orjson; implementation_name == "cpython" ruff >= 0.8.0 astor # code generation diff --git a/test-requirements.txt b/test-requirements.txt index 87b3c581e..7cb86972f 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -67,6 +67,8 @@ jedi==0.19.2 ; implementation_name == 'cpython' # via -r test-requirements.in jinja2==3.1.4 # via sphinx +lxml==5.3.0 + # via mypy markupsafe==3.0.2 # via jinja2 mccabe==0.7.0