[tox] min_version = 4.25 env_list = pre-commit, py3{9-14}-{tests,mypy}, py314t-tests, py314-tests-{bindings-main,system-argon2}, pypy3-tests, typing-{pyright,ty,pyrefly,mypy} docs-doctests, coverage-{combine,report} [testenv] description = Run tests / check types and do NOT measure coverage. package = wheel wheel_build_env = .pkg dependency_groups = tests: tests mypy: typing pass_env = FORCE_COLOR NO_COLOR commands = tests: pytest {posargs} tests: python -Im argon2 -n 1 -t 1 -m 8 -p 1 mypy: mypy tests/typing [testenv:py3{9,14}-tests] # Keep coverage-combine's depends with the versions. description = Run tests and measure coverage. deps = coverage[toml] commands = coverage run -m pytest {posargs} coverage run -m argon2 -n 1 -t 1 -m 8 -p 1 coverage run -m argon2 --profile CHEAPEST # Split combine/report in 2 to avoid excessive "Combined data file ..." output. [testenv:coverage-combine] # Keep base_python in-sync with .python-version-default base_python = py313 # Keep in-sync with test env definition above. depends = py3{9,14}-tests skip_install = true deps = coverage commands = coverage combine [testenv:coverage-report] description = Report coverage over oldest and latest supported Python # Keep base_python in-sync with .python-version-default base_python = py313 skip_install = true depends = coverage-combine deps = coverage parallel_show_output = true commands = coverage report [testenv:system-argon2] description = Run tests against bindings that use a system installation of Argon2. set_env = ARGON2_CFFI_USE_SYSTEM=1 install_command = pip install {opts} --no-binary=argon2-cffi-bindings {packages} [testenv:py312-bindings-main] description = Run tests against the current main branch of argon2-cffi-bindings dependency_groups = deps = commands_pre = pip install -I hypothesis pytest git+https://github.com/hynek/argon2-cffi-bindings install_command = pip install {opts} --no-deps {packages} [testenv:pre-commit] description = Run all pre-commit hooks. skip_install = true deps = pre-commit-uv commands = pre-commit run --all-files [testenv:typing-mypy] description = Check own code with Mypyy. # Keep base_python in-sync with .python-version-default base_python = py313 deps = mypy dependency_groups = typing commands = mypy src [testenv:typing-pyright] description = Check API and own code with Pyright deps = pyright dependency_groups = typing commands = pyright src tests/typing [testenv:typing-ty] description = Check API with ty deps = ty dependency_groups = typing commands = ty check src tests/typing [testenv:typing-pyrefly] description = Check API with pyrefly deps = pyrefly dependency_groups = typing commands = pyrefly check src tests/typing [testenv:docs-{build,doctests,linkcheck}] # Keep base_python in sync with .readthedocs.yaml. base_python = py313 dependency_groups = docs commands = build: sphinx-build -n -T -W -b html -d {envtmpdir}/doctrees docs {posargs:docs/_build/}html doctests: python -m doctest README.md doctests: sphinx-build -n -T -W -b doctest -d {envtmpdir}/doctrees docs {posargs:docs/_build/}html linkcheck: sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees docs docs/_build/html [testenv:docs-watch] package = editable base_python = {[testenv:docs-build]base_python} dependency_groups = {[testenv:docs-build]dependency_groups} 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 \ README.md \ CHANGELOG.md [testenv:docs-linkcheck] base_python = {[testenv:docs]base_python} dependency_groups = {[testenv:docs]dependency_groups} commands = sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees docs docs/_build/html