Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ansible-lint for openSUSE:Factory checked in at 2025-08-21 16:57:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ansible-lint (Old) and /work/SRC/openSUSE:Factory/.ansible-lint.new.29662 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansible-lint" Thu Aug 21 16:57:03 2025 rev:66 rq:1300525 version:25.8.1 Changes: -------- --- /work/SRC/openSUSE:Factory/ansible-lint/ansible-lint.changes 2025-08-02 00:45:16.427325480 +0200 +++ /work/SRC/openSUSE:Factory/.ansible-lint.new.29662/ansible-lint.changes 2025-08-21 16:57:04.952330480 +0200 @@ -1,0 +2,18 @@ +Wed Aug 20 11:17:07 UTC 2025 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- update to 25.8.1: + * Bugfixes + - Fix first-run collection discovery by enabling plugin loader + after prepare_environment (#4722) @cidrblock + * Maintenance + - Fix mypy and pyright type checking errors (#4724) @cidrblock + +------------------------------------------------------------------- +Wed Aug 20 11:14:17 UTC 2025 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- update to 25.8.0: + * Bugfixes + - Lint failure in ansible.utils: src must be an absolute path fix + (#4712) @anusshukla + +------------------------------------------------------------------- Old: ---- ansible-lint-25.7.0.tar.gz New: ---- ansible-lint-25.8.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ansible-lint.spec ++++++ --- /var/tmp/diff_new_pack.EKe2s2/_old 2025-08-21 16:57:05.624358478 +0200 +++ /var/tmp/diff_new_pack.EKe2s2/_new 2025-08-21 16:57:05.624358478 +0200 @@ -40,7 +40,7 @@ %global lib_name ansiblelint %{?python_enable_dependency_generator} Name: ansible-lint -Version: 25.7.0 +Version: 25.8.1 Release: 0%{?dist} Summary: Best practices checker for Ansible License: MIT @@ -69,7 +69,7 @@ # to make sure this only builds if they are present # https://github.com/ansible/ansible-lint/blob/main/.config/requirements.in BuildRequires: ansible-core >= 2.16.11 -BuildRequires: %{ansible_python}-ansible-compat >= 25.6.0 +BuildRequires: %{ansible_python}-ansible-compat >= 25.8.0 BuildRequires: %{ansible_python}-black >= 23.10.1 BuildRequires: %{ansible_python}-bracex >= 2.5.post1 BuildRequires: %{ansible_python}-enrich >= 1.2.7 @@ -89,7 +89,7 @@ # # https://github.com/ansible/ansible-lint/blob/main/.config/requirements.in Requires: ansible-core >= 2.16.11 -Requires: %{ansible_python}-ansible-compat >= 25.6.0 +Requires: %{ansible_python}-ansible-compat >= 25.8.0 Requires: %{ansible_python}-black >= 23.10.1 Requires: %{ansible_python}-bracex >= 2.5.post1 Requires: %{ansible_python}-enrich >= 1.2.7 ++++++ ansible-lint-25.7.0.tar.gz -> ansible-lint-25.8.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/.config/constraints.txt new/ansible-lint-25.8.1/.config/constraints.txt --- old/ansible-lint-25.7.0/.config/constraints.txt 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/.config/constraints.txt 2025-08-14 02:42:08.000000000 +0200 @@ -1,8 +1,8 @@ # This file was autogenerated by uv via the following command: # tox run -e deps -ansible-compat==25.6.0 # via ansible-lint (pyproject.toml) -ansible-creator==25.6.0 # via ansible-lint (pyproject.toml) -astroid==3.3.10 # via pylint +ansible-compat==25.8.0 # via ansible-lint (pyproject.toml) +ansible-creator==25.7.1 # via ansible-lint (pyproject.toml) +astroid==3.3.11 # via pylint asttokens==3.0.0 # via stack-data attrs==25.3.0 # via jsonschema, referencing, ansible-lint (pyproject.toml) babel==2.17.0 # via mkdocs-material @@ -15,15 +15,15 @@ cachetools==6.1.0 # via tox cairocffi==1.7.1 # via cairosvg cairosvg==2.7.1 # via mkdocs-ansible -certifi==2025.7.14 # via requests +certifi==2025.8.3 # via requests cffi==1.17.1 # via cairocffi, cryptography, ansible-lint (pyproject.toml) chardet==5.2.0 # via tox -charset-normalizer==3.4.2 # via requests +charset-normalizer==3.4.3 # via requests click==8.2.1 # via black, mkdocs, ansible-lint (pyproject.toml) colorama==0.4.6 # via griffe, mkdocs-material, tox -coverage==7.10.0 # via coverage-enable-subprocess, ansible-lint (pyproject.toml) +coverage==7.10.3 # via coverage-enable-subprocess, ansible-lint (pyproject.toml) coverage-enable-subprocess==1.0 # via ansible-lint (pyproject.toml) -cryptography==45.0.5 # via ansible-core, ansible-lint (pyproject.toml) +cryptography==45.0.6 # via ansible-core, ansible-lint (pyproject.toml) csscompressor==0.9.5 # via mkdocs-minify-plugin cssselect2==0.8.0 # via cairosvg decorator==5.2.1 # via ipdb, ipython @@ -38,24 +38,24 @@ ghp-import==2.1.0 # via mkdocs gitdb==4.0.12 # via gitpython gitpython==3.1.45 # via tox-extra -griffe==1.8.0 # via mkdocstrings-python +griffe==1.11.1 # via mkdocstrings-python hjson==3.1.0 # via mkdocs-macros-plugin, super-collections htmlmin2==0.1.13 # via mkdocs-minify-plugin idna==3.10 # via requests importlib-metadata==8.7.0 # via ansible-lint (pyproject.toml) iniconfig==2.1.0 # via pytest ipdb==0.13.13 # via ansible-lint (pyproject.toml) -ipython==8.36.0 # via ipdb, ansible-lint (pyproject.toml) +ipython==8.37.0 # via ipdb, ansible-lint (pyproject.toml) isort==6.0.1 # via pylint jedi==0.19.2 # via ipython jinja2==3.1.6 # via ansible-core, ansible-creator, mkdocs, mkdocs-macros-plugin, mkdocs-material, mkdocstrings, ansible-lint (pyproject.toml) jmespath==1.0.1 # via ansible-lint (pyproject.toml) jsmin==3.0.1 # via mkdocs-minify-plugin -jsonschema==4.24.0 # via ansible-compat, ansible-lint (pyproject.toml) +jsonschema==4.25.0 # via ansible-compat, ansible-lint (pyproject.toml) jsonschema-specifications==2025.4.1 # via jsonschema, ansible-lint (pyproject.toml) -license-expression==30.4.3 # via ansible-lint (pyproject.toml) -linkchecker==10.5.0 # via mkdocs-ansible -markdown==3.8 # via markdown-include, mkdocs, mkdocs-autorefs, mkdocs-htmlproofer-plugin, mkdocs-material, mkdocstrings, pymdown-extensions +license-expression==30.4.4 # via ansible-lint (pyproject.toml) +linkchecker==10.6.0 # via mkdocs-ansible +markdown==3.8.2 # via markdown-include, mkdocs, mkdocs-autorefs, mkdocs-htmlproofer-plugin, mkdocs-material, mkdocstrings, pymdown-extensions markdown-exec==1.11.0 # via mkdocs-ansible markdown-include==0.8.1 # via mkdocs-ansible markupsafe==3.0.2 # via jinja2, mkdocs, mkdocs-autorefs, mkdocstrings, ansible-lint (pyproject.toml) @@ -68,13 +68,13 @@ mkdocs-gen-files==0.5.0 # via mkdocs-ansible mkdocs-get-deps==0.2.0 # via mkdocs mkdocs-htmlproofer-plugin==1.3.0 # via mkdocs-ansible -mkdocs-macros-plugin==1.3.7 # via mkdocs-ansible +mkdocs-macros-plugin==1.3.9 # via mkdocs-ansible mkdocs-material==9.6.16 # via mkdocs-ansible mkdocs-material-extensions==1.3.1 # via mkdocs-ansible, mkdocs-material mkdocs-minify-plugin==0.8.0 # via mkdocs-ansible mkdocstrings==0.30.0 # via mkdocs-ansible, mkdocstrings-python mkdocstrings-python==1.16.12 # via mkdocs-ansible -mypy==1.16.1 # via ansible-lint (pyproject.toml) +mypy==1.17.1 # via ansible-lint (pyproject.toml) mypy-extensions==1.1.0 # via black, mypy, ansible-lint (pyproject.toml) netaddr==1.3.0 # via ansible-lint (pyproject.toml) packaging==25.0 # via ansible-compat, ansible-core, bindep, black, mkdocs, mkdocs-macros-plugin, pyproject-api, pytest, pytest-sugar, tox, tox-extra, tox-uv, ansible-lint (pyproject.toml) @@ -82,7 +82,7 @@ parsley==1.3 # via bindep parso==0.8.4 # via jedi pathspec==0.12.1 # via black, mkdocs, mkdocs-macros-plugin, mypy, yamllint, ansible-lint (pyproject.toml) -pbr==6.1.1 # via bindep +pbr==7.0.0 # via bindep pexpect==4.9.0 # via ipython pillow==11.3.0 # via cairosvg, mkdocs-ansible platformdirs==4.3.8 # via black, mkdocs-get-deps, pylint, tox, virtualenv, ansible-lint (pyproject.toml) @@ -93,8 +93,8 @@ pure-eval==0.2.3 # via stack-data pycparser==2.22 # via cffi, ansible-lint (pyproject.toml) pygments==2.19.2 # via ipython, mkdocs-material, pytest -pylint==3.3.7 # via ansible-lint (pyproject.toml) -pymdown-extensions==10.16 # via markdown-exec, mkdocs-ansible, mkdocs-material, mkdocstrings +pylint==3.3.8 # via ansible-lint (pyproject.toml) +pymdown-extensions==10.16.1 # via markdown-exec, mkdocs-ansible, mkdocs-material, mkdocstrings pyproject-api==1.9.1 # via tox pytest==8.4.1 # via pytest-instafail, pytest-mock, pytest-plus, pytest-sugar, pytest-xdist, ansible-lint (pyproject.toml) pytest-instafail==0.5.0 # via ansible-lint (pyproject.toml) @@ -107,7 +107,7 @@ pyyaml-env-tag==1.1 # via mkdocs referencing==0.36.2 # via jsonschema, jsonschema-specifications, types-jsonschema, ansible-lint (pyproject.toml) requests==2.32.4 # via linkchecker, mkdocs-htmlproofer-plugin, mkdocs-material -rpds-py==0.26.0 # via jsonschema, referencing, ansible-lint (pyproject.toml) +rpds-py==0.27.0 # via jsonschema, referencing, ansible-lint (pyproject.toml) ruamel-yaml==0.18.14 # via ansible-lint (pyproject.toml) setproctitle==1.3.6 # via pytest-xdist setuptools==80.9.0 # via pbr @@ -120,14 +120,14 @@ termcolor==3.1.0 # via mkdocs-macros-plugin, pytest-sugar tinycss2==1.4.0 # via cairosvg, cssselect2 tomlkit==0.13.3 # via pylint -tox==4.27.0 # via tox-extra, tox-uv, ansible-lint (pyproject.toml) +tox==4.28.4 # via tox-extra, tox-uv, ansible-lint (pyproject.toml) tox-extra==2.2.0 # via ansible-lint (pyproject.toml) -tox-uv==1.26.1 # via tox-extra, ansible-lint (pyproject.toml) +tox-uv==1.27.0 # via tox-extra, ansible-lint (pyproject.toml) traitlets==5.14.3 # via ipython, matplotlib-inline -types-jsonschema==4.24.0.20250528 # via ansible-lint (pyproject.toml) -types-pyyaml==6.0.12.20250516 # via ansible-lint (pyproject.toml) +types-jsonschema==4.25.0.20250809 # via ansible-lint (pyproject.toml) +types-pyyaml==6.0.12.20250809 # via ansible-lint (pyproject.toml) urllib3==2.5.0 # via requests -virtualenv==20.32.0 # via tox +virtualenv==20.34.0 # via tox watchdog==6.0.0 # via mkdocs wcmatch==10.1 # via ansible-lint (pyproject.toml) wcwidth==0.2.13 # via prompt-toolkit diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/.config/requirements-lock.txt new/ansible-lint-25.8.1/.config/requirements-lock.txt --- old/ansible-lint-25.7.0/.config/requirements-lock.txt 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/.config/requirements-lock.txt 2025-08-14 02:42:08.000000000 +0200 @@ -1,16 +1,16 @@ # This file was autogenerated by uv via the following command: # tox run -e deps -ansible-compat==25.6.0 # via ansible-lint (pyproject.toml) +ansible-compat==25.8.0 # via ansible-lint (pyproject.toml) attrs==25.3.0 # via jsonschema, referencing black==25.1.0 # via ansible-lint (pyproject.toml) bracex==2.6 # via wcmatch cffi==1.17.1 # via cryptography click==8.2.1 # via black -cryptography==45.0.5 # via ansible-core +cryptography==45.0.6 # via ansible-core filelock==3.18.0 # via ansible-lint (pyproject.toml) importlib-metadata==8.7.0 # via ansible-lint (pyproject.toml) jinja2==3.1.6 # via ansible-core -jsonschema==4.24.0 # via ansible-compat, ansible-lint (pyproject.toml) +jsonschema==4.25.0 # via ansible-compat, ansible-lint (pyproject.toml) jsonschema-specifications==2025.4.1 # via jsonschema markupsafe==3.0.2 # via jinja2 mypy-extensions==1.1.0 # via black @@ -20,7 +20,7 @@ pycparser==2.22 # via cffi pyyaml==6.0.2 # via ansible-compat, ansible-core, yamllint, ansible-lint (pyproject.toml) referencing==0.36.2 # via jsonschema, jsonschema-specifications, ansible-lint (pyproject.toml) -rpds-py==0.26.0 # via jsonschema, referencing +rpds-py==0.27.0 # via jsonschema, referencing ruamel-yaml==0.18.14 # via ansible-lint (pyproject.toml) subprocess-tee==0.4.2 # via ansible-compat, ansible-lint (pyproject.toml) wcmatch==10.1 # via ansible-lint (pyproject.toml) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/.config/requirements.in new/ansible-lint-25.8.1/.config/requirements.in --- old/ansible-lint-25.7.0/.config/requirements.in 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/.config/requirements.in 2025-08-14 02:42:08.000000000 +0200 @@ -1,6 +1,6 @@ # Special order section for helping pip: ansible-core>=2.16.11 # GPLv3 -ansible-compat>=25.1.5 # GPLv3 +ansible-compat>=25.8.0 # GPLv3 # alphabetically sorted: black>=24.3.0 # MIT (security) filelock>=3.8.2 # The Unlicense diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/.git_archival.txt new/ansible-lint-25.8.1/.git_archival.txt --- old/ansible-lint-25.7.0/.git_archival.txt 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/.git_archival.txt 2025-08-14 02:42:08.000000000 +0200 @@ -1,4 +1,4 @@ -node: 9765b8704b2c3f4ab782815b528e0393662e1c04 -node-date: 2025-07-29T15:54:51-04:00 +node: 1080d91d521d909ad79b868131e7ed7c6c708c77 +node-date: 2025-08-13T17:42:08-07:00 describe-name: v25 -ref-names: HEAD -> main, tag: v25.7.0, tag: v25 +ref-names: tag: v25.8.1, tag: v25 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/.github/lower-constraints.txt new/ansible-lint-25.8.1/.github/lower-constraints.txt --- old/ansible-lint-25.7.0/.github/lower-constraints.txt 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/.github/lower-constraints.txt 2025-08-14 02:42:08.000000000 +0200 @@ -2,7 +2,7 @@ # automatically updated by dependabot. This should be kept in sync with # minimal requirements configured inside .config/requirements.in ansible-core==2.16.11 -ansible-compat==25.1.5 # GPLv3 +ansible-compat==25.8.0 # GPLv3 black==24.3.0 # MIT (security) filelock==3.16.1 # The Unlicense # due to tox-uv jsonschema==4.10.0 # MIT, version needed for improved errors diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/.github/workflows/tox.yml new/ansible-lint-25.8.1/.github/workflows/tox.yml --- old/ansible-lint-25.7.0/.github/workflows/tox.yml 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/.github/workflows/tox.yml 2025-08-14 02:42:08.000000000 +0200 @@ -40,7 +40,7 @@ hook docs pre - py311-devel + py312-devel py310-lower py312-lower py313-devel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/.pre-commit-config.yaml new/ansible-lint-25.8.1/.pre-commit-config.yaml --- old/ansible-lint-25.7.0/.pre-commit-config.yaml 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/.pre-commit-config.yaml 2025-08-14 02:42:08.000000000 +0200 @@ -61,7 +61,7 @@ - prettier@3.2.4 - prettier-plugin-sort-json@3.1.0 - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v9.0.1 + rev: v9.2.0 hooks: - id: cspell entry: bash @@ -79,7 +79,7 @@ hooks: - id: check-github-workflows - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v5.0.0 + rev: v6.0.0 hooks: - id: check-added-large-files - id: check-merge-conflict @@ -147,26 +147,26 @@ alias: toml - repo: https://github.com/tox-dev/tox-ini-fmt - rev: 1.5.0 + rev: 1.6.0 hooks: - id: tox-ini-fmt - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.2 + rev: v0.12.8 hooks: - id: ruff-format alias: ruff - id: ruff-check alias: ruff - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.16.1 + rev: v1.17.1 hooks: - id: mypy # "." and pass_files are used to make pre-commit mypy behave the same as standalone mypy args: ["."] pass_filenames: false additional_dependencies: &deps - - ansible-compat>=25.1.5 + - ansible-compat>=25.8.0 - black>=22.10.0 - cryptography>=39.0.1 - filelock>=3.12.2 @@ -185,12 +185,12 @@ - wcmatch - yamllint>=1.34.0 - repo: https://github.com/RobertCraigie/pyright-python - rev: v1.1.402 + rev: v1.1.403 hooks: - id: pyright additional_dependencies: *deps - repo: https://github.com/pycqa/pylint - rev: v3.3.7 + rev: v3.3.8 hooks: - id: pylint args: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/pyproject.toml new/ansible-lint-25.8.1/pyproject.toml --- old/ansible-lint-25.7.0/pyproject.toml 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/pyproject.toml 2025-08-14 02:42:08.000000000 +0200 @@ -104,6 +104,7 @@ ignore_errors = true ignore_missing_imports = true module = [ + "ansible.parsing.yaml.constructor", "ansiblelint._version", # generated "license_expression", "ruamel.yaml" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/app.py new/ansible-lint-25.8.1/src/ansiblelint/app.py --- old/ansible-lint-25.7.0/src/ansiblelint/app.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/app.py 2025-08-14 02:42:08.000000000 +0200 @@ -428,4 +428,7 @@ role_name_check=role_name_check, ) + # Enable plugin loader now that collections are installed + app.runtime.enable_plugin_loader() + return app diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/rules/jinja.py new/ansible-lint-25.8.1/src/ansiblelint/rules/jinja.py --- old/ansible-lint-25.7.0/src/ansiblelint/rules/jinja.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/rules/jinja.py 2025-08-14 02:42:08.000000000 +0200 @@ -149,7 +149,7 @@ # ValueError RepresenterError except (AnsibleError, ImportError) as exc: bypass = False - orig_exc = exc + orig_exc: BaseException = exc if ( isinstance(exc, AnsibleError) and hasattr(exc, "orig_exc") @@ -927,10 +927,10 @@ data = args[1] if data != "{{ 12 | random(seed=inventory_hostname) }}": - return do_template(*args, **kwargs) # type: ignore[no-untyped-call] + return do_template(*args, **kwargs) msg = "Unexpected templating type error occurred on (foo): bar" - raise AnsibleError(str(msg)) # type: ignore[no-untyped-call] + raise AnsibleError(str(msg)) do_template = Templar.do_template collection = RulesCollection() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/runner.py new/ansible-lint-25.8.1/src/ansiblelint/runner.py --- old/ansible-lint-25.7.0/src/ansiblelint/runner.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/runner.py 2025-08-14 02:42:08.000000000 +0200 @@ -40,7 +40,10 @@ from ansiblelint.logger import timed_info from ansiblelint.rules.syntax_check import OUTPUT_PATTERNS from ansiblelint.text import strip_ansi_escape -from ansiblelint.types import AnsibleJSON, AnsibleMapping +from ansiblelint.types import ( # pyright: ignore[reportAttributeAccessIssue] + AnsibleJSON, + AnsibleMapping, # pyright: ignore[reportAttributeAccessIssue] +) from ansiblelint.utils import ( PLAYBOOK_DIR, HandleChildren, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/schemas/__store__.json new/ansible-lint-25.8.1/src/ansiblelint/schemas/__store__.json --- old/ansible-lint-25.7.0/src/ansiblelint/schemas/__store__.json 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/schemas/__store__.json 2025-08-14 02:42:08.000000000 +0200 @@ -36,7 +36,7 @@ "url": "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/molecule.json" }, "pattern": { - "etag": "610494e0d08e20f6869475f3b479dcae3d90e92d632d825fa934e2beb5f931c0", + "etag": "9f427c883b1e069c1d9cb938f5c2d6d9d6412250ba781880cce3ae7b523bf035", "url": "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/pattern.json" }, "play-argspec": { @@ -56,7 +56,7 @@ "url": "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/role-arg-spec.json" }, "rulebook": { - "etag": "8113782a066a9a7aba1f3f42aeb7f8315fa49b5bf0b158a61e44a3eba22dd22f", + "etag": "97220101562e188be347041e762472ff339975c5d3336f6c210336bae5ed7128", "url": "https://raw.githubusercontent.com/ansible/ansible-rulebook/main/ansible_rulebook/schema/ruleset_schema.json" }, "tasks": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/schemas/galaxy.json new/ansible-lint-25.8.1/src/ansiblelint/schemas/galaxy.json --- old/ansible-lint-25.7.0/src/ansiblelint/schemas/galaxy.json 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/schemas/galaxy.json 2025-08-14 02:42:08.000000000 +0200 @@ -58,6 +58,8 @@ "Artistic-1.0-Perl", "Artistic-1.0-cl8", "Artistic-2.0", + "Artistic-dist", + "Aspell-RU", "Asterisk-exception", "Asterisk-linking-protocols-exception", "Autoconf-exception-2.0", @@ -71,6 +73,7 @@ "BSD-2-Clause-Patent", "BSD-2-Clause-Views", "BSD-2-Clause-first-lines", + "BSD-2-Clause-pkgconf-disclaimer", "BSD-3-Clause", "BSD-3-Clause-Attribution", "BSD-3-Clause-Clear", @@ -217,6 +220,7 @@ "Cornell-Lossless-JPEG", "Cronyx", "Crossword", + "CryptoSwift", "CrystalStacker", "Cube", "D-FSL-1.0", @@ -228,6 +232,8 @@ "DRL-1.1", "DSDP", "DigiRule-FOSS-exception", + "Digia-Qt-LGPL-exception-1.1", + "DocBook-DTD", "DocBook-Schema", "DocBook-Stylesheet", "DocBook-XML", @@ -254,7 +260,10 @@ "FSFAP-no-warranty-disclaimer", "FSFUL", "FSFULLR", + "FSFULLRSD", "FSFULLRWD", + "FSL-1.1-ALv2", + "FSL-1.1-MIT", "FTL", "Fair", "Fawkes-Runtime-exception", @@ -305,12 +314,14 @@ "GPL-CC-1.0", "GStreamer-exception-2005", "GStreamer-exception-2008", + "Game-Programming-Gems", "Giftware", "Glide", "Glulxe", "Gmsh-exception", "Graphics-Gems", "Gutmann", + "HDF5", "HIDAPI", "HP-1986", "HP-1989", @@ -464,6 +475,7 @@ "NPL-1.1", "NPOSL-3.0", "NRL", + "NTIA-PD", "NTP", "NTP-0", "Naumen", @@ -579,11 +591,13 @@ "SMLNJ", "SMPPL", "SNIA", + "SOFA", "SPL-1.0", "SSH-OpenSSH", "SSH-short", "SSLeay-standalone", "SSPL-1.0", + "SUL-1.0", "SWI-exception", "SWL", "Saxpath", @@ -634,6 +648,8 @@ "Universal-FOSS-exception-1.0", "UnixCrypt", "Unlicense", + "Unlicense-libtelnet", + "Unlicense-libwhirlpool", "VOSTROM", "VSL-1.0", "Vim", @@ -696,6 +712,8 @@ "hdparm", "i2p-gpl-java-exception", "iMatix", + "jove", + "libpng-1.6.35", "libpng-2.0", "libpri-OpenH323-exception", "libselinux-1.0", @@ -704,15 +722,18 @@ "lsof", "magaz", "mailprio", + "man2html", "metamail", "mif-exception", "mpi-permissive", "mpich2", "mplus", "mxml-exception", + "ngrep", "openvpn-openssl-exception", "pkgconf", "pnmstitch", + "polyparse-exception", "psfrag", "psutils", "python-ldap", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/schemas/rulebook.json new/ansible-lint-25.8.1/src/ansiblelint/schemas/rulebook.json --- old/ansible-lint-25.7.0/src/ansiblelint/schemas/rulebook.json 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/schemas/rulebook.json 2025-08-14 02:42:08.000000000 +0200 @@ -101,6 +101,13 @@ "once_after", "group_by_attributes" ] + }, + { + "required": [ + "accumulate_within", + "threshold", + "group_by_attributes" + ] } ], "properties": { @@ -112,6 +119,14 @@ "type": "string", "pattern": "^\\d+\\s(milliseconds?|seconds?|minutes?|hours?|days?)$" }, + "accumulate_within": { + "type": "string", + "pattern": "^\\d+\\s(milliseconds?|seconds?|minutes?|hours?|days?)$" + }, + "threshold": { + "type": "integer", + "minimum": 1 + }, "group_by_attributes": { "type": "array", "items": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/skip_utils.py new/ansible-lint-25.8.1/src/ansiblelint/skip_utils.py --- old/ansible-lint-25.7.0/src/ansiblelint/skip_utils.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/skip_utils.py 2025-08-14 02:42:08.000000000 +0200 @@ -50,7 +50,9 @@ from collections.abc import Generator from ansiblelint.file_utils import Lintable - from ansiblelint.types import AnsibleBaseYAMLObject + from ansiblelint.types import ( + AnsibleBaseYAMLObject, # pyright: ignore[reportAttributeAccessIssue] + ) _logger = logging.getLogger(__name__) @@ -95,7 +97,7 @@ return result -def append_skipped_rules( +def append_skipped_rules( # type: ignore[no-any-unimported] pyyaml_data: AnsibleBaseYAMLObject, lintable: Lintable, ) -> AnsibleBaseYAMLObject: @@ -143,7 +145,7 @@ return yaml.load_all(file_text) -def _append_skipped_rules( +def _append_skipped_rules( # type: ignore[no-any-unimported] pyyaml_data: AnsibleBaseYAMLObject, lintable: Lintable, ) -> AnsibleBaseYAMLObject | None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/types.py new/ansible-lint-25.8.1/src/ansiblelint/types.py --- old/ansible-lint-25.7.0/src/ansiblelint/types.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/types.py 2025-08-14 02:42:08.000000000 +0200 @@ -5,7 +5,7 @@ from collections.abc import Mapping, Sequence from typing import TypeAlias -from ansible.parsing.yaml.objects import ( # pyright: ignore[reportMissingImports] +from ansible.parsing.yaml.objects import ( # pyright: ignore[reportMissingImports] #pylint: disable=no-name-in-module AnsibleMapping, AnsibleSequence, AnsibleUnicode, @@ -13,7 +13,7 @@ ) try: - from ansible.parsing.yaml.constructor import ( # pyright: ignore[reportMissingImports] + from ansible.parsing.yaml.constructor import ( # pyright: ignore[reportMissingImports] # type: ignore[import-not-found] AnsibleConstructor, ) from ansible.parsing.yaml.objects import ( # pyright: ignore[reportMissingImports] @@ -29,14 +29,14 @@ # core 2.19 + data tagging: except ImportError: # pragma: no cover # cspell: ignore datatag - from ansible._internal._datatag._tags import ( # type: ignore[import-not-found,no-redef] + from ansible._internal._datatag._tags import ( # type: ignore[assignment] TrustedAsTemplate, ) - from ansible._internal._yaml._constructor import ( # type: ignore[import-not-found,no-redef] # pyright: ignore[reportMissingImports] # pylint: disable=import-error,no-name-in-module + from ansible._internal._yaml._constructor import ( # pyright: ignore[reportMissingImports] # pylint: disable=import-error,no-name-in-module AnsibleConstructor, ) - from ansible.errors import ( # type: ignore[no-redef,attr-defined,unused-ignore] - AnsibleTemplateSyntaxError, # pyright: ignore[reportAttributeAccessIssue] + from ansible.errors import ( # type: ignore[assignment,no-redef,attr-defined,unused-ignore] + AnsibleTemplateSyntaxError, # pyright: ignore[reportAttributeAccessIssue,reportAssignmentType] ) AnsibleBaseYAMLObject: TypeAlias = ( # type: ignore[no-redef] # pyright: ignore[reportRedeclaration] @@ -46,7 +46,7 @@ # temporary ignoring the type parameters for Sequence and Mapping because once # add them we can no longer use isinstance() to check for them and we will # need to implement a more complex runtime type checking. -AnsibleJSON: TypeAlias = Sequence | Mapping | AnsibleUnicode | str | None # type: ignore[type-arg] +AnsibleJSON: TypeAlias = Sequence | Mapping | AnsibleUnicode | str | None # type: ignore[no-any-unimported,type-arg] __all__ = [ "AnsibleBaseYAMLObject", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/utils.py new/ansible-lint-25.8.1/src/ansiblelint/utils.py --- old/ansible-lint-25.7.0/src/ansiblelint/utils.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/utils.py 2025-08-14 02:42:08.000000000 +0200 @@ -89,11 +89,11 @@ from ansiblelint.skip_utils import is_nested_task from ansiblelint.text import has_jinja, is_fqcn, removeprefix from ansiblelint.types import ( - AnsibleBaseYAMLObject, + AnsibleBaseYAMLObject, # pyright: ignore[reportAttributeAccessIssue] AnsibleConstructor, # pyright: ignore[reportAttributeAccessIssue] AnsibleJSON, - AnsibleMapping, - AnsibleSequence, + AnsibleMapping, # pyright: ignore[reportAttributeAccessIssue] + AnsibleSequence, # pyright: ignore[reportAttributeAccessIssue] TrustedAsTemplate, ) @@ -149,7 +149,7 @@ dataloader = DataLoader() # type: ignore[no-untyped-call] dataloader.set_basedir(str(basedir)) - templar = Templar(dataloader, variables=templatevars) # type: ignore[no-untyped-call] + templar = Templar(dataloader, variables=templatevars) return templar @@ -239,7 +239,7 @@ try: if TrustedAsTemplate and not isinstance(varname, TrustedAsTemplate): varname = TrustedAsTemplate().tag(varname) - templated = templar.template(varname, **kwargs) # type: ignore[no-untyped-call] + templated = templar.template(varname, **kwargs) except AnsibleError as exc: if lookup_error in exc.message: return varname @@ -264,7 +264,7 @@ v = templar.environment.filters if not hasattr(v, "_delegatee"): # pragma: no cover raise - v._delegatee[missing_filter] = mock_filter # fmt: skip # noqa: SLF001 + v._delegatee[missing_filter] = mock_filter # fmt: skip # noqa: SLF001 # pyright: ignore[reportAttributeAccessIssue] # Record the mocked filter so we can warn the user if missing_filter not in options.mock_filters: _logger.debug("Mocking missing filter %s", missing_filter) @@ -329,7 +329,7 @@ # produce weird errors if we use a relative one. # https://github.com/psf/black/issues/4519 # fmt: off - AnsibleCollectionConfig.playbook_paths = ( # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + AnsibleCollectionConfig.playbook_paths = ( # pyright: ignore[reportAttributeAccessIssue] str(basedir.resolve())) # fmt: on @@ -833,7 +833,7 @@ # pylint: disable=too-many-nested-blocks -def extract_from_list( +def extract_from_list( # type: ignore[no-any-unimported] blocks: AnsibleBaseYAMLObject, candidates: list[str], *, @@ -1061,7 +1061,7 @@ return line -def task_in_list( +def task_in_list( # type: ignore[no-any-unimported] data: AnsibleBaseYAMLObject, file: Lintable, kind: str, @@ -1069,7 +1069,7 @@ ) -> Iterator[Task]: """Get action tasks from block structures.""" - def each_entry( + def each_entry( # type: ignore[no-any-unimported] data: Sequence[Any] | AnsibleMapping, file: Lintable, kind: str, position: str ) -> Iterator[Task]: if not data or not isinstance(data, Iterable): @@ -1118,7 +1118,7 @@ yield from each_entry(data, file=file, position=position, kind=kind) -def add_action_type( +def add_action_type( # type: ignore[no-any-unimported] actions: AnsibleBaseYAMLObject, action_type: str ) -> AnsibleSequence: """Add action markers to task objects.""" @@ -1136,14 +1136,14 @@ @cache -def parse_yaml_linenumbers( +def parse_yaml_linenumbers( # type: ignore[no-any-unimported] lintable: Lintable, ) -> AnsibleBaseYAMLObject | None: """Parse yaml as ansible.utils.parse_yaml but with linenumbers. The line numbers are stored in each node's LINE_NUMBER_KEY key. """ - loader: AnsibleLoader + loader: AnsibleLoader # type: ignore[valid-type] result = AnsibleSequence() # signature of Composer.compose_node @@ -1154,19 +1154,19 @@ msg = "Unexpected yaml data." raise TypeError(msg) if hasattr(loader, "line"): # pragma: no cover - line = loader.line + line = loader.line # type: ignore[attr-defined] node.__line__ = line + 1 # type: ignore[attr-defined] return node # signature of AnsibleConstructor.construct_mapping - def construct_mapping( + def construct_mapping( # type: ignore[no-any-unimported] node: yaml.MappingNode, deep: bool = False, # noqa: FBT002 ) -> AnsibleMapping: # pyright: ignore[reportArgumentType] - mapping: AnsibleMapping = AnsibleConstructor.construct_mapping( + mapping: AnsibleMapping = AnsibleConstructor.construct_mapping( # type: ignore[no-any-unimported] loader, node, deep=deep - ) # type: ignore[no-untyped-call] + ) if hasattr(node, LINE_NUMBER_KEY): mapping[LINE_NUMBER_KEY] = getattr(node, LINE_NUMBER_KEY) else: @@ -1181,16 +1181,16 @@ kwargs["vault_password"] = DEFAULT_VAULT_PASSWORD # WARNING: 'unused-ignore' is needed below in order to allow mypy to # be passing with both pre-2.19 and post-2.19 versions of Ansible core. - loader = AnsibleLoader(lintable.content, **kwargs) # type: ignore[no-untyped-call] + loader = AnsibleLoader(lintable.content, **kwargs) # redefine Composer.compose_node loader.compose_node = compose_node # type: ignore[attr-defined,unused-ignore] # redefine AnsibleConstructor.construct_mapping - loader.construct_mapping = construct_mapping # type: ignore[method-assign] + loader.construct_mapping = construct_mapping # type: ignore[attr-defined] # while Ansible only accepts single documents, we also need to load # multi-documents, as we attempt to load any YAML file, not only # Ansible managed ones. while True: - data = loader.get_data() # type: ignore[no-untyped-call] + data = loader.get_data() # type: ignore[attr-defined] if data is None: break result.append(data) @@ -1344,7 +1344,7 @@ offset = child.lineno - 1 break - docs = read_docstring(str(lintable.path)) # type: ignore[no-untyped-call] + docs = read_docstring(str(lintable.path.resolve(strict=False))) # type: ignore[no-untyped-call] examples = docs["plainexamples"] # Ignore the leading newline and lack of document start @@ -1355,13 +1355,13 @@ @lru_cache def load_plugin(name: str) -> PluginLoadContext: """Return loaded ansible plugin/module.""" - loaded_module = action_loader.find_plugin_with_context( # type: ignore[no-untyped-call] + loaded_module = action_loader.find_plugin_with_context( name, ignore_deprecated=True, check_aliases=True, ) if not loaded_module.resolved: - loaded_module = module_loader.find_plugin_with_context( # type: ignore[no-untyped-call] + loaded_module = module_loader.find_plugin_with_context( name, ignore_deprecated=True, check_aliases=True, @@ -1370,7 +1370,7 @@ "ansible.builtin." ): # pragma: no cover # fallback to core behavior of using legacy - loaded_module = module_loader.find_plugin_with_context( # type: ignore[no-untyped-call] + loaded_module = module_loader.find_plugin_with_context( name.replace("ansible.builtin.", "ansible.legacy."), ignore_deprecated=True, check_aliases=True, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/src/ansiblelint/yaml_utils.py new/ansible-lint-25.8.1/src/ansiblelint/yaml_utils.py --- old/ansible-lint-25.7.0/src/ansiblelint/yaml_utils.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/src/ansiblelint/yaml_utils.py 2025-08-14 02:42:08.000000000 +0200 @@ -38,11 +38,11 @@ try: # ansible 2.19 + data tagging # cspell: ignore datatag - from ansible._internal._datatag._tags import ( # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] + from ansible._internal._datatag._tags import ( # pyright: ignore[reportMissingImports] Origin, ) except ImportError: # pragma: no cover - Origin = None + Origin = None # type: ignore[misc,assignment] if TYPE_CHECKING: # noinspection PyProtectedMember @@ -1306,10 +1306,10 @@ line = int(data[LINE_NUMBER_KEY]) if not line: # ansible 2.19+ - if Origin: # pragma: no cover + if Origin: # type: ignore[truthy-function] # pragma: no cover tag = Origin.get_tag(data) - line = tag.line_num - column = tag.col_num + line = tag.line_num # type: ignore[union-attr,assignment] + column = tag.col_num # type: ignore[union-attr] else: # pre-ansible 2.19 if hasattr(data, "ansible_pos"): # AnsibleUnicode object _, line, column = data.ansible_pos # pyright: ignore[reportAttributeAccessIssue] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/test/schemas/negative_test/changelogs/invalid-date/changelogs/changelog.yaml.md new/ansible-lint-25.8.1/test/schemas/negative_test/changelogs/invalid-date/changelogs/changelog.yaml.md --- old/ansible-lint-25.7.0/test/schemas/negative_test/changelogs/invalid-date/changelogs/changelog.yaml.md 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/test/schemas/negative_test/changelogs/invalid-date/changelogs/changelog.yaml.md 2025-08-14 02:42:08.000000000 +0200 @@ -25,13 +25,13 @@ "errors": [ { "filename": "negative_test/changelogs/invalid-date/changelogs/changelog.yaml", - "path": "$.releases.1.0.0.release_date", + "path": "$.releases['1.0.0'].release_date", "message": "'01-01-2020' is not a 'date'", "has_sub_errors": false }, { "filename": "negative_test/changelogs/invalid-date/changelogs/changelog.yaml", - "path": "$.releases.1.0.0.release_date", + "path": "$.releases['1.0.0'].release_date", "message": "'01-01-2020' does not match '\\\\d\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d'", "has_sub_errors": false } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/test/schemas/negative_test/changelogs/invalid-plugin-namespace/changelogs/changelog.yaml.md new/ansible-lint-25.8.1/test/schemas/negative_test/changelogs/invalid-plugin-namespace/changelogs/changelog.yaml.md --- old/ansible-lint-25.7.0/test/schemas/negative_test/changelogs/invalid-plugin-namespace/changelogs/changelog.yaml.md 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/test/schemas/negative_test/changelogs/invalid-plugin-namespace/changelogs/changelog.yaml.md 2025-08-14 02:42:08.000000000 +0200 @@ -25,7 +25,7 @@ "errors": [ { "filename": "negative_test/changelogs/invalid-plugin-namespace/changelogs/changelog.yaml", - "path": "$.releases.1.0.0.plugins.lookup[0].namespace", + "path": "$.releases['1.0.0'].plugins.lookup[0].namespace", "message": "'foo' is not of type 'null'", "has_sub_errors": false } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/test/schemas/negative_test/playbooks/import_playbook.yml.md new/ansible-lint-25.8.1/test/schemas/negative_test/playbooks/import_playbook.yml.md --- old/ansible-lint-25.7.0/test/schemas/negative_test/playbooks/import_playbook.yml.md 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/test/schemas/negative_test/playbooks/import_playbook.yml.md 2025-08-14 02:42:08.000000000 +0200 @@ -67,13 +67,13 @@ "message": "{'ansible.builtin.import_playbook': {}} should not be valid under {'required': ['ansible.builtin.import_playbook']}" }, "best_deep_match": { - "path": "$[0].ansible.builtin.import_playbook", + "path": "$[0]['ansible.builtin.import_playbook']", "message": "{} is not of type 'string'" }, "num_sub_errors": 3, "sub_errors": [ { - "path": "$[0].ansible.builtin.import_playbook", + "path": "$[0]['ansible.builtin.import_playbook']", "message": "{} is not of type 'string'" }, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/test/schemas/package-lock.json new/ansible-lint-25.8.1/test/schemas/package-lock.json --- old/ansible-lint-25.7.0/test/schemas/package-lock.json 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/test/schemas/package-lock.json 2025-08-14 02:42:08.000000000 +0200 @@ -9,18 +9,18 @@ "js-yaml": "^4.1.0", "safe-stable-stringify": "^2.5.0", "ts-node": "^10.9.2", - "vscode-json-languageservice": "^5.5.0" + "vscode-json-languageservice": "^5.6.1" }, "devDependencies": { "@types/chai": "^5.2.2", "@types/js-yaml": "^4.0.9", - "@types/minimatch": "^5.1.2", + "@types/minimatch": "^6.0.0", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.25", - "chai": "^5.2.0", - "minimatch": "^10.0.1", - "mocha": "^11.5.0", - "typescript": "^5.8.3" + "@types/node": "^24.2.1", + "chai": "^5.2.1", + "minimatch": "^10.0.3", + "mocha": "^11.7.1", + "typescript": "^5.9.2" } }, "node_modules/@cspotcode/source-map-support": { @@ -34,6 +34,27 @@ "node": ">=12" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -214,10 +235,14 @@ "dev": true }, "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-6.0.0.tgz", + "integrity": "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==", + "deprecated": "This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "minimatch": "*" + } }, "node_modules/@types/mocha": { "version": "10.0.10", @@ -227,12 +252,11 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.25.tgz", - "integrity": "sha512-RJCAZ1E7JgMDJRnyVwIvlnKnNa0oHXrgSeq5aoXdhxCOSuwCe9sccKnngOJq8GuukzSf45u4VeD0JxUXfC3Dwg==", - "license": "MIT", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", + "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.10.0" } }, "node_modules/@vscode/l10n": { @@ -367,11 +391,10 @@ } }, "node_modules/chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.1.tgz", + "integrity": "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -380,7 +403,7 @@ "pathval": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/chalk": { @@ -823,12 +846,12 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" @@ -848,11 +871,10 @@ } }, "node_modules/mocha": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", - "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz", + "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==", "dev": true, - "license": "MIT", "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", @@ -870,7 +892,7 @@ "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", - "workerpool": "^6.5.1", + "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" @@ -1250,10 +1272,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "license": "Apache-2.0", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1263,10 +1284,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" }, "node_modules/uri-js": { "version": "4.4.1", @@ -1282,10 +1302,9 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "node_modules/vscode-json-languageservice": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.5.0.tgz", - "integrity": "sha512-JchBzp8ArzhCVpRS/LT4wzEEvwHXIUEdZD064cGTI4RVs34rNCZXPUguIYSfGBcHH1GV79ufPcfy3Pd8+ukbKw==", - "license": "MIT", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.6.1.tgz", + "integrity": "sha512-IQIURBF2VMKBdWcMunbHSI3G2WmJ9H7613E1hRxIXX7YsAPSdBxnEiIUrTnsSW/3fk+QW1kfsvSigqgAFYIYtg==", "dependencies": { "@vscode/l10n": "^0.0.18", "jsonc-parser": "^3.3.1", @@ -1328,9 +1347,9 @@ } }, "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.3.tgz", + "integrity": "sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==", "dev": true }, "node_modules/wrap-ansi": { @@ -1450,6 +1469,21 @@ "@jridgewell/trace-mapping": "0.3.9" } }, + "@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true + }, + "@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "requires": { + "@isaacs/balanced-match": "^4.0.1" + } + }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -1583,10 +1617,13 @@ "dev": true }, "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-6.0.0.tgz", + "integrity": "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==", + "dev": true, + "requires": { + "minimatch": "*" + } }, "@types/mocha": { "version": "10.0.10", @@ -1595,11 +1632,11 @@ "dev": true }, "@types/node": { - "version": "22.15.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.25.tgz", - "integrity": "sha512-RJCAZ1E7JgMDJRnyVwIvlnKnNa0oHXrgSeq5aoXdhxCOSuwCe9sccKnngOJq8GuukzSf45u4VeD0JxUXfC3Dwg==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", + "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", "requires": { - "undici-types": "~6.21.0" + "undici-types": "~7.10.0" } }, "@vscode/l10n": { @@ -1695,9 +1732,9 @@ "dev": true }, "chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.1.tgz", + "integrity": "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==", "dev": true, "requires": { "assertion-error": "^2.0.1", @@ -2016,12 +2053,12 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dev": true, "requires": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" } }, "minipass": { @@ -2031,9 +2068,9 @@ "dev": true }, "mocha": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", - "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz", + "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==", "dev": true, "requires": { "browser-stdout": "^1.3.1", @@ -2052,7 +2089,7 @@ "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", - "workerpool": "^6.5.1", + "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" @@ -2288,14 +2325,14 @@ } }, "typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==" }, "undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" }, "uri-js": { "version": "4.4.1", @@ -2311,9 +2348,9 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "vscode-json-languageservice": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.5.0.tgz", - "integrity": "sha512-JchBzp8ArzhCVpRS/LT4wzEEvwHXIUEdZD064cGTI4RVs34rNCZXPUguIYSfGBcHH1GV79ufPcfy3Pd8+ukbKw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.6.1.tgz", + "integrity": "sha512-IQIURBF2VMKBdWcMunbHSI3G2WmJ9H7613E1hRxIXX7YsAPSdBxnEiIUrTnsSW/3fk+QW1kfsvSigqgAFYIYtg==", "requires": { "@vscode/l10n": "^0.0.18", "jsonc-parser": "^3.3.1", @@ -2347,9 +2384,9 @@ } }, "workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.3.tgz", + "integrity": "sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==", "dev": true }, "wrap-ansi": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/test/schemas/package.json new/ansible-lint-25.8.1/test/schemas/package.json --- old/ansible-lint-25.7.0/test/schemas/package.json 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/test/schemas/package.json 2025-08-14 02:42:08.000000000 +0200 @@ -4,7 +4,7 @@ "js-yaml": "^4.1.0", "safe-stable-stringify": "^2.5.0", "ts-node": "^10.9.2", - "vscode-json-languageservice": "^5.5.0" + "vscode-json-languageservice": "^5.6.1" }, "scripts": { "compile": "tsc", @@ -14,13 +14,13 @@ "devDependencies": { "@types/chai": "^5.2.2", "@types/js-yaml": "^4.0.9", - "@types/minimatch": "^5.1.2", + "@types/minimatch": "^6.0.0", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.25", - "chai": "^5.2.0", - "minimatch": "^10.0.1", - "mocha": "^11.5.0", - "typescript": "^5.8.3" + "@types/node": "^24.2.1", + "chai": "^5.2.1", + "minimatch": "^10.0.3", + "mocha": "^11.7.1", + "typescript": "^5.9.2" }, "directories": { "test": "./src" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/test/test_skiputils.py new/ansible-lint-25.8.1/test/test_skiputils.py --- old/ansible-lint-25.7.0/test/test_skiputils.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/test/test_skiputils.py 2025-08-14 02:42:08.000000000 +0200 @@ -20,7 +20,9 @@ if TYPE_CHECKING: from ansiblelint.rules import RulesCollection from ansiblelint.testing import RunFromText - from ansiblelint.types import AnsibleBaseYAMLObject + from ansiblelint.types import ( + AnsibleBaseYAMLObject, # pyright: ignore[reportAttributeAccessIssue] + ) PLAYBOOK_WITH_NOQA = """\ --- @@ -196,7 +198,7 @@ ), ), ) -def test_append_skipped_rules( +def test_append_skipped_rules( # type: ignore[no-any-unimported] lintable: Lintable, yaml: AnsibleBaseYAMLObject, expected_form: AnsibleBaseYAMLObject, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-lint-25.7.0/test/test_utils.py new/ansible-lint-25.8.1/test/test_utils.py --- old/ansible-lint-25.7.0/test/test_utils.py 2025-07-29 21:54:51.000000000 +0200 +++ new/ansible-lint-25.8.1/test/test_utils.py 2025-08-14 02:42:08.000000000 +0200 @@ -40,7 +40,10 @@ from ansiblelint.file_utils import Lintable, cwd from ansiblelint.runner import Runner from ansiblelint.testing import run_ansible_lint -from ansiblelint.types import AnsibleMapping, AnsibleSequence +from ansiblelint.types import ( # pyright: ignore[reportAttributeAccessIssue] + AnsibleMapping, # pyright: ignore[reportAttributeAccessIssue] + AnsibleSequence, # pyright: ignore[reportAttributeAccessIssue] +) if TYPE_CHECKING: from collections.abc import Sequence