summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.zuul.yaml41
-rw-r--r--doc/source/contributor/topics/testing.rst42
-rw-r--r--playbooks/horizon-tox-django/pre.yaml11
-rw-r--r--playbooks/horizon-tox-django/run.yaml7
-rw-r--r--roles/ensure-django/defaults/main.yaml3
-rw-r--r--roles/ensure-django/tasks/main.yaml4
-rw-r--r--tox.ini5
7 files changed, 98 insertions, 15 deletions
diff --git a/.zuul.yaml b/.zuul.yaml
index ccae7995b..c97920cf8 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -10,20 +10,39 @@
- ^openstack_auth/locale/.*$
- job:
- name: horizon-openstack-tox-python3-django111
+ name: horizon-tox-python3-django
+ abstract: true
parent: horizon-openstack-tox-base
+ description: |
+ Run tox with different Django version.
+
+ .. zuul:jobvar: tox_envlist
+
+ Which tox environment to run
+
+ .. zuul:jobvar: django_version
+
+ Django version to be used.
+ pip version specifier like ``>=1.11,<2.0`` should be passed.
+
+ pre-run: playbooks/horizon-tox-django/pre.yaml
+ run: playbooks/horizon-tox-django/run.yaml
vars:
- tox_envlist: py3-dj111
+ tox_envlist: py36
required-projects:
- name: openstack/horizon
- job:
- name: horizon-openstack-tox-python3-django22
- parent: horizon-openstack-tox-base
+ name: horizon-tox-python3-django111
+ parent: horizon-tox-python3-django
vars:
- tox_envlist: py3-dj22
- required-projects:
- - name: openstack/horizon
+ django_version: '>=1.11,<2.0'
+
+- job:
+ name: horizon-tox-python3-django22
+ parent: horizon-tox-python3-django
+ vars:
+ django_version: '>=2.2,<3.0'
- job:
name: horizon-selenium-headless
@@ -154,12 +173,12 @@
Run unit tests with non-primary Django versions.
check:
jobs:
- - horizon-openstack-tox-python3-django111
- - horizon-openstack-tox-python3-django22
+ - horizon-tox-python3-django111
+ - horizon-tox-python3-django22
gate:
jobs:
- - horizon-openstack-tox-python3-django111
- - horizon-openstack-tox-python3-django22
+ - horizon-tox-python3-django111
+ - horizon-tox-python3-django22
- project:
templates:
diff --git a/doc/source/contributor/topics/testing.rst b/doc/source/contributor/topics/testing.rst
index 5d1e07cd9..81d84cb86 100644
--- a/doc/source/contributor/topics/testing.rst
+++ b/doc/source/contributor/topics/testing.rst
@@ -229,6 +229,48 @@ Tips and tricks
+ },
'django.db.backends': {
+Testing with different Django versions
+--------------------------------------
+
+Horizon supports multiple Django versions and our CI tests proposed patches
+with various supported Django versions. The corresponding job names are like
+``horizon-tox-python3-django111``.
+
+You can know which tox env and django version are used by checking
+``tox_envlist`` and ``django_version`` of the corresponding job definition
+in ``.zuul.yaml``.
+
+To test it locally, you need some extra steps.
+Here is an example where ``tox_envlist`` is ``py36`` and
+``django_version`` is ``>=1.11,<2.0``.
+
+.. code:: console
+
+ $ tox -e py36 --notest -r
+ $ .tox/py36/bin/python -m pip install 'django>=1.11,<2.0'
+ $ tox -e py36
+
+.. note::
+
+ - ``-r`` in the first command recreates the tox environment.
+ Omit it if you know what happens.
+ - We usually need to quote the django version in the pip command-line
+ in most shells to escape interpretations by the shell.
+
+To check the django version installed in your tox env, run:
+
+.. code:: console
+
+ $ .tox/py36/bin/python -m pip freeze | grep Django
+ Django==1.11.27
+
+To reset the tox env used for testing with different Django version
+to the regular tox env, run ``tox`` command with ``-r`` to recreate it.
+
+.. code:: console
+
+ $ tox -e py36 -r
+
Coverage reports
----------------
diff --git a/playbooks/horizon-tox-django/pre.yaml b/playbooks/horizon-tox-django/pre.yaml
new file mode 100644
index 000000000..e4e5230e2
--- /dev/null
+++ b/playbooks/horizon-tox-django/pre.yaml
@@ -0,0 +1,11 @@
+# The base contents come from zuul-jobs/playbooks/tox/run.yaml
+- hosts: all
+ roles:
+ - revoke-sudo
+ - role: tox
+ vars:
+ # Do not run actual tests now as we would like to install
+ # a different version of django.
+ tox_extra_args: "-vv --notest"
+ tox_install_siblings: true
+ - ensure-django
diff --git a/playbooks/horizon-tox-django/run.yaml b/playbooks/horizon-tox-django/run.yaml
new file mode 100644
index 000000000..000435591
--- /dev/null
+++ b/playbooks/horizon-tox-django/run.yaml
@@ -0,0 +1,7 @@
+# The base contents come from zuul-jobs/playbooks/tox/run.yaml
+- hosts: all
+ roles:
+ # siblings modules are already handled, so we can skip it.
+ - role: tox
+ vars:
+ tox_install_siblings: false
diff --git a/roles/ensure-django/defaults/main.yaml b/roles/ensure-django/defaults/main.yaml
new file mode 100644
index 000000000..5236efc7c
--- /dev/null
+++ b/roles/ensure-django/defaults/main.yaml
@@ -0,0 +1,3 @@
+django_version: ""
+tox_envlist: venv
+zuul_work_dir: "{{ zuul.project.src_dir }}"
diff --git a/roles/ensure-django/tasks/main.yaml b/roles/ensure-django/tasks/main.yaml
new file mode 100644
index 000000000..b3414d3cf
--- /dev/null
+++ b/roles/ensure-django/tasks/main.yaml
@@ -0,0 +1,4 @@
+- name: "Install Django"
+ command: ".tox/{{ tox_envlist }}/bin/python -m pip install django{{ django_version }}"
+ args:
+ chdir: "{{ zuul_work_dir }}"
diff --git a/tox.ini b/tox.ini
index 3b75983cb..bec62fa16 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
[tox]
minversion = 3.1
-envlist = pep8,py36,py37,py3-dj{111,21,22},releasenotes,npm
+envlist = pep8,py36,py37,releasenotes,npm
skipsdist = True
# Automatic envs (pyXX) will only use the python version appropriate to that
# env and ignore basepython inherited from [testenv] if we set
@@ -24,9 +24,6 @@ deps =
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt
commands =
- dj111: pip install django>=1.11,<2.0
- dj21: pip install django>=2.1,<2.2
- dj22: pip install django>=2.2,<2.3
find . -type f -name "*.pyc" -delete
bash {toxinidir}/tools/unit_tests.sh {envpython} {toxinidir} {posargs}