[PATCH v3 4/5] tox: Integrate tox-docker
Stephen Finucane
stephen at that.guru
Sun Jun 9 03:36:21 AEST 2019
This eliminates the need to use docker-compose for most use cases.
Instead, we can now do:
tox -e py27-django111-postgres
If you're using a locally configured PostgreSQL or MySQL instance, you
simply omit the last factor and things behave as before:
tox -e py27-django111
We removed the 'venv' environment, since it was never actually that
useful and is even less so now (you'd need to have a local DB set up)
and add the 'skip_missing_interpreters' flag for folks on an OS that
doesn't provide all the Python versions under the sun like Fedora does.
Signed-off-by: Stephen Finucane <stephen at that.guru>
Cc: Daniel Axtens <dja at axtens.net>
---
v3:
- Bump the mysql container version to 8.0 to work around an issue with
tox-docker (https://github.com/tox-dev/tox-docker/issues/35)
- Use the 'root' user for the mysql container since it simplifies things
greatly (we do this for Travis already)
- Revert changes to requirements.txt which turned out to be unnecessary
and broke Travis
- Remove the venv environment instead of attempting to hack it into
working
---
docs/development/contributing.rst | 28 +++++++---------------------
docs/development/installation.rst | 6 ------
patchwork/settings/dev.py | 12 ++++++++++++
tox.ini | 25 ++++++++++++++++++++-----
4 files changed, 39 insertions(+), 32 deletions(-)
diff --git a/docs/development/contributing.rst b/docs/development/contributing.rst
index 5089bba8..f713f872 100644
--- a/docs/development/contributing.rst
+++ b/docs/development/contributing.rst
@@ -31,29 +31,15 @@ Testing
-------
Patchwork includes a `tox`_ script to automate testing. This requires a
-functional database and some Python requirements like *tox*. Refer to
-:doc:`installation` for information on how to configure these.
-
-You may also need to install *tox*. If so, do this now:
+functional database and some Python requirements like *tox*. These can be
+installed using :command:`pip`:
.. code-block:: shell
- $ pip install --user tox
-
-.. tip::
-
- If you're using Docker, you may not need to install *tox*
- locally. Instead, it will already be installed inside the
- container. For Docker, you can run *tox* like so:
-
- .. code-block:: shell
-
- $ docker-compose run --rm web tox [ARGS...]
-
- For more information, refer to :ref:`installation-docker`.
+ $ pip install --user tox tox-docker
-Assuming these requirements are met, actually testing Patchwork is quite easy
-to do. To start, you can show the default targets like so:
+Once installed, actually testing Patchwork is quite easy to do. To start, you
+can show the default targets like so:
.. code-block:: shell
@@ -66,7 +52,7 @@ parameter:
.. code-block:: shell
- $ tox -e py27-django18
+ $ tox -e py36-django21-mysql
In the case of the unit tests targets, you can also run specific tests by
passing the fully qualified test name as an additional argument to this
@@ -74,7 +60,7 @@ command:
.. code-block:: shell
- $ tox -e py27-django18 patchwork.tests.SubjectCleanUpTest
+ $ tox -e py36-django21-mysql patchwork.tests.SubjectCleanUpTest
Because Patchwork support multiple versions of Django, it's very important that
you test against all supported versions. When run without argument, tox will do
diff --git a/docs/development/installation.rst b/docs/development/installation.rst
index 0ab755f4..433c3a41 100644
--- a/docs/development/installation.rst
+++ b/docs/development/installation.rst
@@ -86,12 +86,6 @@ To run unit tests against the system Python packages, run:
$ docker-compose run --rm web python manage.py test
-To run unit tests for multiple versions using ``tox``, run:
-
-.. code-block:: shell
-
- $ docker-compose run --rm web tox
-
To reset the database before any of these commands, add ``--reset`` to the
command line after ``web`` and before any other arguments:
diff --git a/patchwork/settings/dev.py b/patchwork/settings/dev.py
index 53fa58f6..cfb9256c 100644
--- a/patchwork/settings/dev.py
+++ b/patchwork/settings/dev.py
@@ -19,6 +19,18 @@ try:
except ImportError:
debug_toolbar = None
+#
+# tox-docker settings
+#
+
+if 'POSTGRES_5432_TCP' in os.environ:
+ os.environ['PW_TEST_DB_HOST'] = os.environ['POSTGRES_HOST']
+ os.environ['PW_TEST_DB_PORT'] = os.environ['POSTGRES_5432_TCP']
+elif 'MYSQL_3306_TCP' in os.environ:
+ os.environ['PW_TEST_DB_HOST'] = os.environ['MYSQL_HOST']
+ os.environ['PW_TEST_DB_PORT'] = os.environ['MYSQL_3306_TCP']
+
+
#
# Core settings
# https://docs.djangoproject.com/en/1.11/ref/settings/#core-settings
diff --git a/tox.ini b/tox.ini
index d4c34e1c..3c71dafd 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,7 @@
[tox]
minversion = 2.0
-envlist = pep8,docs,py{27,34}-django111,py{35,36}-django{111,20,21,22}
+envlist = pep8,docs,py{27,34}-django111-{mysql,postgres},py{35,36}-django{111,20,21,22}-{mysql,postgres}
+skip_missing_interpreters = True
skipsdist = True
[testenv]
@@ -17,6 +18,9 @@ deps =
django22: django>=2.2,<2.3
django22: djangorestframework>=3.9.2
django22: django-filter>=2.1,<3.0
+docker =
+ postgres: postgres:9.6
+ mysql: mysql:8.0
setenv =
DJANGO_SETTINGS_MODULE = patchwork.settings.dev
PYTHONDONTWRITEBYTECODE = 1
@@ -24,15 +28,25 @@ setenv =
py27: PYTHONWARNINGS = once
py{34,36}:PYTHONWARNINGS = once,ignore::ImportWarning:backports
py35:PYTHONWARNINGS = once,ignore::ResourceWarning:unittest.suite,ignore::ImportWarning:backports
+ postgres: PW_TEST_DB_TYPE = postgres
+ postgres: PW_TEST_DB_USER = postgres
+ postgres: PW_TEST_DB_PASS = password
+ mysql: PW_TEST_DB_USER = root
+ mysql: PW_TEST_DB_PASS = password
passenv =
http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
PW_TEST_DB_TYPE PW_TEST_DB_USER PW_TEST_DB_PASS PW_TEST_DB_HOST
PW_TEST_DB_PORT
+dockerenv =
+ postgres: POSTGRES_PASSWORD=password
+ mysql: MYSQL_ROOT_PASSWORD=password
commands =
- python {toxinidir}/manage.py test --noinput '{posargs:patchwork}'
+ python {toxinidir}/manage.py test --noinput {posargs:patchwork}
[testenv:bashate]
deps = bashate
+docker =
+dockerenv =
whitelist_externals = bash
commands =
bash -c "find {toxinidir} \
@@ -43,6 +57,8 @@ commands =
[testenv:pep8]
basepython = python2.7
deps = flake8
+docker =
+dockerenv =
commands = flake8 {posargs} patchwork patchwork/bin/pwclient
[flake8]
@@ -57,6 +73,8 @@ exclude = ./patchwork/migrations
[testenv:docs]
deps =
-r{toxinidir}/docs/requirements.txt
+docker =
+dockerenv =
commands =
sphinx-build -E -W -b dirhtml -d docs/_build/doctrees docs docs/_build/html
@@ -67,9 +85,6 @@ deps =
-r{toxinidir}/requirements-prod.txt
commands = pylint patchwork --rcfile=pylint.rc
-[testenv:venv]
-commands = {posargs}
-
[testenv:coverage]
basepython = python2.7
deps =
--
2.21.0
More information about the Patchwork
mailing list