Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🧪 Publish MyPy type coverage to Codecov #3162

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -25,9 +25,31 @@ coverage:
round: down
range: 100..100
status:
project:
default:
target: 100%
patch:
default:
target: 100% # require patches to be 100%
lib:
flags:
- pytest
typing:
flags:
- MyPy
project:
default:
target: 100%
lib:
flags:
- pytest
paths:
- src/
target: 100%
tests:
flags:
- pytest
paths:
- tests/
target: 100%
typing:
flags:
- MyPy
target: 91.79%
20 changes: 15 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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 }})'
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 13 additions & 6 deletions check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,20 @@ 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 --platform linux | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Linux \
|| { echo "* Mypy (Linux) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; }
# 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 --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 --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 --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 --platform darwin | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Mac \
|| { echo "* Mypy (Mac) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; }
mypy --show-error-end --platform win32 | python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat --platform Windows \
|| { echo "* Mypy (Windows) found type errors." >> "$GITHUB_STEP_SUMMARY"; MYPY=1; }
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 --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
python ./src/trio/_tools/mypy_annotate.py --dumpfile mypy_annotate.dat
Expand Down
25 changes: 21 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -174,10 +174,7 @@ fixture-parentheses = false

[tool.mypy]
python_version = "3.9"
files = ["src/trio/", "docs/source/*.py"]

# Be flexible about dependencies that don't have stubs yet (like pytest)
ignore_missing_imports = true
files = ["src/trio/", "docs/source/*.py", "tests/"]

# Be strict about use of Mypy
local_partial_types = true
Expand All @@ -198,6 +195,26 @@ disallow_untyped_decorators = true
disallow_untyped_defs = true
check_untyped_defs = true

# Below are the originally missing strictness settings:
disallow_any_expr = true

enable_error_code = [
"ignore-without-code",
]

extra_checks = true

ignore_missing_imports = false

no_implicit_reexport = true

# `strict` will pick up any future strictness-related settings:
strict = true
strict_equality = true
strict_optional = true

warn_no_return = true

[tool.pyright]
pythonVersion = "3.9"
reportUnnecessaryTypeIgnoreComment = true
Expand Down
2 changes: 1 addition & 1 deletion test-requirements.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions test-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading