[tox]
envlist = py36, py37, py38, py39, py310, pypy3, lint, docs, packaging

[gh-actions]
python =
    3.6: py36
    3.7: py37
    3.8: py38
    3.9: py39, lint, docs, packaging, h2spec
    3.10: py310
    pypy3: pypy3

[testenv]
passenv =
    GITHUB_*
deps =
    pytest>=6.0.1,<7
    pytest-cov>=2.10.1,<3
    pytest-xdist>=2.0.0,<3
    hypothesis>=5.5,<7
commands =
    pytest --cov-report=xml  --cov-report=term --cov=h2 {posargs}

[testenv:pypy3]
# temporarily disable coverage testing on PyPy due to performance problems
commands = pytest {posargs}

[testenv:lint]
deps =
    flake8>=3.9.1,<4
commands = flake8 src/ test/

[testenv:docs]
deps =
    sphinx>=4.0.2,<5
whitelist_externals = make
changedir = {toxinidir}/docs
commands =
    make clean
    make html

[testenv:packaging]
basepython = python3.9
deps =
    check-manifest==0.46
    readme-renderer==29.0
    twine>=3.4.1,<4
whitelist_externals = rm
commands =
    rm -rf dist/
    check-manifest
    python setup.py sdist bdist_wheel
    twine check dist/*

[testenv:publish]
basepython = {[testenv:packaging]basepython}
deps =
    {[testenv:packaging]deps}
whitelist_externals = {[testenv:packaging]whitelist_externals}
commands =
    {[testenv:packaging]commands}
    twine upload dist/*

[testenv:graphs]
basepython = python3.8
deps =
    graphviz==0.14.1
commands =
    python visualizer/visualize.py -i docs/source/_static

[testenv:h2spec]
basepython = python3.8
deps =
    twisted[tls]==20.3.0
whitelist_externals = {toxinidir}/test/h2spectest.sh
commands =
    {toxinidir}/test/h2spectest.sh
