diff options
Diffstat (limited to 'pyproject.toml')
-rw-r--r-- | pyproject.toml | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..e182c5b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,278 @@ +[build-system] +requires = [ + "setuptools >= 65.3.0", # required by pyproject+setuptools_scm integration and editable installs + "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.9" +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.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 = ["py39"] + +[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 = ["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 +strict = true +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|examples/playbooks/collections|plugins/modules)" +# https://github.com/python/mypy/issues/12664 +no_incremental = true + +[[tool.mypy.overrides]] +module = [ + "ansible.*", + "yamllint.*", + "ansiblelint._version", # generated + "ruamel.yaml", + "spdx.*", +] +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] +bad-names = [ + # spell-checker:ignore linenumber + "linenumber", # use lineno instead + "line_number", # use lineno instead + +] +# pylint defaults + f,fh,v,id +good-names = ["i", "j", "k", "Run", "_", "f", "fh", "v", "id", "T"] +# Ignore as being generated: +ignore-paths = "^src/ansiblelint/_version.*$" + +[tool.pylint."MESSAGES CONTROL"] +# increase from default is 50 which is too aggressive +max-statements = 60 +disable = [ + # Disabled on purpose: + "line-too-long", # covered by black + "too-many-branches", # covered by ruff C901 + # 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", + # https://github.com/PyCQA/pylint/issues/8453 + "preferred-module", +] + +[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", + # https://sourceforge.net/p/ruamel-yaml/tickets/452/ + "ignore:Deprecated call to `pkg_resources.declare_namespace:DeprecationWarning", + # https://github.com/spdx/tools-python/issues/507 + "ignore:pkg_resources is deprecated as an API:DeprecationWarning", + # We raise one non critical warning from our own conftest.py: + "always::pytest.PytestWarning", +] +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/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 + +[tool.ruff] +required-version = "0.0.274" +ignore = [ + "E501", # we use black + "ERA001", # auto-removal of commented out code affects development and vscode integration + "INP001", # "is part of an implicit namespace package", all false positives + "PLW2901", # PLW2901: Redefined loop variable + "RET504", # Unnecessary variable assignment before `return` statement + # temporary disabled until we fix them: + "ANN", + "ARG002", # Unused method argument (currently in too many places) + "D102", # Missing docstring in public method (currently in too many places) + "FBT001", + "FBT003", + "PLR", + "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar` + "TRY", +] +select = ["ALL"] +target-version = "py39" +# Same as Black. +line-length = 88 + +[tool.ruff.mccabe] +# Implicit 10 is too low for our codebase, even black uses 18 as default. +max-complexity = 20 + +[tool.ruff.flake8-builtins] +builtins-ignorelist = ["id"] + +[tool.ruff.flake8-pytest-style] +parametrize-values-type = "tuple" + +[tool.ruff.isort] +known-first-party = ["ansiblelint"] + +[tool.ruff.per-file-ignores] +"test/**/*.py" = ["S"] +"src/ansiblelint/rules/*.py" = ["S"] +"src/ansiblelint/testing/*.py" = ["S"] +# Temporary disabled until we fix them: +"src/ansiblelint/{utils,file_utils,runner,loaders,constants,config,cli,_mockings}.py" = [ + "PTH", +] + +[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" |