diff --git a/.codecov.yml b/.codecov.yml index fd577eb919..d0f90f969e 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 @@ -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% diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a30132613..bc9b83205e 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 e3620546a0..dda27062d2 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 b659675968..de80ddaf13 100755 --- a/check.sh +++ b/check.sh @@ -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 diff --git a/pyproject.toml b/pyproject.toml index bbc865ac6d..0fb794b6bf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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 @@ -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 diff --git a/test-requirements.in b/test-requirements.in index 809e171e3b..6fb2763f59 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 87b3c581eb..7cb86972f6 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