requires = ["tox>=4.60", "tox-uv>=1.36"]
env_list = ["fix", "3.15", "3.15t", "3.14", "3.13", "3.12", "3.11", "3.10", "type", "docs", "pkg_meta"]
skip_missing_interpreters = true

[env_run_base]
description = "run the tests with pytest under {env_name}"
runner = "uv-venv-lock-runner"
package = "wheel"
wheel_build_env = ".pkg"
dependency_groups = ["test"]
pass_env = ["PYTEST_*", "SSL_CERT_FILE"]
set_env.COVERAGE_FILE = { replace = "env", name = "COVERAGE_FILE", default = "{work_dir}{/}.coverage.{env_name}" }
set_env.COVERAGE_FILECOVERAGE_PROCESS_START = "{tox_root}{/}pyproject.toml"

[env."3.15t"]
description = "run tests under free-threaded 3.15 (no abi3 — PEP 803 abi3t not yet implemented in 3.15.0a8)"
set_env.MATURIN_PEP517_ARGS = "--no-default-features --features extension-module"
commands = [
    [
        "pytest",
        { replace = "posargs", extend = true, default = [
            "--durations",
            "5",
            "--junitxml",
            "{work_dir}{/}junit.{env_name}.xml",
            "--no-cov-on-fail",
            "--cov",
            "{env_site_packages_dir}{/}tox_toml_fmt",
            "--cov",
            "{tox_root}{/}tests",
            "--cov-config",
            "{tox_root}{/}pyproject.toml",
            "--cov-context",
            "test",
            "--cov-report",
            "term-missing:skip-covered",
            "--cov-report",
            "html:{env_tmp_dir}{/}htmlcov",
            "--cov-report",
            "xml:{work_dir}{/}coverage.{env_name}.xml",
            "tests",
        ] },
    ],
]

[env.type]
description = "run type check on code base"
dependency_groups = ["type"]
commands = [["mypy", "src{/}tox_toml_fmt"], ["mypy", "tests"]]

[env.docs]
description = "build documentation"
base_python = ["3.14"]
dependency_groups = ["docs"]
commands = [
    [
        "sphinx-build",
        "-d",
        "{env_tmp_dir}{/}docs_tree",
        "docs",
        "{env:READTHEDOCS_OUTPUT:{work_dir}{/}docs_out}/html",
        "--color",
        "-b",
        "html",
        { replace = "posargs", default = [
            "-b",
            "linkcheck",
        ], extend = true },
        "-W",
    ],
    [
        "python",
        "-c",
        'print(r"documentation available under file://{work_dir}{/}docs_out{/}html{/}index.html")',
    ],
]

[env.pkg_meta]
description = "check that the long description is valid"
skip_install = true
dependency_groups = ["pkg-meta"]
commands = [
    [
        "uv",
        "build",
        "--sdist",
        "--wheel",
        "--out-dir",
        "{env_tmp_dir}",
        ".",
    ],
    [
        "twine",
        "check",
        "{env_tmp_dir}{/}*",
    ],
    [
        "check-wheel-contents",
        "--no-config",
        "{env_tmp_dir}",
    ],
]

[env.readme]
description = "generate README.rst from docs"
runner = "uv-venv-runner"
package = "wheel"
wheel_build_env = ".pkg"
dependency_groups = []
change_dir = "{tox_root}{/}.."
commands = [["python", "tasks{/}generate_readme.py", "tox-toml-fmt"]]

[env.dev]
description = "dev environment with all deps at {envdir}"
package = "editable"
dependency_groups = ["dev"]
commands = [["uv", "pip", "tree"], ["python", "-c", 'print(r"{env_python}")']]
