[tox] envlist = # Anymail supports the same Python versions as Django, plus PyPy. # https://docs.djangoproject.com/en/dev/faq/install/#what-python-version-can-i-use-with-django # Factors: django-python-extras # Test lint, docs, earliest/latest Django first, to catch most errors early... lint django50-py312-all django30-py37-all docs # ... then test all the other supported combinations: # Django 5.0: Python 3.10, 3.11, and 3.12 django50-py{310,311}-all # Django 4.2: Python 3.8, 3.9, 3.10, 3.11 django42-py{38,39,310,311,py38,py39}-all # Django 4.1: Python 3.8, 3.9, 3.10 django41-py{38,39,310,py38,py39}-all # Django 4.0: Python 3.8, 3.9, 3.10 django40-py{38,39,310,py38,py39}-all # Django 3.2: Python 3.6 (eol 2021-12-23), 3.7, 3.8, 3.9 django32-py{37,38,39,py38,py39}-all # Django 3.1: Python 3.6 (eol 2021-12-23), 3.7, 3.8, 3.9 (added in 3.1.3) django31-py{37,38,39,py38,py39}-all # Django 3.0: Python 3.6 (eol 2021-12-23), 3.7, 3.8, 3.9 (added in 3.0.11) django30-py{38,39,py38,py39}-all # ... then prereleases (if available) and current development: # Django 5.1 alpha: Python 3.10, 3.11, and 3.12 #django51-py{310,311,312}-all # Django 5.1 dev: Python 3.10, 3.11, and 3.12 djangoDev-py{310,311,312}-all # ... then partial installation (limit extras): django50-py312-{none,amazon_ses,postal,resend} # tox requires isolated builds to use pyproject.toml build config: isolated_build = True [testenv] args_are_paths = false # Download latest version of pip/setuptools available on each Python version: download = true deps = -rtests/requirements.txt django30: django~=3.0.0 django31: django~=3.1.0 django32: django~=3.2.0 django40: django~=4.0.0 django41: django~=4.1.0 django42: django~=4.2.0 django50: django~=5.0.0a0 djangoDev: https://github.com/django/django/tarball/main extras = # Install [esp-name] extras only when testing "all" or esp_name factor. # (Only ESPs with extra dependencies need to be listed here. # Careful: tox factors (on the left) use underscore; extra names use hyphen.) all,amazon_ses: amazon-ses all,postal: postal all,resend: resend setenv = # tell runtests.py to limit some test tags based on extras factor # (resend should work with or without its extras, so it isn't in `none`) none: ANYMAIL_SKIP_TESTS=amazon_ses,postal amazon_ses: ANYMAIL_ONLY_TEST=amazon_ses brevo: ANYMAIL_ONLY_TEST=brevo mailersend: ANYMAIL_ONLY_TEST=mailersend mailgun: ANYMAIL_ONLY_TEST=mailgun mailjet: ANYMAIL_ONLY_TEST=mailjet mandrill: ANYMAIL_ONLY_TEST=mandrill postal: ANYMAIL_ONLY_TEST=postal postmark: ANYMAIL_ONLY_TEST=postmark resend: ANYMAIL_ONLY_TEST=resend sendgrid: ANYMAIL_ONLY_TEST=sendgrid unisender_go: ANYMAIL_ONLY_TEST=unisender_go sparkpost: ANYMAIL_ONLY_TEST=sparkpost ignore_outcome = # CI that wants to handle errors itself can set TOX_OVERRIDE_IGNORE_OUTCOME=false djangoDev: {env:TOX_OVERRIDE_IGNORE_OUTCOME:true} commands_pre = python -VV python -m pip --version 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.8 skip_install = true passenv = CONTINUOUS_INTEGRATION # Make sure pre-commit can clone hook repos over ssh or http proxy. # https://pre-commit.com/#usage-with-tox SSH_AUTH_SOCK http_proxy https_proxy no_proxy # (but not any of the live test API keys) deps = pre-commit commands_pre = python -VV pre-commit --version commands = pre-commit validate-config pre-commit run --all-files [testenv:docs] basepython = python3.11 passenv = CONTINUOUS_INTEGRATION # (but not any of the live test API keys) setenv = DOCS_BUILD_DIR={envdir}/_html deps = -rdocs/requirements.txt commands_pre = python -VV sphinx-build --version commands = # Build and verify docs: sphinx-build -W -b dirhtml docs {env:DOCS_BUILD_DIR} # Build and verify package metadata readme. # Errors here are in README.rst: python docs/_readme/render.py \ --package django-anymail \ --out {env:DOCS_BUILD_DIR}/readme.html