[tox]
minversion = 2.9.0
skipdist = True
skip_missing_interpreters = true
envlist = pep8,py{39,310}
#requires = tox-pipenv
#           pip==22.0.4
#           pip-tools==5.4.0

# Activate isolated build environment. tox will use a virtual environment
# to build a source distribution from the source tree. For build tools and
# arguments use the pyproject.toml file as specified in PEP-517 and PEP-518.
isolated_build = true

[testenv]
description = Run unit-testing
setenv =
    _PYTEST_SETUP_SKIP_APRSD_DEP=1
    PYTHONDONTWRITEBYTECODE=1
    PYTHONUNBUFFERED=1
usedevelop = True
install_command = pip install {opts} {packages}
extras = tests
deps = coverage: coverage
       -r{toxinidir}/requirements.txt
       -r{toxinidir}/dev-requirements.txt
       pytestmain: git+https://github.com/pytest-dev/pytest.git@main
commands =
    pytest -v --cov-report term-missing --cov=aprsd {posargs}
    coverage: coverage report -m
    coverage: coverage xml

[testenv:docs]
skip_install = true
deps =
    -r{toxinidir}/requirements.txt
    -r{toxinidir}/dev-requirements.txt
    {toxinidir}/.
changedir = {toxinidir}/docs
commands =
    {envpython} clean_docs.py
    sphinx-apidoc --force --output-dir apidoc {toxinidir}/aprsd
    sphinx-build -a -W . _build

[testenv:pep8]
commands =
  flake8 {posargs} aprsd tests

[testenv:fast8]
basepython = python3
# Use same environment directory as pep8 env to save space and install time
envdir = {toxworkdir}/pep8
commands =
  {toxinidir}/tools/fast8.sh
passenv = FAST8_NUM_COMMITS

[testenv:lint]
skip_install = true
deps =
    -r{toxinidir}/dev-requirements.txt
commands =
    flake8 aprsd tests

[flake8]
max-line-length = 99
show-source = True
ignore = E713,E501,W503,N818
extend-ignore = E203,W503
extend-exclude = venv
exclude = .venv,.git,.tox,dist,doc,.ropeproject

# This is the configuration for the tox-gh-actions plugin for GitHub Actions
#   https://github.com/ymyzk/tox-gh-actions
# This section is not needed if not using GitHub Actions for CI.
[gh-actions]
python =
    3.6: py36, pep8
    3.7: py38, pep8
    3.8: py38, pep8
    3.9: py39, pep8, type-check, docs
    3.10: py39, pep8, type-check, docs

[testenv:fmt]
# This will reformat your code to comply with pep8
# and standard formatting
skip_install = true
deps =
    -r{toxinidir}/dev-requirements.txt
commands =
    gray aprsd tests

[testenv:type-check]
skip_install = true
deps = -r{toxinidir}/requirements.txt
    -r{toxinidir}/dev-requirements.txt
commands =
    mypy aprsd

[testenv:pre-commit]
skip_install = true
basepython = python3
deps = pre-commit
commands = pre-commit run --all-files --show-diff-on-failure
