#
# Tox global configuration
#
[tox]
envlist = py{36,37,38}
skip_missing_interpreters = true
isolated_build = true

# Configuration variables to share across environments
[config]
BST_PLUGINS_EXPERIMENTAL_VERSION = 1.93.2

#
# Defaults for all environments
#
# Anything specified here is inherited by the sections
#
[testenv]
usedevelop =
    # This is required by Cython in order to get coverage for cython files.
    py{36,37,38}-!nocover: True

commands =
    # Running with coverage reporting enabled
    py{36,37,38}-!plugins-!nocover: pytest --basetemp {envtmpdir} --cov=buildstream --cov-config .coveragerc {posargs}
    # Running with coverage reporting disabled
    py{36,37,38}-!plugins-nocover: pytest --basetemp {envtmpdir} {posargs}
    # Running external plugins tests with coverage reporting enabled
    py{36,37,38}-plugins-!nocover: pytest --basetemp {envtmpdir} --cov=buildstream --cov-config .coveragerc --plugins {posargs}
    # Running external plugins tests with coverage disabled
    py{36,37,38}-plugins-nocover: pytest --basetemp {envtmpdir} --plugins {posargs}
commands_post:
    py{36,37,38}-!nocover: mkdir -p .coverage-reports
    py{36,37,38}-!nocover: mv {envtmpdir}/.coverage {toxinidir}/.coverage-reports/.coverage.{env:COVERAGE_PREFIX:}{envname}
deps =
    py{36,37,38}: -rrequirements/requirements.txt
    py{36,37,38}: -rrequirements/dev-requirements.txt

    # Install local sample plugins for testing pip plugin origins
    py{36,37,38}: {toxinidir}/tests/plugins/sample-plugins

    # Install external plugins for plugin tests
    py{36,37,38}-plugins: git+https://gitlab.com/buildstream/bst-plugins-experimental.git@{env:BST_PLUGINS_EXPERIMENTAL_VERSION:{[config]BST_PLUGINS_EXPERIMENTAL_VERSION}}#egg=bst_plugins_experimental[ostree,deb]

    # Only require coverage and pytest-cov when using it
    !nocover: -rrequirements/cov-requirements.txt

    # Install pytest-random-order for '-randomized'
    randomized: pytest-random-order
passenv =
    ARTIFACT_CACHE_SERVICE
    BST_CAS_STAGING_ROOT
    BST_FORCE_START_METHOD
    GI_TYPELIB_PATH
    INTEGRATION_CACHE
    http_proxy
    HTTP_PROXY
    https_proxy
    HTTPS_PROXY
    no_proxy
    NO_PROXY
    REMOTE_EXECUTION_SERVICE
    SOURCE_CACHE_SERVICE
    SSL_CERT_FILE
    BST_PLUGINS_EXPERIMENTAL_VERSION
#
# These keys are not inherited by any other sections
#
setenv =
    py{36,37,38}: COVERAGE_FILE = {envtmpdir}/.coverage
    py{36,37,38}: BST_TEST_HOME = {envtmpdir}
    py{36,37,38}: BST_TEST_XDG_CACHE_HOME = {envtmpdir}/cache
    py{36,37,38}: BST_TEST_XDG_CONFIG_HOME = {envtmpdir}/config
    py{36,37,38}: BST_TEST_XDG_DATA_HOME = {envtmpdir}/share
    # This is required to get coverage for Cython
    py{36,37,38}-!nocover: BST_CYTHON_TRACE = 1
    randomized: PYTEST_ADDOPTS="--random-order-bucket=global"

whitelist_externals =
    py{36,37,38}:
        mv
        mkdir

#
# Environment for native windows
#
[testenv:win32]
commands =
    bst help
    cmd /C md testdir
    bst init testdir --project-name="test"
deps =
    -rrequirements/requirements.txt
    -rrequirements/dev-requirements.txt
    colorama
    windows-curses
    cython
    .
whitelist_externals =
    bst
    cmd

#
# Coverage reporting
#
[testenv:coverage]
# This is required by Cython in order to get coverage for cython files.
usedevelop = True

commands =
    coverage combine --rcfile={toxinidir}/.coveragerc {toxinidir}/.coverage-reports/
    coverage html --rcfile={toxinidir}/.coveragerc --directory={toxinidir}/.coverage-reports/
    coverage report --rcfile={toxinidir}/.coveragerc --show-missing
deps =
    -rrequirements/cov-requirements.txt
setenv =
    COVERAGE_FILE = {toxinidir}/.coverage-reports/.coverage

#
# Code formatters
#
[testenv:format]
skip_install = True
deps =
    black==19.10b0
commands =
    black {posargs: src tests doc/source/conf.py setup.py}

#
# Code format checkers
#
[testenv:format-check]
skip_install = True
deps =
    black==19.10b0
commands =
    black --check --diff {posargs: src tests doc/source/conf.py setup.py}

#
# Running linters
#
[testenv:lint]
commands_pre =
    # Build C extensions to allow Pylint to analyse them
    {envpython} setup.py build_ext --inplace

commands =
    pylint {posargs: src/buildstream tests doc/source/conf.py setup.py}
deps =
    -rrequirements/requirements.txt
    -rrequirements/dev-requirements.txt

#
# Running static type checkers
#
[testenv:mypy]
skip_install = True
commands =
    mypy {posargs}
deps =
    mypy==0.730


#
# Building documentation
#
[testenv:docs]
commands =
    make -C doc
# sphinx_rtd_theme < 0.4.2 breaks search functionality for Sphinx >= 1.8
deps =
    sphinx >= 1.8.5
    sphinx-click
    sphinx_rtd_theme >= 0.4.2
    pytest
    -rrequirements/requirements.txt
    git+https://gitlab.com/buildstream/bst-plugins-experimental.git@{env:BST_PLUGINS_EXPERIMENTAL_VERSION:{[config]BST_PLUGINS_EXPERIMENTAL_VERSION}}#egg=bst_plugins_experimental[ostree]
passenv =
    BST_FORCE_SESSION_REBUILD
    BST_SOURCE_CACHE
    BST_PLUGINS_EXPERIMENTAL_VERSION
    HOME
    LANG
    LC_ALL
whitelist_externals =
    make

#
# (re-)Generating man pages
#
[testenv:man]
commands =
    python3 setup.py --command-packages=click_man.commands man_pages
deps =
    click-man >= 0.3.0
    -rrequirements/requirements.txt

#
# Usefull for running arbitrary scripts in a BuildStream virtual env
#
[testenv:venv]
commands = {posargs}
deps =
    -rrequirements/requirements.txt
    -rrequirements/dev-requirements.txt
whitelist_externals = *


#
# Convenience environment for running individual tests from the
# battery of templated source tests.
#
# You should pass this the part of a test node's id after "::". For
# example, to run the test
# buildstream/testing/_sourcetests/fetch.py::test_fetch_cross_junction[git-inline]
# you would do tox -e sourcetests -- test_fetch_cross_junction[git-inline]
#
# This does rely on the fact that none of the tests in
# buildstream.testing have the same name.
#
[testenv:sourcetests]
commands = pytest --basetemp {envtmpdir} --ignore tests -k "{posargs}"
deps =
    -rrequirements/requirements.txt
    -rrequirements/dev-requirements.txt

# When building using PEP518 and 517, we don't want default dependencies
# installed by the base environment.
[testenv:.package]
deps =
