qutebrowser/tox.ini

303 lines
10 KiB
INI

# Tox (https://tox.readthedocs.io/) is a tool for running tests
# in multiple virtualenvs. This configuration file will run the
# test suite on all supported python versions. To use it, "pip install tox"
# and then run "tox" from this directory.
[tox]
envlist = py39-pyqt515-cov,mypy-pyqt5,misc,vulture,flake8,pylint,pyroma,eslint,yamllint,actionlint
distshare = {toxworkdir}
skipsdist = true
minversion = 3.20
toxworkdir={env:TOX_WORK_DIR:{toxinidir}/.tox}
[testenv]
setenv =
PYTEST_QT_API=pyqt6
QUTE_QT_WRAPPER=PyQt6
pyqt{515,5152}: PYTEST_QT_API=pyqt5
pyqt{515,5152}: QUTE_QT_WRAPPER=PyQt5
cov: PYTEST_ADDOPTS=--cov --cov-report xml --cov-report=html --cov-report=
passenv =
PYTHON
DISPLAY
XAUTHORITY
HOME
USERNAME
USER
CI
XDG_*
QUTE_*
DOCKER
QT_QUICK_BACKEND
FORCE_COLOR
DBUS_SESSION_BUS_ADDRESS
RUNNER_TEMP
HYPOTHESIS_EXAMPLES_DIR
basepython =
py: {env:PYTHON:python3}
py3: {env:PYTHON:python3}
py39: {env:PYTHON:python3.9}
py310: {env:PYTHON:python3.10}
py311: {env:PYTHON:python3.11}
py312: {env:PYTHON:python3.12}
py313: {env:PYTHON:python3.13}
py314: {env:PYTHON:python3.14}
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-tests.txt
-r{toxinidir}/misc/requirements/requirements-docs.txt
pyqt: -r{toxinidir}/misc/requirements/requirements-pyqt.txt
pyqt515: -r{toxinidir}/misc/requirements/requirements-pyqt-5.15.txt
pyqt5152: -r{toxinidir}/misc/requirements/requirements-pyqt-5.15.2.txt
pyqt62: -r{toxinidir}/misc/requirements/requirements-pyqt-6.2.txt
pyqt63: -r{toxinidir}/misc/requirements/requirements-pyqt-6.3.txt
pyqt64: -r{toxinidir}/misc/requirements/requirements-pyqt-6.4.txt
pyqt65: -r{toxinidir}/misc/requirements/requirements-pyqt-6.5.txt
pyqt66: -r{toxinidir}/misc/requirements/requirements-pyqt-6.6.txt
pyqt67: -r{toxinidir}/misc/requirements/requirements-pyqt-6.7.txt
pyqt68: -r{toxinidir}/misc/requirements/requirements-pyqt-6.8.txt
pyqt69: -r{toxinidir}/misc/requirements/requirements-pyqt-6.9.txt
pyqt610: -r{toxinidir}/misc/requirements/requirements-pyqt-6.10.txt
commands =
!pyqt-!pyqt515-!pyqt5152-!pyqt62-!pyqt63-!pyqt64-!pyqt65-!pyqt66-!pyqt67-!pyqt68-!pyqt69-!pyqt610: {envpython} scripts/link_pyqt.py --tox {envdir}
{envpython} -bb -m pytest {posargs:tests}
cov: {envpython} scripts/dev/check_coverage.py {posargs}
[testenv:py-qt5]
setenv =
PYTEST_QT_API=pyqt5
QUTE_QT_WRAPPER=PyQt5
[testenv:bleeding{,-qt5}]
basepython = {env:PYTHON:python3}
# Override default PyQt6 from [testenv]
setenv =
qt5: PYTEST_QT_API=pyqt5
qt5: QUTE_QT_WRAPPER=PyQt5
pip_pre = true
deps = -r{toxinidir}/misc/requirements/requirements-tests-bleeding.txt
commands_pre =
qt5: pip install --extra-index-url https://www.riverbankcomputing.com/pypi/simple/ --pre --upgrade --only-binary PyQt5,PyQtWebEngine PyQt5 PyQtWebEngine PyQt5-Qt5 PyQtWebEngine-Qt5 PyQt5-sip
!qt5: pip install --extra-index-url https://www.riverbankcomputing.com/pypi/simple/ --pre --upgrade --only-binary PyQt6,PyQt6-WebEngine PyQt6 PyQt6-WebEngine PyQt6-Qt6 PyQt6-WebEngine-Qt6 PyQt6-sip
commands = {envpython} -bb -m pytest {posargs:tests}
# other envs
[testenv:misc]
ignore_errors = true
basepython = {env:PYTHON:python3}
# For global .gitignore files
passenv = HOME
deps =
commands =
{envpython} scripts/dev/misc_checks.py {posargs:all}
[testenv:vulture]
basepython = {env:PYTHON:python3}
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-vulture.txt
-r{toxinidir}/misc/requirements/requirements-pyqt.txt
setenv = PYTHONPATH={toxinidir}
commands =
{envpython} scripts/dev/run_vulture.py
[testenv:vulture-pyqtlink]
basepython = {env:PYTHON:python3}
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-vulture.txt
setenv =
{[testenv]setenv}
{[testenv:vulture]setenv}
commands =
{envpython} scripts/link_pyqt.py --tox {envdir}
{[testenv:vulture]commands}
[testenv:pylint]
basepython = {env:PYTHON:python3}
ignore_errors = true
passenv =
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-tests.txt
-r{toxinidir}/misc/requirements/requirements-pylint.txt
-r{toxinidir}/misc/requirements/requirements-pyqt.txt
-r{toxinidir}/misc/requirements/requirements-pyqt-5.txt
commands =
{envpython} -m pylint scripts qutebrowser --output-format=colorized --reports=no {posargs}
{envpython} scripts/dev/run_pylint_on_tests.py {toxinidir} --output-format=colorized --reports=no {posargs}
[testenv:pylint-pyqtlink]
basepython = {env:PYTHON:python3}
ignore_errors = true
passenv =
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-tests.txt
-r{toxinidir}/misc/requirements/requirements-pylint.txt
commands =
{envpython} scripts/link_pyqt.py --tox {envdir}
{envpython} -m pylint scripts qutebrowser --output-format=colorized --reports=no {posargs}
{envpython} scripts/dev/run_pylint_on_tests.py {toxinidir} --output-format=colorized --reports=no {posargs}
[testenv:pylint-master]
basepython = {env:PYTHON:python3}
passenv = {[testenv:pylint]passenv}
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-tests.txt
-r{toxinidir}/misc/requirements/requirements-pylint-master.txt
commands =
{envpython} scripts/link_pyqt.py --tox {envdir}
{envpython} -m pylint scripts qutebrowser --output-format=colorized --reports=no {posargs}
{envpython} scripts/dev/run_pylint_on_tests.py --output-format=colorized --reports=no {posargs}
[testenv:flake8]
basepython = {env:PYTHON:python3}
passenv =
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-flake8.txt
commands =
{envpython} -m flake8 {posargs:qutebrowser tests scripts}
[testenv:pyroma]
basepython = {env:PYTHON:python3}
passenv =
deps =
-r{toxinidir}/misc/requirements/requirements-pyroma.txt
commands =
{envdir}/bin/pyroma -n 10 .
[testenv:docs]
basepython = {env:PYTHON:python3}
passenv =
CI
GITHUB_REF
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-docs.txt
-r{toxinidir}/misc/requirements/requirements-pyqt.txt
commands =
{envpython} scripts/dev/src2asciidoc.py {posargs}
{envpython} scripts/dev/check_doc_changes.py {posargs}
{envpython} scripts/asciidoc2html.py {posargs}
[testenv:pyinstaller{,-qt5}]
basepython = {env:PYTHON:python3}
passenv =
APPDATA
HOME
PYINSTALLER_DEBUG
setenv =
qt5: PYINSTALLER_QT5=true
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-pyinstaller.txt
!qt5: -r{toxinidir}/misc/requirements/requirements-pyqt-6.txt
qt5: -r{toxinidir}/misc/requirements/requirements-pyqt-5.txt
commands =
{envbindir}/pyinstaller --noconfirm misc/qutebrowser.spec
[testenv:eslint]
basepython = python3
deps =
passenv = TERM
allowlist_externals = eslint
changedir = {toxinidir}/qutebrowser/javascript
commands = eslint --report-unused-disable-directives .
[testenv:shellcheck]
basepython = python3
deps =
allowlist_externals = bash
commands = bash scripts/dev/run_shellcheck.sh {posargs}
[testenv:mypy{,-pyqt5,-pyqt6}]
basepython = {env:PYTHON:python3}
passenv =
TERM
MYPY_FORCE_TERMINAL_WIDTH
setenv =
# See qutebrowser/qt/machinery.py
!pyqt5: QUTE_CONSTANTS_ARGS=--always-true=USE_PYQT6 --always-false=USE_PYQT5 --always-false=USE_PYSIDE6 --always-false=IS_QT5 --always-true=IS_QT6 --always-true=IS_PYQT --always-false=IS_PYSIDE
pyqt5: QUTE_CONSTANTS_ARGS=--always-false=USE_PYQT6 --always-true=USE_PYQT5 --always-false=USE_PYSIDE6 --always-true=IS_QT5 --always-false=IS_QT6 --always-true=IS_PYQT --always-false=IS_PYSIDE
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-dev.txt
-r{toxinidir}/misc/requirements/requirements-tests.txt
-r{toxinidir}/misc/requirements/requirements-mypy.txt # includes PyQt5-stubs
-r{toxinidir}/misc/requirements/requirements-pyqt-6.txt
commands =
{envpython} -m mypy {env:QUTE_CONSTANTS_ARGS} qutebrowser {posargs}
[testenv:yamllint]
basepython = {env:PYTHON:python3}
deps = -r{toxinidir}/misc/requirements/requirements-yamllint.txt
commands =
{envpython} -m yamllint -f colored --strict . {posargs}
[testenv:actionlint]
basepython = python3
deps =
allowlist_externals = actionlint
commands =
actionlint
[testenv:mypy-{pyqt5,pyqt6}-diff]
basepython = {env:PYTHON:python3}
passenv = {[testenv:mypy-pyqt6]passenv}
deps = {[testenv:mypy-pyqt6]deps}
setenv = {[testenv:mypy-pyqt6]setenv}
commands =
{envpython} -m mypy --cobertura-xml-report {envtmpdir} {env:QUTE_CONSTANTS_ARGS} qutebrowser tests {posargs}
{envdir}/bin/diff-cover --fail-under=100 --compare-branch={env:DIFF_BRANCH:origin/{env:GITHUB_BASE_REF:main}} {envtmpdir}/cobertura.xml
[testenv:sphinx]
basepython = {env:PYTHON:python3}
passenv =
usedevelop = true
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-pyqt.txt
-r{toxinidir}/misc/requirements/requirements-sphinx.txt
commands =
{envpython} -m sphinx -jauto -W --color {posargs} {toxinidir}/doc/extapi/ {toxinidir}/doc/extapi/_build/
[testenv:update-version]
basepython = {env:PYTHON:python3}
passenv =
GITHUB_OUTPUT
CI
deps = -r{toxinidir}/misc/requirements/requirements-dev.txt
commands = {envpython} scripts/dev/update_version.py {posargs}
[testenv:build-release{,-qt5}]
basepython = {env:PYTHON:python3}
passenv = *
# Override default PyQt6 from [testenv]
setenv =
qt5: QUTE_QT_WRAPPER=PyQt5
usedevelop = true
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-tox.txt
-r{toxinidir}/misc/requirements/requirements-docs.txt
!qt5: -r{toxinidir}/misc/requirements/requirements-pyqt.txt
qt5: -r{toxinidir}/misc/requirements/requirements-pyqt-5.txt
-r{toxinidir}/misc/requirements/requirements-dev.txt
-r{toxinidir}/misc/requirements/requirements-pyinstaller.txt
commands =
!qt5: {envpython} {toxinidir}/scripts/dev/build_release.py {posargs}
qt5: {envpython} {toxinidir}/scripts/dev/build_release.py --qt5 {posargs}
[testenv:package]
basepython = {env:PYTHON:python3}
setenv =
PYTHONWARNINGS=error,default:pkg_resources is deprecated as an API.:DeprecationWarning
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/misc/requirements/requirements-dev.txt
commands = {envpython} -m build