[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
    django52-py313-all
    django40-py38-all
    docs
    # ... then test all the other supported combinations:
    # Django 5.2: Python 3.10, 3.11, 3.12 and 3.13 (3.13 is above)
    django52-py{310,311,312}-all
    # Django 5.1: Python 3.10, 3.11, and 3.12
    django51-py{310,311,312}-all
    # Django 5.0: Python 3.10, 3.11, and 3.12
    django50-py{310,311,312}-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 (above), 3.9, 3.10
    django40-py{39,310,py38,py39}-all
    # ... then pre-releases (if available) and current development:
    # Django 6.0 dev: Python 3.12 and 3.13
    djangoDev-py{312,313}-all
    # ... then partial installation (limit extras):
    django52-py313-{none,amazon_ses,postal,resend,sendgrid}
# 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
    django40: django~=4.0.0
    django41: django~=4.1.0
    django42: django~=4.2.0
    django50: django~=5.0.0
    django51: django~=5.1.0
    django52: django~=5.2.0
    # django60: django~=6.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
    all,sendgrid: sendgrid
setenv =
    # tell runtests.py to limit some test tags based on extras factor
    # (resend and sendgrid should work with or without their extras, so aren'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
    scaleway: ANYMAIL_ONLY_TEST=scaleway
    sendgrid: ANYMAIL_ONLY_TEST=sendgrid
    sparkpost: ANYMAIL_ONLY_TEST=sparkpost
    unisender_go: ANYMAIL_ONLY_TEST=unisender_go
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.13
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.13
passenv =
    CONTINUOUS_INTEGRATION
    GOOGLE_ANALYTICS_ID
	# (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
