#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#

#
# Tox global configuration
#
[tox]
envlist = py{37,38,39,310,311}-{bst-fixed,bst-master}
skip_missing_interpreters = true

#
# Defaults for all environments
#
# Anything specified here is inherited by the sections
#
[testenv]
commands =
    bst --version
    pytest --basetemp {envtmpdir} {posargs}
deps =
    -rrequirements/test-requirements.txt
    -rrequirements/plugin-requirements.txt
    git+https://github.com/apache/buildstream@{env:BST_VERSION}

passenv =
    ARTIFACT_CACHE_SERVICE
    BST_FORCE_BACKEND
    BST_FORCE_SANDBOX
    GI_TYPELIB_PATH
    INTEGRATION_CACHE
    http_proxy
    HTTP_PROXY
    https_proxy
    HTTPS_PROXY
    no_proxy
    NO_PROXY
    PYTEST_*
    REMOTE_EXECUTION_SERVICE
    SOURCE_CACHE_SERVICE
    SSL_CERT_FILE

#
# These keys are not inherited by any other sections
#
setenv =
    py{37,38,39,310}: XDG_CACHE_HOME = {envtmpdir}/cache
    py{37,38,39,310}: XDG_CONFIG_HOME = {envtmpdir}/config
    py{37,38,39,310}: XDG_DATA_HOME = {envtmpdir}/share
    !master: BST_VERSION = 2.0.1
    master: BST_VERSION = master

whitelist_externals =
    py{37,38,39,310}:
        mv
        mkdir

#
# Code formatters
#
[testenv:format]
skip_install = True
deps =
    black==22.3.0
commands =
    black {posargs: src tests setup.py}

#
# Code format checkers
#
[testenv:format-check]
skip_install = True
deps =
    black==22.3.0
commands =
    black --check --diff {posargs: src tests 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: buildstream_plugins tests setup.py}

#
# Running static type checkers
#
[testenv:mypy]
skip_install = True
commands =
    mypy {posargs}
deps =
    mypy==0.910
    types-protobuf
    types-python-dateutil
    types-setuptools
    types-ujson
    -rrequirements/plugin-requirements.txt
    -rrequirements/test-requirements.txt
    -rrequirements/mypy-requirements.txt
    git+https://github.com/apache/buildstream@{env:BST_VERSION}

#
# 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_rtd_theme >= 0.4.2
    -rrequirements/plugin-requirements.txt
    git+https://github.com/apache/buildstream@{env:BST_VERSION}
passenv =
    BST_FORCE_SESSION_REBUILD
    BST_SOURCE_CACHE
    HOME
    LANG
    LC_ALL
whitelist_externals =
    make


#
# Publish a release, make sure to update the version in setup.py first
#
[testenv:release]
skip_install = true
commands =
    python3 setup.py sdist bdist_wheel
    twine upload -r pypi dist/*
deps =
    twine
    wheel
passenv =
    TWINE_USERNAME
    TWINE_PASSWORD
