| [tox] |
| min_version = 4 |
| env_list = |
| pre-commit, |
| py3{7,8,9,10,11,12}-{tests,mypy}, |
| pypy3, |
| pyright, |
| docs, |
| changelog, |
| coverage-report |
| |
| |
| [testenv:.pkg] |
| pass_env = SETUPTOOLS_SCM_PRETEND_VERSION |
| |
| |
| [testenv] |
| package = wheel |
| wheel_build_env = .pkg |
| pass_env = |
| FORCE_COLOR |
| NO_COLOR |
| extras = |
| tests: tests |
| deps = |
| mypy: mypy |
| commands = |
| tests: pytest {posargs:-n auto} |
| mypy: mypy tests/typing_example.py |
| mypy: mypy src/attrs/__init__.pyi src/attr/__init__.pyi src/attr/_typing_compat.pyi src/attr/_version_info.pyi src/attr/converters.pyi src/attr/exceptions.pyi src/attr/filters.pyi src/attr/setters.pyi src/attr/validators.pyi |
| |
| |
| [testenv:py3{7,10,11}-tests] |
| extras = cov |
| # Python 3.6+ has a number of compile-time warnings on invalid string escapes. |
| # PYTHONWARNINGS=d and --no-compile below make them visible during the tox run. |
| set_env = |
| COVERAGE_PROCESS_START={toxinidir}/pyproject.toml |
| PYTHONWARNINGS=d |
| install_command = python -Im pip install --no-compile {opts} {packages} |
| commands_pre = python -c 'import pathlib; pathlib.Path("{env_site_packages_dir}/cov.pth").write_text("import coverage; coverage.process_startup()")' |
| commands = coverage run -m pytest {posargs:-n auto} |
| |
| |
| [testenv:coverage-report] |
| # Keep base_python in-sync with .python-version-default |
| base_python = py311 |
| depends = py3{7,10,11} |
| skip_install = true |
| deps = coverage[toml]>=5.3 |
| commands = |
| coverage combine |
| coverage report |
| |
| |
| [testenv:docs] |
| # Keep base_python in-sync with ci.yml/docs and .readthedocs.yaml. |
| base_python = py311 |
| extras = docs |
| commands = |
| sphinx-build -n -T -W -b html -d {envtmpdir}/doctrees docs docs/_build/html |
| sphinx-build -n -T -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html |
| |
| |
| [testenv:docs-watch] |
| package = editable |
| base_python = {[testenv:docs]base_python} |
| extras = {[testenv:docs]extras} |
| deps = watchfiles |
| commands = |
| watchfiles \ |
| --ignore-paths docs/_build/ \ |
| 'sphinx-build -W -n --jobs auto -b html -d {envtmpdir}/doctrees docs docs/_build/html' \ |
| src \ |
| docs |
| |
| |
| [testenv:docs-linkcheck] |
| package = editable |
| base_python = {[testenv:docs]base_python} |
| extras = {[testenv:docs]extras} |
| commands = sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees docs docs/_build/html |
| |
| |
| [testenv:pre-commit] |
| skip_install = true |
| deps = pre-commit |
| commands = pre-commit run --all-files |
| |
| |
| [testenv:changelog] |
| deps = towncrier |
| skip_install = true |
| commands = towncrier build --version main --draft |
| |
| |
| [testenv:pyright] |
| extras = tests |
| deps = pyright |
| commands = pytest tests/test_pyright.py -vv |
| |
| |
| [testenv:docset] |
| deps = doc2dash |
| extras = docs |
| allowlist_externals = |
| rm |
| cp |
| tar |
| commands = |
| rm -rf attrs.docset attrs.tgz docs/_build |
| sphinx-build -n -T -W -b html -d {envtmpdir}/doctrees docs docs/_build/html |
| doc2dash --index-page index.html --icon docs/_static/docset-icon.png --online-redirect-url https://www.attrs.org/en/latest/ docs/_build/html |
| cp docs/_static/docset-icon@2x.png attrs.docset/icon@2x.png |
| tar --exclude='.DS_Store' -cvzf attrs.tgz attrs.docset |