summaryrefslogtreecommitdiffstats
path: root/pyproject.toml
diff options
context:
space:
mode:
Diffstat (limited to 'pyproject.toml')
-rw-r--r--pyproject.toml210
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"