Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-ansible-compat for openSUSE:Factory checked in at 2024-01-14 19:02:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ansible-compat (Old) and /work/SRC/openSUSE:Factory/.python-ansible-compat.new.21961 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ansible-compat" Sun Jan 14 19:02:54 2024 rev:21 rq:1138453 version:4.1.11 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ansible-compat/python-ansible-compat.changes 2023-11-24 23:35:48.537685593 +0100 +++ /work/SRC/openSUSE:Factory/.python-ansible-compat.new.21961/python-ansible-compat.changes 2024-01-14 19:03:27.099326317 +0100 @@ -1,0 +2,11 @@ +Wed Jan 10 19:27:59 UTC 2024 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- update to 4.1.11: + * Bugfixes + - Allow more control over verbosity when calling ansible-galaxy (#278) @ziegenberg + - Fix collection installation with custom project_dir (#343) @ssbarnea + - Fix collection installation bug when having custom config (#344) @ssbarnea + - Add support for python 3.12 (#336) @ssbarnea + - Remove isolated option while adding sys.path (#335) @shatakshiiii + +------------------------------------------------------------------- Old: ---- ansible-compat-4.1.10.tar.gz New: ---- ansible-compat-4.1.11.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ansible-compat.spec ++++++ --- /var/tmp/diff_new_pack.Zc1WqX/_old 2024-01-14 19:03:27.719348904 +0100 +++ /var/tmp/diff_new_pack.Zc1WqX/_new 2024-01-14 19:03:27.719348904 +0100 @@ -24,7 +24,7 @@ %endif Name: python-ansible-compat -Version: 4.1.10 +Version: 4.1.11 Release: 0 Summary: Compatibility shim for Ansible 2.9 and newer License: MIT @@ -86,6 +86,8 @@ IGNORED_CHECKS="${IGNORED_CHECKS} or test_scan_sys_path[isolatedF-scanT-raises_not_foundF]" IGNORED_CHECKS="${IGNORED_CHECKS} or test_scan_sys_path[isolatedT-scanF-raises_not_foundT]" IGNORED_CHECKS="${IGNORED_CHECKS} or test_scan_sys_path[isolatedT-scanT-raises_not_foundT]" +IGNORED_CHECKS="${IGNORED_CHECKS} or test_scan_sys_path[scanF-raises_not_foundT]" +IGNORED_CHECKS="${IGNORED_CHECKS} or test_scan_sys_path[scanT-raises_not_foundF]" IGNORED_CHECKS="${IGNORED_CHECKS} or test_upgrade_collection" # Disable checks on test names: https://github.com/pytest-dev/pytest-plus#user-content-avoiding-problematic-test-identifiers https://github.com/ansible/ansible-compat/issues/340 export PYTEST_CHECK_TEST_ID_REGEX=0 ++++++ ansible-compat-4.1.10.tar.gz -> ansible-compat-4.1.11.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/.github/release-drafter.yml new/ansible-compat-4.1.11/.github/release-drafter.yml --- old/ansible-compat-4.1.10/.github/release-drafter.yml 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/.github/release-drafter.yml 2024-01-10 13:52:49.000000000 +0100 @@ -1,2 +1,3 @@ -# see https://github.com/ansible/devtools -_extends: ansible/devtools +--- +# see https://github.com/ansible/team-devtools +_extends: ansible/team-devtools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/.github/workflows/release.yml new/ansible-compat-4.1.11/.github/workflows/release.yml --- old/ansible-compat-4.1.10/.github/workflows/release.yml 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/.github/workflows/release.yml 2024-01-10 13:52:49.000000000 +0100 @@ -23,10 +23,10 @@ TOX_PARALLEL_NO_SPINNER: 1 steps: - - name: Switch to using Python 3.9 by default - uses: actions/setup-python@v4 + - name: Switch to using Python 3.12 by default + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.12" - name: Install tox run: python3 -m pip install --user "tox>=4.0.0" - name: Check out src from Git diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/.github/workflows/tox.yml new/ansible-compat-4.1.11/.github/workflows/tox.yml --- old/ansible-compat-4.1.10/.github/workflows/tox.yml 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/.github/workflows/tox.yml 2024-01-10 13:52:49.000000000 +0100 @@ -23,7 +23,8 @@ uses: coactions/dynamic-matrix@v1 with: min_python: "3.9" - max_python: "3.11" + max_python: "3.12" + default_python: "3.10" other_names: | lint docs @@ -32,7 +33,10 @@ py39-ansible213 py39-ansible214 py39-ansible215 - py311-devel + py310-ansible215 + py311-ansible215 + py312-ansible216 + py312-devel smoke platforms: linux,macos macos: minmax @@ -53,7 +57,7 @@ fetch-depth: 0 # needed by setuptools-scm - name: Set up Python ${{ matrix.python_version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python_version }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/.pre-commit-config.yaml new/ansible-compat-4.1.11/.pre-commit-config.yaml --- old/ansible-compat-4.1.10/.pre-commit-config.yaml 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/.pre-commit-config.yaml 2024-01-10 13:52:49.000000000 +0100 @@ -9,22 +9,27 @@ for more information, see https://pre-commit.ci skip: # https://github.com/pre-commit-ci/issues/issues/55 + - ccv - pip-compile # No docker on pre-commit.ci - validate-config-in-container default_language_version: # Needed in order to make pip-compile output predictable. - python: python3.9 + python: python3.10 exclude: | (?x)^( test/assets/.* )$ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.0.287" + rev: "v0.1.9" hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] + - repo: https://github.com/pappasam/toml-sort + rev: v0.23.1 + hooks: + - id: toml-sort-fix - repo: https://github.com/pre-commit/mirrors-prettier # keep it before yamllint rev: "v3.0.3" @@ -35,7 +40,7 @@ - prettier-plugin-toml - prettier-plugin-sort-json - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v4.4.0 + rev: v4.5.0 hooks: - id: end-of-file-fixer - id: trailing-whitespace @@ -51,23 +56,23 @@ - id: debug-statements language_version: python3 - repo: https://github.com/codespell-project/codespell - rev: v2.2.5 + rev: v2.2.6 hooks: - id: codespell - repo: https://github.com/adrienverge/yamllint.git - rev: v1.32.0 + rev: v1.33.0 hooks: - id: yamllint files: \.(yaml|yml)$ types: [file, yaml] entry: yamllint --strict - repo: https://github.com/psf/black - rev: 23.7.0 + rev: 23.12.1 hooks: - id: black language_version: python3 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.5.1 + rev: v1.8.0 hooks: - id: mypy # empty args needed in order to match mypy cli behavior @@ -84,7 +89,7 @@ - types-pkg_resources - types-jsonschema>=4.4.9 - repo: https://github.com/pycqa/pylint - rev: v3.0.0a7 + rev: v3.0.3 hooks: - id: pylint additional_dependencies: @@ -117,4 +122,10 @@ rev: v1.2.0 hooks: - id: validate-config-in-container + name: packit alias: packit + - repo: https://github.com/mashi/codecov-validator + rev: "1.0.1" + hooks: + - id: ccv + name: codecov diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/.vscode/settings.json new/ansible-compat-4.1.11/.vscode/settings.json --- old/ansible-compat-4.1.10/.vscode/settings.json 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/.vscode/settings.json 2024-01-10 13:52:49.000000000 +0100 @@ -4,9 +4,9 @@ }, "[python]": { "editor.codeActionsOnSave": { - "source.fixAll": true, - "source.fixAll.ruff": false, - "source.organizeImports": false + "source.fixAll": "explicit", + "source.fixAll.ruff": "never", + "source.organizeImports": "never" } }, "editor.formatOnSave": true, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/PKG-INFO new/ansible-compat-4.1.11/PKG-INFO --- old/ansible-compat-4.1.10/PKG-INFO 2023-09-06 14:56:06.785466000 +0200 +++ new/ansible-compat-4.1.11/PKG-INFO 2024-01-10 13:53:09.517272000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ansible-compat -Version: 4.1.10 +Version: 4.1.11 Summary: Ansible compatibility goodies Author-email: Sorin Sbarnea <ssbar...@redhat.com> Maintainer-email: Sorin Sbarnea <ssbar...@redhat.com> @@ -21,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python Classifier: Topic :: System :: Systems Administration Classifier: Topic :: Software Development :: Bug Tracking @@ -29,9 +30,23 @@ Classifier: Topic :: Utilities Requires-Python: >=3.9 Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: ansible-core>=2.12 +Requires-Dist: packaging +Requires-Dist: PyYAML +Requires-Dist: subprocess-tee>=0.4.1 +Requires-Dist: jsonschema>=4.6.0 +Requires-Dist: typing-extensions>=4.5.0; python_version < "3.10" Provides-Extra: docs +Requires-Dist: argparse-manpage; extra == "docs" +Requires-Dist: black; extra == "docs" +Requires-Dist: mkdocs-ansible[lock]>=0.1.2; extra == "docs" Provides-Extra: test -License-File: LICENSE +Requires-Dist: coverage; extra == "test" +Requires-Dist: pip-tools; extra == "test" +Requires-Dist: pytest>=7.2.0; extra == "test" +Requires-Dist: pytest-mock; extra == "test" +Requires-Dist: pytest-plus>=0.6.1; extra == "test" # ansible-compat diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/codecov.yml new/ansible-compat-4.1.11/codecov.yml --- old/ansible-compat-4.1.10/codecov.yml 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/codecov.yml 2024-01-10 13:52:49.000000000 +0100 @@ -3,6 +3,4 @@ comment: false coverage: status: - patch: false - project: - threshold: 0.5% + patch: true # we want github annotations diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/pyproject.toml new/ansible-compat-4.1.11/pyproject.toml --- old/ansible-compat-4.1.10/pyproject.toml 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/pyproject.toml 2024-01-10 13:52:49.000000000 +0100 @@ -1,7 +1,7 @@ [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 + "setuptools_scm[toml] >= 7.0.5" # required for "no-local-version" scheme ] build-backend = "setuptools.build_meta" @@ -12,9 +12,9 @@ name = "ansible-compat" description = "Ansible compatibility goodies" readme = "README.md" -authors = [{ "name" = "Sorin Sbarnea", "email" = "ssbar...@redhat.com" }] -maintainers = [{ "name" = "Sorin Sbarnea", "email" = "ssbar...@redhat.com" }] -license = { text = "MIT" } +authors = [{"name" = "Sorin Sbarnea", "email" = "ssbar...@redhat.com"}] +maintainers = [{"name" = "Sorin Sbarnea", "email" = "ssbar...@redhat.com"}] +license = {text = "MIT"} classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", @@ -27,12 +27,13 @@ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python", "Topic :: System :: Systems Administration", "Topic :: Software Development :: Bug Tracking", "Topic :: Software Development :: Quality Assurance", "Topic :: Software Development :: Testing", - "Topic :: Utilities", + "Topic :: Utilities" ] keywords = ["ansible"] dependencies = [ @@ -42,18 +43,24 @@ "PyYAML", "subprocess-tee>=0.4.1", "jsonschema>=4.6.0", - "typing-extensions>=4.5.0;python_version<'3.10'", + "typing-extensions>=4.5.0;python_version<'3.10'" ] +[project.optional-dependencies] +docs = ["argparse-manpage", "black", "mkdocs-ansible[lock]>=0.1.2"] +test = ["coverage", "pip-tools", "pytest>=7.2.0", "pytest-mock", "pytest-plus>=0.6.1"] + [project.urls] homepage = "https://github.com/ansible/ansible-compat" documentation = "https://ansible-compat.readthedocs.io/" repository = "https://github.com/ansible/ansible-compat" changelog = "https://github.com/ansible/ansible-compat/releases" -[project.optional-dependencies] -docs = ["argparse-manpage", "black", "mkdocs-ansible[lock]>=0.1.2"] -test = ["coverage", "pip-tools", "pytest>=7.2.0", "pytest-mock", "pytest-plus"] +[tool.coverage.report] +exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:"] +fail_under = 92 +skip_covered = true +show_missing = true [tool.coverage.run] source = ["src"] @@ -63,11 +70,8 @@ parallel = true concurrency = ["multiprocessing", "thread"] -[tool.coverage.report] -exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:"] -fail_under = 93 -skip_covered = true -show_missing = true +[tool.isort] +profile = "black" [tool.mypy] python_version = 3.9 @@ -77,7 +81,7 @@ disallow_untyped_defs = true disallow_any_generics = true # disallow_any_unimported = True -#; warn_redundant_casts = True +# ; warn_redundant_casts = True # warn_return_any = True # warn_unused_configs = True exclude = "test/local-content" @@ -86,9 +90,6 @@ module = "ansible.*" ignore_missing_imports = true -[tool.isort] -profile = "black" - [tool.pylint.BASIC] good-names = [ "f", # filename @@ -98,7 +99,7 @@ "ns", # namespace "ex", "Run", - "_", + "_" ] [tool.pylint.IMPORTS] @@ -114,12 +115,17 @@ "too-many-arguments", # PLR0913 "raise-missing-from", # Temporary disable duplicate detection we remove old code from prerun - "duplicate-code", + "duplicate-code" ] [tool.pytest.ini_options] # ensure we treat warnings as error -filterwarnings = ["error"] +filterwarnings = [ + "error", + # py312 ansible-core + # https://github.com/ansible/ansible/issues/81906 + "ignore:'importlib.abc.TraversableResources' is deprecated and slated for removal in Python 3.14:DeprecationWarning" +] testpaths = ["test"] [tool.ruff] @@ -137,13 +143,10 @@ "PLR0912", # Bug https://github.com/charliermarsh/ruff/issues/4244 "PLR0913", # Bug https://github.com/charliermarsh/ruff/issues/4244 "RUF012", - "PERF203", + "PERF203" ] target-version = "py39" -[tool.ruff.pydocstyle] -convention = "pep257" - [tool.ruff.flake8-pytest-style] parametrize-values-type = "tuple" @@ -154,6 +157,9 @@ [tool.ruff.per-file-ignores] "test/**/*.py" = ["SLF001", "S101", "FBT001"] +[tool.ruff.pydocstyle] +convention = "pep257" + [tool.setuptools_scm] local_scheme = "no-local-version" write_to = "src/ansible_compat/_version.py" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/requirements.txt new/ansible-compat-4.1.11/requirements.txt --- old/ansible-compat-4.1.10/requirements.txt 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/requirements.txt 2024-01-10 13:52:49.000000000 +0100 @@ -1,56 +1,62 @@ # -# This file is autogenerated by pip-compile with Python 3.9 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # pip-compile --extra=docs --extra=test --output-file=requirements.txt --strip-extras --unsafe-package=ansible-core --unsafe-package=resolvelib --unsafe-package=typing_extensions pyproject.toml # -argparse-manpage==4.3 +argparse-manpage==4.5 # via ansible-compat (pyproject.toml) -attrs==23.1.0 +attrs==23.2.0 # via # jsonschema # referencing +babel==2.13.1 + # via + # mkdocs-ansible + # mkdocs-material beautifulsoup4==4.12.2 # via + # linkchecker # mkdocs-ansible # mkdocs-htmlproofer-plugin -black==23.7.0 +black==23.12.1 # via ansible-compat (pyproject.toml) -build==0.10.0 +build==1.0.3 # via pip-tools -cairocffi==1.5.1 +cairocffi==1.6.1 # via # cairosvg # mkdocs-ansible -cairosvg==2.7.0 +cairosvg==2.7.1 # via mkdocs-ansible -certifi==2023.5.7 +certifi==2023.11.17 # via # mkdocs-ansible # requests -cffi==1.15.1 +cffi==1.16.0 # via # cairocffi # cryptography # mkdocs-ansible -charset-normalizer==3.1.0 +charset-normalizer==3.3.2 # via # mkdocs-ansible # requests -click==8.1.3 +click==8.1.7 # via # black # mkdocs # mkdocs-ansible + # mkdocstrings # pip-tools colorama==0.4.6 # via # griffe # mkdocs-ansible # mkdocs-material -coverage==7.3.0 +coverage==7.4.0 # via ansible-compat (pyproject.toml) -cryptography==41.0.3 +cryptography==41.0.7 # via ansible-core csscompressor==0.9.5 # via @@ -64,13 +70,17 @@ # via # cairosvg # mkdocs-ansible -exceptiongroup==1.1.3 +dnspython==2.4.2 + # via + # linkchecker + # mkdocs-ansible +exceptiongroup==1.2.0 # via pytest ghp-import==2.1.0 # via # mkdocs # mkdocs-ansible -griffe==0.29.0 +griffe==0.38.0 # via # mkdocs-ansible # mkdocstrings-python @@ -82,14 +92,8 @@ # via # mkdocs-ansible # requests -importlib-metadata==6.6.0 - # via - # markdown - # mkdocs - # mkdocs-ansible - # mkdocstrings -importlib-resources==5.0.7 - # via ansible-core +importlib-metadata==6.8.0 + # via mkdocs-ansible iniconfig==2.0.0 # via pytest jinja2==3.1.2 @@ -103,11 +107,13 @@ # via # mkdocs-ansible # mkdocs-minify-plugin -jsonschema==4.19.0 +jsonschema==4.20.0 # via ansible-compat (pyproject.toml) -jsonschema-specifications==2023.7.1 +jsonschema-specifications==2023.12.1 # via jsonschema -markdown==3.3.7 +linkchecker==10.3.0 + # via mkdocs-ansible +markdown==3.5.1 # via # markdown-include # mkdocs @@ -117,20 +123,21 @@ # mkdocs-material # mkdocstrings # pymdown-extensions -markdown-exec==1.6.0 +markdown-exec==1.8.0 # via mkdocs-ansible markdown-include==0.8.1 # via mkdocs-ansible -markupsafe==2.1.2 +markupsafe==2.1.3 # via # jinja2 + # mkdocs # mkdocs-ansible # mkdocstrings mergedeep==1.3.4 # via # mkdocs # mkdocs-ansible -mkdocs==1.4.3 +mkdocs==1.5.3 # via # mkdocs-ansible # mkdocs-autorefs @@ -140,35 +147,37 @@ # mkdocs-minify-plugin # mkdocs-monorepo-plugin # mkdocstrings -mkdocs-ansible==0.1.6 - # via ansible-compat (pyproject.toml) -mkdocs-autorefs==0.4.1 +mkdocs-ansible==0.2.1 + # via + # ansible-compat (pyproject.toml) + # mkdocs-ansible +mkdocs-autorefs==0.5.0 # via # mkdocs-ansible # mkdocstrings mkdocs-gen-files==0.5.0 # via mkdocs-ansible -mkdocs-htmlproofer-plugin==0.13.1 +mkdocs-htmlproofer-plugin==1.0.0 # via mkdocs-ansible -mkdocs-material==9.1.15 +mkdocs-material==9.5.3 # via mkdocs-ansible -mkdocs-material-extensions==1.1.1 +mkdocs-material-extensions==1.3.1 # via # mkdocs-ansible # mkdocs-material -mkdocs-minify-plugin==0.6.4 +mkdocs-minify-plugin==0.7.2 # via mkdocs-ansible -mkdocs-monorepo-plugin==1.0.5 +mkdocs-monorepo-plugin==1.1.0 # via mkdocs-ansible -mkdocstrings==0.22.0 +mkdocstrings==0.24.0 # via # mkdocs-ansible # mkdocstrings-python -mkdocstrings-python==1.1.0 +mkdocstrings-python==1.7.5 # via mkdocs-ansible mypy-extensions==1.0.0 # via black -packaging==23.1 +packaging==23.2 # via # ansible-compat (pyproject.toml) # ansible-core @@ -177,31 +186,42 @@ # mkdocs # mkdocs-ansible # pytest +paginate==0.5.6 + # via + # mkdocs-ansible + # mkdocs-material pathspec==0.11.2 - # via black -pillow==9.5.0 + # via + # black + # mkdocs + # mkdocs-ansible +pillow==10.2.0 # via # cairosvg # mkdocs-ansible -pip==23.2.1 +pip==23.3.2 # via pip-tools pip-tools==7.3.0 # via ansible-compat (pyproject.toml) -pipdeptree==2.7.1 +pipdeptree==2.13.1 # via mkdocs-ansible -platformdirs==3.10.0 - # via black -pluggy==1.2.0 +platformdirs==4.0.0 + # via + # black + # mkdocs + # mkdocs-ansible + # mkdocstrings +pluggy==1.3.0 # via pytest pycparser==2.21 # via # cffi # mkdocs-ansible -pygments==2.15.1 +pygments==2.17.1 # via # mkdocs-ansible # mkdocs-material -pymdown-extensions==10.0.1 +pymdown-extensions==10.7 # via # markdown-exec # mkdocs-ansible @@ -209,14 +229,14 @@ # mkdocstrings pyproject-hooks==1.0.0 # via build -pytest==7.4.0 +pytest==7.4.4 # via # ansible-compat (pyproject.toml) # pytest-mock # pytest-plus -pytest-mock==3.11.1 +pytest-mock==3.12.0 # via ansible-compat (pyproject.toml) -pytest-plus==0.4.0 +pytest-plus==0.6.1 # via ansible-compat (pyproject.toml) python-dateutil==2.8.2 # via @@ -226,7 +246,7 @@ # via # mkdocs-ansible # mkdocs-monorepo-plugin -pyyaml==6.0 +pyyaml==6.0.1 # via # ansible-compat (pyproject.toml) # ansible-core @@ -238,30 +258,31 @@ # via # mkdocs # mkdocs-ansible -referencing==0.30.2 +referencing==0.32.1 # via # jsonschema # jsonschema-specifications -regex==2023.5.5 +regex==2023.10.3 # via # mkdocs-ansible # mkdocs-material requests==2.31.0 # via + # linkchecker # mkdocs-ansible # mkdocs-htmlproofer-plugin # mkdocs-material -rpds-py==0.9.2 +rpds-py==0.16.2 # via # jsonschema # referencing -setuptools==68.1.2 +setuptools==69.0.3 # via pip-tools six==1.16.0 # via # mkdocs-ansible # python-dateutil -soupsieve==2.4.1 +soupsieve==2.5 # via # beautifulsoup4 # mkdocs-ansible @@ -284,13 +305,11 @@ # pip-tools # pyproject-hooks # pytest -typing-extensions==4.6.2 ; python_version < "3.10" +typing-extensions==4.8.0 # via - # ansible-compat (pyproject.toml) # black # mkdocs-ansible - # mkdocstrings -urllib3==2.0.2 +urllib3==2.1.0 # via # mkdocs-ansible # requests @@ -303,9 +322,9 @@ # cssselect2 # mkdocs-ansible # tinycss2 -wheel==0.41.1 +wheel==0.42.0 # via pip-tools -zipp==3.15.0 +zipp==3.17.0 # via # importlib-metadata # mkdocs-ansible diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/src/ansible_compat/_version.py new/ansible-compat-4.1.11/src/ansible_compat/_version.py --- old/ansible-compat-4.1.10/src/ansible_compat/_version.py 2023-09-06 14:56:06.000000000 +0200 +++ new/ansible-compat-4.1.11/src/ansible_compat/_version.py 2024-01-10 13:53:09.000000000 +0100 @@ -1,4 +1,16 @@ # file generated by setuptools_scm # don't change, don't track in version control -__version__ = version = '4.1.10' -__version_tuple__ = version_tuple = (4, 1, 10) +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import Tuple, Union + VERSION_TUPLE = Tuple[Union[int, str], ...] +else: + VERSION_TUPLE = object + +version: str +__version__: str +__version_tuple__: VERSION_TUPLE +version_tuple: VERSION_TUPLE + +__version__ = version = '4.1.11' +__version_tuple__ = version_tuple = (4, 1, 11) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/src/ansible_compat/config.py new/ansible-compat-4.1.11/src/ansible_compat/config.py --- old/ansible-compat-4.1.10/src/ansible_compat/config.py 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/src/ansible_compat/config.py 2024-01-10 13:52:49.000000000 +0100 @@ -216,6 +216,11 @@ default_private_role_vars: bool = False default_remote_port: str | None = None default_remote_user: str | None = None + # https://docs.ansible.com/ansible/latest/reference_appendices/config.html#collections-paths + default_collections_path: list[str] = [ + "~/.ansible/collections", + "/usr/share/ansible/collections", + ] default_roles_path: list[str] = [ "~/.ansible/roles", "/usr/share/ansible/roles", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/src/ansible_compat/runtime.py new/ansible-compat-4.1.11/src/ansible_compat/runtime.py --- old/ansible-compat-4.1.10/src/ansible_compat/runtime.py 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/src/ansible_compat/runtime.py 2024-01-10 13:52:49.000000000 +0100 @@ -10,7 +10,6 @@ import shutil import subprocess import sys -import tempfile import warnings from collections import OrderedDict from dataclasses import dataclass, field @@ -166,6 +165,7 @@ require_module: bool = False, max_retries: int = 0, environ: dict[str, str] | None = None, + verbosity: int = 0, ) -> None: """Initialize Ansible runtime environment. @@ -187,12 +187,17 @@ Default is 0, no retries. :param environ: Environment dictionary to use, if undefined ``os.environ`` will be copied and used. + :param verbosity: Verbosity level to use. """ self.project_dir = project_dir or Path.cwd() self.isolated = isolated self.max_retries = max_retries self.environ = environ or os.environ.copy() self.plugins = Plugins(runtime=self) + self.verbosity = verbosity + + self.initialize_logger(level=self.verbosity) + # Reduce noise from paramiko, unless user already defined PYTHONWARNINGS # paramiko/transport.py:236: CryptographyDeprecationWarning: Blowfish has been deprecated # https://github.com/paramiko/paramiko/issues/2038 @@ -236,9 +241,24 @@ # Monkey patch ansible warning in order to use warnings module. Display.warning = warning + def initialize_logger(self, level: int = 0) -> None: + """Set up the global logging level based on the verbosity number.""" + verbosity_map = { + -2: logging.CRITICAL, + -1: logging.ERROR, + 0: logging.WARNING, + 1: logging.INFO, + 2: logging.DEBUG, + } + # Unknown logging level is treated as DEBUG + logging_level = verbosity_map.get(level, logging.DEBUG) + _logger.setLevel(logging_level) + # Use module-level _logger instance to validate it + _logger.debug("Logging initialized to level %s", logging_level) + def _add_sys_path_to_collection_paths(self) -> None: """Add the sys.path to the collection paths.""" - if not self.isolated and self.config.collections_scan_sys_path: + if self.config.collections_scan_sys_path: for path in sys.path: if ( path not in self.config.collections_paths @@ -436,7 +456,7 @@ if isinstance(collection, Path): collection = str(collection) # As ansible-galaxy install is not able to automatically determine - # if the range requires a pre-release, we need to manuall add the --pre + # if the range requires a pre-release, we need to manually add the --pre # flag when needed. matches = version_re.search(collection) @@ -456,13 +476,13 @@ cmd.append(f"{collection}") _logger.info("Running from %s : %s", Path.cwd(), " ".join(cmd)) - run = self.run( + process = self.run( cmd, retry=True, env={**self.environ, ansible_collections_path(): ":".join(cpaths)}, ) - if run.returncode != 0: - msg = f"Command returned {run.returncode} code:\n{run.stdout}\n{run.stderr}" + if process.returncode != 0: + msg = f"Command returned {process.returncode} code:\n{process.stdout}\n{process.stderr}" _logger.error(msg) raise InvalidPrerequisiteError(msg) @@ -472,30 +492,7 @@ destination: Path | None = None, ) -> None: """Build and install collection from a given disk path.""" - if not self.version_in_range(upper="2.11"): - self.install_collection(path, destination=destination, force=True) - return - # older versions of ansible able unable to install without building - with tempfile.TemporaryDirectory() as tmp_dir: - cmd = [ - "ansible-galaxy", - "collection", - "build", - "--output-path", - str(tmp_dir), - str(path), - ] - _logger.info("Running %s", " ".join(cmd)) - run = self.run(cmd, retry=False) - if run.returncode != 0: - _logger.error(run.stdout) - raise AnsibleCommandError(run) - for archive_file in os.listdir(tmp_dir): - self.install_collection( - str(Path(tmp_dir) / archive_file), - destination=destination, - force=True, - ) + self.install_collection(path, destination=destination, force=True) # pylint: disable=too-many-branches def install_requirements( # noqa: C901 @@ -529,9 +526,11 @@ "ansible-galaxy", "role", "install", - "-vr", + "-r", f"{requirement}", ] + if self.verbosity > 0: + cmd.extend(["-" + ("v" * self.verbosity)]) if self.cache_dir: cmd.extend(["--roles-path", f"{self.cache_dir}/roles"]) @@ -543,8 +542,9 @@ _logger.info("Running %s", " ".join(cmd)) result = self.run(cmd, retry=retry) + _logger.debug(result.stdout) if result.returncode != 0: - _logger.error(result.stdout) + _logger.error(result.stderr) raise AnsibleCommandError(result) # Run galaxy collection install works on v2 requirements.yml @@ -553,8 +553,10 @@ "ansible-galaxy", "collection", "install", - "-v", ] + if self.verbosity > 0: + cmd.extend(["-" + ("v" * self.verbosity)]) + for collection in reqs_yaml["collections"]: if isinstance(collection, dict) and collection.get("type", "") == "git": _logger.info( @@ -582,8 +584,8 @@ retry=retry, env={**os.environ, "ANSIBLE_COLLECTIONS_PATH": ":".join(cpaths)}, ) + _logger.debug(result.stdout) if result.returncode != 0: - _logger.error(result.stdout) _logger.error(result.stderr) raise AnsibleCommandError(result) @@ -638,14 +640,14 @@ destination=destination, ) - if Path("galaxy.yml").exists(): + if (self.project_dir / "galaxy.yml").exists(): if destination: # while function can return None, that would not break the logic colpath = Path( - f"{destination}/ansible_collections/{colpath_from_path(Path.cwd())}", + f"{destination}/ansible_collections/{colpath_from_path(self.project_dir)}", ) if colpath.is_symlink(): - if os.path.realpath(colpath) == Path.cwd(): + if os.path.realpath(colpath) == str(Path.cwd()): _logger.warning( "Found symlinked collection, skipping its installation.", ) @@ -765,7 +767,7 @@ msg = "Unexpected ansible configuration" raise RuntimeError(msg) from exc - alterations_list = [ + alterations_list: list[tuple[list[str], str, bool]] = [ (library_paths, "plugins/modules", True), (roles_path, "roles", True), ] @@ -786,12 +788,12 @@ if must_be_present: continue path.mkdir(parents=True, exist_ok=True) - if path not in path_list: + if str(path) not in path_list: path_list.insert(0, str(path)) if library_paths != self.config.DEFAULT_MODULE_PATH: self._update_env("ANSIBLE_LIBRARY", library_paths) - if collections_path != self.config.collections_paths: + if collections_path != self.config.default_collections_path: self._update_env(ansible_collections_path(), collections_path) if roles_path != self.config.default_roles_path: self._update_env("ANSIBLE_ROLES_PATH", roles_path) @@ -934,7 +936,10 @@ def _get_galaxy_role_name(galaxy_infos: dict[str, Any]) -> str: """Compute role name from meta/main.yml.""" - return galaxy_infos.get("role_name", "") + result = galaxy_infos.get("role_name", "") + if not isinstance(result, str): + return "" + return result def search_galaxy_paths(search_dir: Path) -> list[str]: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/src/ansible_compat.egg-info/PKG-INFO new/ansible-compat-4.1.11/src/ansible_compat.egg-info/PKG-INFO --- old/ansible-compat-4.1.10/src/ansible_compat.egg-info/PKG-INFO 2023-09-06 14:56:06.000000000 +0200 +++ new/ansible-compat-4.1.11/src/ansible_compat.egg-info/PKG-INFO 2024-01-10 13:53:09.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ansible-compat -Version: 4.1.10 +Version: 4.1.11 Summary: Ansible compatibility goodies Author-email: Sorin Sbarnea <ssbar...@redhat.com> Maintainer-email: Sorin Sbarnea <ssbar...@redhat.com> @@ -21,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python Classifier: Topic :: System :: Systems Administration Classifier: Topic :: Software Development :: Bug Tracking @@ -29,9 +30,23 @@ Classifier: Topic :: Utilities Requires-Python: >=3.9 Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: ansible-core>=2.12 +Requires-Dist: packaging +Requires-Dist: PyYAML +Requires-Dist: subprocess-tee>=0.4.1 +Requires-Dist: jsonschema>=4.6.0 +Requires-Dist: typing-extensions>=4.5.0; python_version < "3.10" Provides-Extra: docs +Requires-Dist: argparse-manpage; extra == "docs" +Requires-Dist: black; extra == "docs" +Requires-Dist: mkdocs-ansible[lock]>=0.1.2; extra == "docs" Provides-Extra: test -License-File: LICENSE +Requires-Dist: coverage; extra == "test" +Requires-Dist: pip-tools; extra == "test" +Requires-Dist: pytest>=7.2.0; extra == "test" +Requires-Dist: pytest-mock; extra == "test" +Requires-Dist: pytest-plus>=0.6.1; extra == "test" # ansible-compat diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/src/ansible_compat.egg-info/SOURCES.txt new/ansible-compat-4.1.11/src/ansible_compat.egg-info/SOURCES.txt --- old/ansible-compat-4.1.10/src/ansible_compat.egg-info/SOURCES.txt 2023-09-06 14:56:06.000000000 +0200 +++ new/ansible-compat-4.1.11/src/ansible_compat.egg-info/SOURCES.txt 2024-01-10 13:53:09.000000000 +0100 @@ -78,6 +78,7 @@ test/collections/acme.goodies/roles/baz/molecule/deep_scenario/molecule.yml test/collections/acme.goodies/roles/baz/tasks/main.yml test/collections/acme.goodies/tests/requirements.yml +test/collections/acme.minimal/galaxy.yml test/roles/acme.missing_deps/requirements.yml test/roles/acme.missing_deps/meta/main.yml test/roles/acme.sample2/meta/main.yml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/src/ansible_compat.egg-info/requires.txt new/ansible-compat-4.1.11/src/ansible_compat.egg-info/requires.txt --- old/ansible-compat-4.1.10/src/ansible_compat.egg-info/requires.txt 2023-09-06 14:56:06.000000000 +0200 +++ new/ansible-compat-4.1.11/src/ansible_compat.egg-info/requires.txt 2024-01-10 13:53:09.000000000 +0100 @@ -17,4 +17,4 @@ pip-tools pytest>=7.2.0 pytest-mock -pytest-plus +pytest-plus>=0.6.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/test/collections/acme.minimal/galaxy.yml new/ansible-compat-4.1.11/test/collections/acme.minimal/galaxy.yml --- old/ansible-compat-4.1.10/test/collections/acme.minimal/galaxy.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/ansible-compat-4.1.11/test/collections/acme.minimal/galaxy.yml 2024-01-10 13:52:49.000000000 +0100 @@ -0,0 +1,30 @@ +name: minimal +namespace: acme +version: 1.0.0 +readme: README.md +authors: + - Red Hat +description: Sample collection to use with molecule +build_ignore: + - "*.egg-info" + - .DS_Store + - .eggs + - .gitignore + - .mypy_cache + - .pytest_cache + - .stestr + - .stestr.conf + - .tox + - .vscode + - MANIFEST.in + - build + - dist + - doc + - report.html + - setup.cfg + - setup.py + - "tests/unit/*.*" + - README.rst + - tox.ini + +license_file: LICENSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/test/test_runtime.py new/ansible-compat-4.1.11/test/test_runtime.py --- old/ansible-compat-4.1.10/test/test_runtime.py 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/test/test_runtime.py 2024-01-10 13:52:49.000000000 +0100 @@ -24,6 +24,7 @@ from ansible_compat.runtime import ( CompletedProcess, Runtime, + _get_galaxy_role_name, is_url, search_galaxy_paths, ) @@ -239,10 +240,11 @@ os.chdir(old_pwd) -def test_prerun_reqs_v1(caplog: pytest.LogCaptureFixture, runtime: Runtime) -> None: +def test_prerun_reqs_v1(caplog: pytest.LogCaptureFixture) -> None: """Checks that the linter can auto-install requirements v1 when found.""" + runtime = Runtime(verbosity=1) path = Path(__file__).parent.parent / "examples" / "reqs_v1" - with cwd(path), caplog.at_level(logging.INFO): + with cwd(path): runtime.prepare_environment() assert any( msg.startswith("Running ansible-galaxy role install") for msg in caplog.messages @@ -253,12 +255,12 @@ ) -def test_prerun_reqs_v2(caplog: pytest.LogCaptureFixture, runtime: Runtime) -> None: +def test_prerun_reqs_v2(caplog: pytest.LogCaptureFixture) -> None: """Checks that the linter can auto-install requirements v2 when found.""" + runtime = Runtime(verbosity=1) path = (Path(__file__).parent.parent / "examples" / "reqs_v2").resolve() with cwd(path): - with caplog.at_level(logging.INFO): - runtime.prepare_environment() + runtime.prepare_environment() assert any( msg.startswith("Running ansible-galaxy role install") for msg in caplog.messages @@ -525,11 +527,10 @@ def test_install_galaxy_role_unlink( - runtime_tmp: Runtime, caplog: pytest.LogCaptureFixture, ) -> None: """Test ability to unlink incorrect symlinked roles.""" - caplog.set_level(logging.INFO) + runtime_tmp = Runtime(verbosity=1) runtime_tmp.prepare_environment() pathlib.Path(f"{runtime_tmp.cache_dir}/roles").mkdir(parents=True, exist_ok=True) pathlib.Path(f"{runtime_tmp.cache_dir}/roles/acme.get_rich").symlink_to("/dev/null") @@ -861,3 +862,32 @@ def test_is_url(name: str, result: bool) -> None: """Checks functionality of is_url.""" assert is_url(name) == result + + +def test_prepare_environment_repair_broken_symlink( + caplog: pytest.LogCaptureFixture, +) -> None: + """Ensure we can deal with broken symlinks in collections.""" + caplog.set_level(logging.INFO) + project_dir = Path(__file__).parent / "collections" / "acme.minimal" + runtime = Runtime(isolated=True, project_dir=project_dir) + assert runtime.cache_dir + acme = runtime.cache_dir / "collections" / "ansible_collections" / "acme" + acme.mkdir(parents=True, exist_ok=True) + goodies = acme / "minimal" + rmtree(goodies, ignore_errors=True) + goodies.unlink(missing_ok=True) + goodies.symlink_to("/invalid/destination") + runtime.prepare_environment(install_local=True) + assert any( + msg.startswith("Collection is symlinked, but not pointing to") + for msg in caplog.messages + ) + + +def test_get_galaxy_role_name_invalid() -> None: + """Verifies that function returns empty string on invalid input.""" + galaxy_infos = { + "role_name": False, # <-- invalid data, should be string + } + assert _get_galaxy_role_name(galaxy_infos) == "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/test/test_runtime_scan_path.py new/ansible-compat-4.1.11/test/test_runtime_scan_path.py --- old/ansible-compat-4.1.10/test/test_runtime_scan_path.py 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/test/test_runtime_scan_path.py 2024-01-10 13:52:49.000000000 +0100 @@ -23,7 +23,6 @@ class ScanSysPath: """Parameters for scan tests.""" - isolated: bool scan: bool raises_not_found: bool @@ -38,10 +37,8 @@ @pytest.mark.parametrize( ("param"), ( - ScanSysPath(isolated=True, scan=True, raises_not_found=True), - ScanSysPath(isolated=True, scan=False, raises_not_found=True), - ScanSysPath(isolated=False, scan=True, raises_not_found=False), - ScanSysPath(isolated=False, scan=False, raises_not_found=True), + ScanSysPath(scan=False, raises_not_found=True), + ScanSysPath(scan=True, raises_not_found=False), ), ids=str, ) @@ -87,7 +84,7 @@ f""" import json; from ansible_compat.runtime import Runtime; - r = Runtime(isolated={param.isolated}); + r = Runtime(); fv, cp = r.require_collection(name="{V2_COLLECTION_FULL_NAME}", version="{V2_COLLECTION_VERSION}", install=False); print(json.dumps({{"found_version": str(fv), "collection_path": str(cp)}})); """, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-compat-4.1.10/tox.ini new/ansible-compat-4.1.11/tox.ini --- old/ansible-compat-4.1.10/tox.ini 2023-09-06 14:55:41.000000000 +0200 +++ new/ansible-compat-4.1.11/tox.ini 2024-01-10 13:52:49.000000000 +0100 @@ -4,8 +4,22 @@ lint pkg docs - # matrix assumed current (implicit) is 2.13: - py{39,310,311}{,-devel,-ansible212,-ansible213,-ansible214,-ansible215} + py + py-devel + py39-ansible212 + py39-ansible213 + py39-ansible214 + py39-ansible215 + py310-ansible212 + py310-ansible213 + py310-ansible214 + py310-ansible215 + py311-ansible212 + py311-ansible213 + py311-ansible214 + py311-ansible215 + py312-ansible216 + isolated_build = true skip_missing_interpreters = True requires = @@ -14,18 +28,20 @@ [testenv] description = - Run the tests with {basepython} + Run the tests devel: ansible devel branch ansible212: ansible-core 2.12 ansible213: ansible-core 2.13 ansible214: ansible-core 2.14 ansible215: ansible-core 2.15 + ansible216: ansible-core 2.16 deps = ansible212: ansible-core>=2.12,<2.13 ansible213: ansible-core>=2.13,<2.14 ansible214: ansible-core>=2.14,<2.15 ansible215: ansible-core>=2.15,<2.16 + ansible216: ansible-core>=2.16,<2.17 devel: ansible-core @ git+https://github.com/ansible/ansible.git@c5d18c39d81e2b3b10856b2fb76747230e4fac4a # GPLv3+ # avoid installing ansible-core on -devel envs: @@ -83,7 +99,7 @@ [testenv:lint] description = Run all linters # locked basepython is needed because to keep constrains.txt predictable -basepython = python3.9 +basepython = python3.10 deps = pre-commit>=2.6.0 skip_install = true