diff options
Diffstat (limited to 'pyproject.toml')
-rw-r--r-- | pyproject.toml | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..17a69d2 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,210 @@ +[build-system] +requires = [ + "setuptools >= 63.0.0", # required by pyproject+setuptools_scm integration + "setuptools_scm[toml] >= 7.0.5", # required for "no-local-version" scheme + +] +build-backend = "setuptools.build_meta" + +[project] +# https://peps.python.org/pep-0621/#readme +requires-python = ">=3.8" +dynamic = ["version", "dependencies", "optional-dependencies"] +name = "ansible-lint" +description = "Checks playbooks for practices and behavior that could potentially be improved" +readme = "README.md" +authors = [{ "name" = "Will Thames", "email" = "will@thames.id.au" }] +maintainers = [{ "name" = "Ansible by Red Hat", "email" = "info@ansible.com" }] +license = { text = "GPLv3+" } +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: MIT License", + "Operating System :: MacOS", + "Operating System :: POSIX", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python", + "Topic :: System :: Systems Administration", + "Topic :: Software Development :: Quality Assurance", + "Topic :: Software Development :: Testing", + "Topic :: Utilities", +] +keywords = ["ansible", "lint"] + +[project.urls] +homepage = "https://github.com/ansible/ansible-lint" +documentation = "https://ansible-lint.readthedocs.io/" +repository = "https://github.com/ansible/ansible-lint" +changelog = "https://github.com/ansible/ansible-lint/releases" + +[project.scripts] +ansible-lint = "ansiblelint.__main__:_run_cli_entrypoint" + +[tool.black] +target-version = ["py38"] + +[tool.codespell] +skip = ".tox,.mypy_cache,build,.git,.eggs,pip-wheel-metadata" +# indention is a typo in ruamel.yaml's API +ignore-words-list = "indention" + +[tool.coverage.run] +source = ["src"] +# Do not use branch until bug is fixes: +# https://github.com/nedbat/coveragepy/issues/605 +# branch = true +parallel = true +concurrency = ["multiprocessing", "thread"] + +# Keep this default because xml/report do not know to use load it from config file: +# data_file = ".coverage" +[tool.coverage.paths] +source = ["src", ".tox/*/site-packages"] + +[tool.coverage.report] +exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:"] +omit = ["*/src/*/_vendor/*", "test/*"] +# Increase it just so it would pass on any single-python run +fail_under = 93 +skip_covered = true +skip_empty = true +# During development we might remove code (files) with coverage data, and we dont want to fail: +ignore_errors = true +show_missing = true + +[tool.isort] +profile = "black" +# add_imports = "from __future__ import annotations" +known_first_party = "ansiblelint" +known_third_party = "ansible,pytest,ruamel,setuptools,yaml" +# https://black.readthedocs.io/en/stable/the_black_code_style.html#line-length +multi_line_output = 3 +include_trailing_comma = true +force_grid_wrap = 0 +use_parentheses = true +ensure_newline_before_comments = true +line_length = 88 + +[tool.mypy] +python_version = 3.9 +color_output = true +error_summary = true +disallow_untyped_calls = true +disallow_untyped_defs = true +disallow_any_generics = true +# disallow_any_unimported = True +# warn_redundant_casts = True +# warn_return_any = True +# warn_unused_configs = True +# site-packages is here to help vscode mypy integration getting confused +exclude = "(build|dist|test/local-content|site-packages|~/.pyenv)" + +[[tool.mypy.overrides]] +module = ["ansible.*", "yamllint.*", "ansiblelint._version"] +ignore_missing_imports = true +ignore_errors = true + +[tool.pylint.MAIN] +extension-pkg-allow-list = ["black.parsing"] + +[tool.pylint.IMPORTS] +preferred-modules = ["py:pathlib", "unittest:pytest"] + +[tool.pylint.MASTER] +# pylint defaults + f,fh,v,id +good-names = ["i", "j", "k", "ex", "Run", "_", "f", "fh", "v", "id", "T"] +# Ignore as being generated: +ignore-paths = "^src/ansiblelint/(_version|_vendor).*$" + +[tool.pylint."MESSAGES CONTROL"] +# increase from default is 50 which is too aggressive +max-statements = 60 +disable = [ + # On purpose disabled as we rely on black + "line-too-long", + # TODO(ssbarnea): remove temporary skips adding during initial adoption: + "duplicate-code", + # unable to disable it inside tests + # https://github.com/PyCQA/pylint/issues/850 + "cyclic-import", +] + +[tool.pylint.TYPECHECK] +# pylint is unable to detect Namespace attributes and will throw a E1101 +generated-members = "options.*" + +[tool.pylint.SUMMARY] +# We don't need the score spamming console, as we either pass or fail +score = "n" + +[tool.pyright] +# https://github.com/microsoft/pyright/blob/main/docs/configuration.md#sample-pyprojecttoml-file +pythonVersion = "3.9" +include = ["src"] +# https://github.com/microsoft/pyright/issues/777 +"stubPath" = "" + +# spell-checker:ignore filterwarnings norecursedirs optionflags +[tool.pytest.ini_options] +# do not add options here as this will likely break either console runs or IDE +# integration like vscode or pycharm +addopts = "-p no:pytest_cov" +# https://code.visualstudio.com/docs/python/testing +# coverage is re-enabled in `tox.ini`. That approach is safer than +# `--no-cov` which prevents activation from tox.ini and which also fails +# when plugin is effectively missing. +doctest_optionflags = ["ALLOW_UNICODE", "ELLIPSIS"] +filterwarnings = ["error"] +junit_duration_report = "call" +# Our github annotation parser from .github/workflows/tox.yml requires xunit1 format. Ref: +# https://github.com/shyim/junit-report-annotations-action/issues/3#issuecomment-663241378 +junit_family = "xunit1" +junit_suite_name = "ansible_lint_test_suite" +minversion = "4.6.6" +norecursedirs = [ + "build", + "collections", + "dist", + "docs", + "src/ansiblelint/_vendor", + "src/ansible_lint.egg-info", + ".cache", + ".eggs", + ".git", + ".github", + ".tox", + "*.egg", + ".projects", +] +python_files = [ + "test_*.py", + # Ref: https://docs.pytest.org/en/latest/reference.html#confval-python_files + # Needed to discover legacy nose test modules: + "Test*.py", + # Needed to discover embedded Rule tests + "rules/*.py", +] +# Using --pyargs instead of testpath as we embed some tests +# See: https://github.com/pytest-dev/pytest/issues/6451#issuecomment-687043537 +# testpaths = +xfail_strict = true +markers = ["eco: Tests effects on a set of 3rd party ansible repositories"] + +[tool.setuptools.dynamic] +optional-dependencies.docs = { file = [".config/requirements-docs.txt"] } +optional-dependencies.test = { file = [".config/requirements-test.txt"] } +optional-dependencies.lock = { file = [".config/requirements-lock.txt"] } +dependencies = { file = [".config/requirements.in"] } + +[tool.setuptools_scm] +local_scheme = "no-local-version" +write_to = "src/ansiblelint/_version.py" |