Feature 10296 Pip Standardization

Creates standard template for tox.ini
Introduces 'safety' for listing upstream CVEs
Pins all versions of all upstream modules
Removes Makefile step and places all build logic into tox.ini

Change-Id: I572b68a6f89bf2afc07365b8e1109243fd6592a1
Signed-off-by: beierlm <mark.beierl@canonical.com>
diff --git a/tox.ini b/tox.ini
index 595b5a9..478d1ab 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,73 +1,123 @@
-# Copyright 2017 Intel Research and Development Ireland Limited
-# *************************************************************
-
-# This file is part of OSM Monitoring module
-# All Rights Reserved to Intel Corporation
-
-# 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
-
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# 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.
+# 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.
+#######################################################################################
 
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: helena.mcgough@intel.com or adrian.hoban@intel.com
-##
-
-# Tox (http://tox.testrun.org/) is a tool for running tests
-# in multiple virtualenvs. This configuration file will run the
-# test suite on all supported python versions. To use it, "pip install tox"
-# and then run "tox" from this directory.
 [tox]
-envlist = cover, py3, flake8
+envlist = black, cover, flake8, pylint, safety
 
+[tox:jenkins]
+toxworkdir = /tmp/.tox
 
 [testenv]
 usedevelop = True
-install_command = pip install -U {opts} {packages}
+basepython = python3
 setenv = VIRTUAL_ENV={envdir}
          PYTHONDONTWRITEBYTECODE = 1
-         TESTS_DIR=./osm_mon/tests/unit/
-deps = -r{toxinidir}/requirements.txt
-       -r{toxinidir}/test-requirements.txt
-commands =
-    coverage erase
+deps =  -r{toxinidir}/requirements.txt
 
+#######################################################################################
+[testenv:black]
+deps = black
+skip_install = true
+commands =
+        - black --check --diff osm_mon/
+
+
+#######################################################################################
 [testenv:cover]
-basepython = python3
-deps = nose2
-       -r{toxinidir}/requirements.txt
-       -r{toxinidir}/test-requirements.txt
+deps =  {[testenv]deps}
+        -r{toxinidir}/requirements-dev.txt
+        -r{toxinidir}/requirements-test.txt
 commands =
-  coverage erase
-  nose2 -C --coverage osm_mon --plugin nose2.plugins.junitxml
-  coverage report --omit='*tests*'
-  coverage html -d ./cover --omit='*tests*'
-  coverage xml -o coverage.xml --omit='*tests*'
+        sh -c 'rm -f nosetests.xml'
+        coverage erase
+        nose2 -C --coverage osm_mon
+        coverage report --omit='*tests*'
+        coverage html -d ./cover --omit='*tests*'
+        coverage xml -o coverage.xml --omit=*tests*
+whitelist_externals = sh
 
+
+#######################################################################################
 [testenv:flake8]
-basepython = python3
 deps = flake8
-       -r{toxinidir}/requirements.txt
 commands =
-    flake8 osm_mon
+        flake8 osm_mon/ setup.py
 
-[testenv:build]
-basepython = python3
-deps = stdeb
-       setuptools-version-command
-commands = python3 setup.py --command-packages=stdeb.command bdist_deb
 
+#######################################################################################
+[testenv:pylint]
+deps =  {[testenv]deps}
+        -r{toxinidir}/requirements-dev.txt
+        -r{toxinidir}/requirements-test.txt
+        pylint
+commands =
+    pylint -E osm_mon
+
+
+#######################################################################################
+[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==5.5.0
+commands =
+        - sh -c 'for file in requirements*.in ; do pip-compile -rU --no-header $file ;\
+        out=`echo $file | sed "s/.in/.txt/"` ; \
+        head -16 tox.ini >> $out ;\
+        done'
+whitelist_externals = sh
+
+
+#######################################################################################
+[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_mon/requirements.txt'
+        python3 setup.py --command-packages=stdeb.command sdist_dsc
+        sh -c 'cd deb_dist/osm-mon*/ && dpkg-buildpackage -rfakeroot -uc -us'
+        sh -c 'rm osm_mon/requirements.txt'
+whitelist_externals = sh
+
+#######################################################################################
 [flake8]
-# E123, E125 skipped as they are invalid PEP-8.
+ignore =
+        W291,
+        W293,
+        W503,
+        E123,
+        E125,
+        E226,
+        E241
+exclude =
+        .git,
+        __pycache__,
+        .tox,
 max-line-length = 120
 show-source = True
-ignore = E123,E125,E241,W503
 builtins = _
-exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,devops_stages/*,.rst