[tox]
minversion = 4
envlist =
  black
  flake8
  mypy
  py3-{minimal,full-cover}

[testenv]
extras =
  full: testing
  minimal: testing-minimal
deps =
  cover: pytest-cov
commands =
  pytest --doctest-modules \
  cover:   --cov={envsitepackagesdir}/swh/model --cov-branch \
  full:    {envsitepackagesdir}/swh/model \
  minimal: {envsitepackagesdir}/swh/model/tests/test_cli.py -m 'not requires_optional_deps' \
           {posargs}
# --rootdir and --import-mode must NOT be used here due to the (hack-ish) way of
# executing tests (using tox-in-tox); see below

[testenv:py3{,7,8,9,10,11,12,13},pypy3{,5,6,7,8,9,10,11,12,13}]
skip_install = true
allowlist_externals = tox
commands =
  tox run -e {env_name}-full-cover -- {posargs}
  tox run -e {env_name}-minimal

[testenv:black]
skip_install = true
deps =
  black==23.1.0
commands =
  {envpython} -m black --check swh

[testenv:flake8]
skip_install = true
deps =
  flake8==5.0.4
  flake8-bugbear==22.9.23
  pycodestyle==2.9.1
commands =
  {envpython} -m flake8

[testenv:mypy]
extras =
  testing
deps =
  mypy>1.4
commands =
  mypy swh

# build documentation outside swh-environment using the current
# git HEAD of swh-docs, is executed on CI for each diff to prevent
# breaking doc build
[testenv:sphinx]
allowlist_externals = make
extras =
  testing
deps =
  # fetch and install swh-docs
  git+https://gitlab.softwareheritage.org/swh/devel/swh-docs.git\#egg=swh.docs
setenv =
  SWH_PACKAGE_DOC_TOX_BUILD = 1
  # turn warnings into errors
  SPHINXOPTS = -W
commands =
  make -I {env_dir}/share/swh-docs -C docs