[tox] envlist = # Factors: django-python-extras # Test these environments first, to catch most errors early... lint django32-py39-all django20-py35-all docs # ... then test all the other supported combinations: django32-py{36,37,38,py3}-all django31-py{36,37,38,39,py3}-all django30-py{36,37,38,39,py3}-all django22-py{35,36,37,38,39,py3}-all django21-py{35,36,37,py3}-all django20-py{36,py3}-all # ... then prereleases (if available): djangoDev-py{38,39,310,py3}-all # ... then partial installation (limit extras): django31-py37-{none,amazon_ses,postal} # ... then older versions of some dependencies: django22-py37-all-old_urllib3 [testenv] deps = django20: django~=2.0.0 django21: django~=2.1.0 django22: django~=2.2.0 django30: django~=3.0.0 django31: django~=3.1.0 django32: django>=3.2a1 djangoDev: https://github.com/django/django/tarball/main old_urllib3: urllib3<1.25 # testing dependencies (duplicates setup.py tests_require, less optional extras): mock extras = all,amazon_ses: amazon_ses all,postal: cryptography setenv = # tell runtests.py to limit some test tags based on extras factor none: ANYMAIL_SKIP_TESTS=amazon_ses,postal amazon_ses: ANYMAIL_ONLY_TEST=amazon_ses postal: ANYMAIL_ONLY_TEST=postal ignore_outcome = # CI that wants to handle errors itself can set TOX_FORCE_IGNORE_OUTCOME=false djangoDev: {env:TOX_FORCE_IGNORE_OUTCOME:true} args_are_paths = false commands_pre = python -VV python -c 'import django; print("Django", django.__version__)' commands = python runtests.py {posargs} passenv = ANYMAIL_ONLY_TEST ANYMAIL_SKIP_TESTS ANYMAIL_RUN_LIVE_TESTS CONTINUOUS_INTEGRATION ANYMAIL_TEST_* [testenv:lint] basepython = python3 skip_install = true passenv = CONTINUOUS_INTEGRATION # (but not any of the live test API keys) deps = flake8 commands_pre = python -VV flake8 --version commands = flake8 [testenv:docs] basepython = python3 skip_install = true passenv = CONTINUOUS_INTEGRATION # (but not any of the live test API keys) setenv = DOCS_BUILD_DIR={envdir}/_html whitelist_externals = /bin/bash deps = -rdocs/requirements.txt commands_pre = python -VV sphinx-build --version commands = # Verify README.rst as used in setup.py long_description: python setup.py check --restructuredtext --strict # Build and verify docs: sphinx-build -W -b dirhtml docs {env:DOCS_BUILD_DIR} # Build README.rst into html: /bin/bash -c 'python setup.py --long-description \ | rst2html5.py --config=docs/_readme/docutils.cfg \ > {env:DOCS_BUILD_DIR}/readme.html'