first-commit
diff --git a/tox.ini b/tox.ini
new file mode 100755
index 0000000..5ed45fa
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,58 @@
+[tox]
+minversion = 3.2.0
+envlist = py37,pep8
+skipsdist = True
+ignore_basepython_conflict = true
+
+
+[testenv]
+basepython = python3
+usedevelop = True
+setenv =
+   PYTHONWARNINGS=default::DeprecationWarning
+   OS_STDOUT_CAPTURE=1
+   OS_STDERR_CAPTURE=1
+   OS_TEST_TIMEOUT=60
+deps = -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+       -r{toxinidir}/test-requirements.txt
+commands = stestr run {posargs}
+
+[testenv:lower-constraints]
+deps = -c{toxinidir}/lower-constraints.txt
+       -r{toxinidir}/test-requirements.txt
+
+[testenv:pep8]
+commands = flake8 {posargs}
+
+[testenv:venv]
+commands = {posargs}
+
+[testenv:cover]
+setenv =
+    VIRTUAL_ENV={envdir}
+    PYTHON=coverage run --source staffeln --parallel-mode
+commands =
+    stestr run {posargs}
+    coverage combine
+    coverage html -d cover
+    coverage xml -o cover/coverage.xml
+
+[testenv:docs]
+deps = -r{toxinidir}/doc/requirements.txt
+commands = sphinx-build -W -b html doc/source doc/build/html
+
+[testenv:releasenotes]
+deps = {[testenv:docs]deps}
+commands =
+  sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
+
+[testenv:debug]
+commands = oslo_debug_helper {posargs}
+
+[flake8]
+# E123, E125 skipped as they are invalid PEP-8.
+
+show-source = True
+ignore = E123,E125
+builtins = _
+exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build