# Copyright 2018 Telefonica S.A.
#
# 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]
envlist = black, cover, flake8, pylint, safety

[tox:jenkins]
toxworkdir = /tmp/.tox

[testenv]
usedevelop = True
basepython = python3.10
setenv = VIRTUAL_ENV={envdir}
         PYTHONDONTWRITEBYTECODE = 1
deps =  -r{toxinidir}/requirements.txt

#######################################################################################
[testenv:black]
deps = black==23.12.1
skip_install = true
commands =
        black --check --diff osm_nbi/
        black --check --diff setup.py


#######################################################################################
[testenv:cover]
deps =  {[testenv]deps}
        -r{toxinidir}/requirements-dev.txt
        -r{toxinidir}/requirements-test.txt
commands =
        sh -c 'rm -f nosetests.xml'
        coverage erase
        nose2 -C --coverage osm_nbi -s osm_nbi/tests
        coverage report --omit='*tests*'
        coverage html -d ./cover --omit='*tests*'
        coverage xml -o coverage.xml --omit=*tests*
allowlist_externals = sh


#######################################################################################
[testenv:flake8]
deps = flake8
commands =
        flake8 osm_nbi/ setup.py


#######################################################################################
[testenv:pylint]
deps =  {[testenv]deps}
        -r{toxinidir}/requirements-dev.txt
        -r{toxinidir}/requirements-test.txt
        pylint
commands =
        pylint -E osm_nbi --extension-pkg-allow-list=pyrage


#######################################################################################
[testenv:safety]
setenv =
        LC_ALL=C.UTF-8
        LANG=C.UTF-8
deps =  {[testenv]deps}
        safety
commands =
        - safety check --full-report


#######################################################################################
[testenv:pip-compile]
deps =  pip-tools==6.13.0
skip_install = true
allowlist_externals = bash
        [
commands =
        - bash -c "for file in requirements*.in ; do \
        UNSAFE="" ; \
        if [[ $file =~ 'dist' ]] ; then UNSAFE='--allow-unsafe' ; fi ; \
        pip-compile --resolver=backtracking -rU --no-header $UNSAFE $file ;\
        out=`echo $file | sed 's/.in/.txt/'` ; \
        sed -i -e '1 e head -16 tox.ini' $out ;\
        done"


#######################################################################################
[testenv:dist]
deps =  {[testenv]deps}
        -r{toxinidir}/requirements-dist.txt

# In the commands, we copy the requirements.txt to be presented as a source file (.py)
# so it gets included in the .deb package for others to consume
commands =
        sh -c 'cp requirements.txt osm_nbi/requirements.txt'
        python3 setup.py --command-packages=stdeb.command sdist_dsc
        sh -c 'cd deb_dist/osm-nbi*/ && dpkg-buildpackage -rfakeroot -uc -us'
        sh -c 'rm osm_nbi/requirements.txt'
allowlist_externals = sh

#######################################################################################
[flake8]
ignore =
        W291,
        W293,
        W503,
        E123,
        E125,
        E203,
        E226,
        E241,
        E501
exclude =
        .git,
        __pycache__,
        .tox,
        test_mznmodels.py
max-line-length = 120
show-source = True
builtins = _

