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 2023-02-07 18:49:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ansible-compat (Old)
 and      /work/SRC/openSUSE:Factory/.python-ansible-compat.new.4462 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ansible-compat"

Tue Feb  7 18:49:10 2023 rev:13 rq:1063493 version:3.0.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-ansible-compat/python-ansible-compat.changes  
    2022-12-19 14:08:00.894586851 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-ansible-compat.new.4462/python-ansible-compat.changes
    2023-02-07 18:49:19.155207188 +0100
@@ -1,0 +2,15 @@
+Tue Jan 31 15:05:36 UTC 2023 - Johannes Kastl <[email protected]>
+
+- update to 3.0.0:
+  * Major Changes
+    - Require ansible-core 2.12 or newer (#215) @ssbarnea
+  * Minor Changes
+    - Address ansible 2.15 compatibility related to AnsibleCollectionConfig 
(#213) @ssbarnea
+  * Bugfixes
+    - Required subprocess-tee>=0.4.1 (#211) @ssbarnea
+- update to 3.0.1:
+  * Bugfixes
+    - Avoid double initialization of ansible runtime (#218) @ssbarnea
+    - Update README.md for 3.0.0 release (#217) @ianw
+
+-------------------------------------------------------------------

Old:
----
  ansible-compat-2.2.7.tar.gz

New:
----
  ansible-compat-3.0.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-ansible-compat.spec ++++++
--- /var/tmp/diff_new_pack.0NwkJy/_old  2023-02-07 18:49:19.779210542 +0100
+++ /var/tmp/diff_new_pack.0NwkJy/_new  2023-02-07 18:49:19.783210563 +0100
@@ -26,7 +26,7 @@
 %endif
 
 Name:           python-ansible-compat
-Version:        2.2.7
+Version:        3.0.1
 Release:        0
 Summary:        Compatibility shim for Ansible 2.9 and newer
 License:        MIT
@@ -44,13 +44,13 @@
 BuildRequires:  %{python_module flaky}
 BuildRequires:  %{python_module jsonschema >= 4.5.1}
 BuildRequires:  %{python_module pytest-mock}
-BuildRequires:  %{python_module subprocess-tee}
+BuildRequires:  %{python_module subprocess-tee >= 0.4.1}
 BuildRequires:  ansible
 # /SECTION
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-generators
 %{?python_enable_dependency_generator}
-Requires:       python-subprocess-tee
+Requires:       python-subprocess-tee >= 0.4.1
 BuildArch:      noarch
 %python_subpackages
 

++++++ ansible-compat-2.2.7.tar.gz -> ansible-compat-3.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/.github/workflows/tox.yml 
new/ansible-compat-3.0.1/.github/workflows/tox.yml
--- old/ansible-compat-2.2.7/.github/workflows/tox.yml  2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/.github/workflows/tox.yml  2023-02-01 
13:13:27.000000000 +0100
@@ -12,59 +12,34 @@
   workflow_call:
 
 jobs:
+  pre:
+    name: pre
+    runs-on: ubuntu-22.04
+    outputs:
+      matrix: ${{ steps.generate_matrix.outputs.matrix }}
+    steps:
+      - name: Determine matrix
+        id: generate_matrix
+        uses: coactions/dynamic-matrix@v1
+        with:
+          max_python: "3.11"
+          other_names: |
+            lint
+            docs
+            pkg
+            py38-ansible212
+            py38-ansible213
+            py39-ansible214
+            py311-devel
+          platforms: linux,macos
+          macos: minmax
   build:
-    name: ${{ matrix.name || matrix.tox_env }}
+    name: ${{ matrix.name }}
     runs-on: ${{ matrix.os || 'ubuntu-22.04' }}
+    needs: pre
     strategy:
       fail-fast: false
-      matrix:
-        python-version:
-          - 3.9
-        os:
-          - ubuntu-22.04
-        tox_env:
-          - lint
-          - docs
-          - pkg
-        include:
-          # keep list sorted as it determines UI order too
-          # linux (py38 comes from matrix):
-          - name: py38-ansible29
-            tox_env: py38-ansible29
-            python-version: 3.8
-          - name: py38-ansible210
-            tox_env: py38-ansible210
-            python-version: 3.8
-          - name: py38-ansible211
-            tox_env: py38-ansible211
-            python-version: 3.8
-          - name: py38-ansible212
-            tox_env: py38-ansible212
-            python-version: 3.8
-          - name: py38-ansible213
-            tox_env: py38-ansible213
-            python-version: 3.8
-          - name: py39-ansible214
-            tox_env: py39-ansible214
-            python-version: 3.9
-          - name: py39
-            tox_env: py39,py39-devel
-            python-version: 3.9
-          - name: py310
-            tox_env: py310,py310-devel
-            python-version: "3.10"
-          - name: py311
-            tox_env: py311,py311-devel
-            python-version: "3.11"
-          # macos
-          - name: py38@macos
-            tox_env: py38,py38-ansible29 # 2.14(devel) does not support 3.8
-            os: macos-12
-            python-version: 3.8
-          - name: py311@macos
-            tox_env: py311,py311-devel
-            os: macos-12
-            python-version: "3.11"
+      matrix: ${{ fromJson(needs.pre.outputs.matrix) }}
     env:
       FORCE_COLOR: 1
 
@@ -74,10 +49,10 @@
         with:
           fetch-depth: 0 # needed by setuptools-scm
 
-      - name: Set up Python ${{ matrix.python-version }}
+      - name: Set up Python ${{ matrix.python_version }}
         uses: actions/setup-python@v4
         with:
-          python-version: ${{ matrix.python-version }}
+          python-version: ${{ matrix.python_version }}
 
       - name: Pre-commit cache
         uses: actions/cache@v3
@@ -95,10 +70,10 @@
         run: python3 -m pip install --upgrade 'tox>=4.0.3'
 
       - name: Initialize tox envs
-        run: python -m tox --notest --skip-missing-interpreters false -vv -e 
${{ matrix.tox_env }}
+        run: python -m tox --notest --skip-missing-interpreters false -vv -e 
${{ matrix.passed_name }}
 
       - name: Test with tox
-        run: python -m tox -e ${{ matrix.tox_env }}
+        run: python -m tox -e ${{ matrix.passed_name }}
 
       - name: Archive logs
         uses: actions/upload-artifact@v3
@@ -107,10 +82,10 @@
           path: .tox/**/log/
 
       - name: Upload coverage data
-        if: ${{ startsWith(matrix.tox_env, 'py') }}
+        if: ${{ startsWith(matrix.passed_name, 'py') }}
         uses: codecov/codecov-action@v3
         with:
-          name: ${{ matrix.tox_env }}
+          name: ${{ matrix.passed_name }}
           fail_ci_if_error: false # see 
https://github.com/codecov/codecov-action/issues/598
           token: ${{ secrets.CODECOV_TOKEN }}
           verbose: true # optional (default = false)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/.pre-commit-config.yaml 
new/ansible-compat-3.0.1/.pre-commit-config.yaml
--- old/ansible-compat-2.2.7/.pre-commit-config.yaml    2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/.pre-commit-config.yaml    2023-02-01 
13:13:27.000000000 +0100
@@ -42,19 +42,15 @@
     rev: v2.2.2
     hooks:
       - id: codespell
-  - repo: https://github.com/PyCQA/doc8
-    rev: v1.0.0
-    hooks:
-      - id: doc8
   - repo: https://github.com/adrienverge/yamllint.git
-    rev: v1.28.0
+    rev: v1.29.0
     hooks:
       - id: yamllint
         files: \.(yaml|yml)$
         types: [file, yaml]
         entry: yamllint --strict
   - repo: https://github.com/PyCQA/isort
-    rev: 5.10.1
+    rev: 5.12.0
     hooks:
       - id: isort
         args:
@@ -83,16 +79,17 @@
         # empty args needed in order to match mypy cli behavior
         args: ["--strict"]
         additional_dependencies:
+          - ansible-core
           - cached_property
           - packaging
           - pytest
           - pytest-mock
-          - subprocess-tee>=0.3.5
+          - subprocess-tee>=0.4.1
           - types-PyYAML
           - types-pkg_resources
           - types-jsonschema>=4.4.9
   - repo: https://github.com/pycqa/pylint
-    rev: v2.15.8
+    rev: v2.16.0b1
     hooks:
       - id: pylint
         additional_dependencies:
@@ -107,7 +104,7 @@
         name: Upgrade constraints files and requirements
         files: ^(pyproject\.toml|requirements\.txt)$
         language: python
-        entry: python -m piptools compile --resolver=backtracking --upgrade -q 
--extra docs --extra test --output-file=requirements.txt pyproject.toml
+        entry: python -m piptools compile --resolver=backtracking --upgrade -q 
--extra docs --extra test --output-file=requirements.txt pyproject.toml 
--unsafe-package ansible-core
         pass_filenames: false
         stages:
           - manual
@@ -117,7 +114,7 @@
         name: Check constraints files and requirements
         files: ^(pyproject\.toml|requirements\.txt)$
         language: python
-        entry: python -m piptools compile --resolver=backtracking -q --extra 
docs --extra test --output-file=requirements.txt pyproject.toml
+        entry: python -m piptools compile --resolver=backtracking -q --extra 
docs --extra test --output-file=requirements.txt pyproject.toml 
--unsafe-package ansible-core
         pass_filenames: false
         additional_dependencies:
           - pip-tools>=6.11.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/PKG-INFO 
new/ansible-compat-3.0.1/PKG-INFO
--- old/ansible-compat-2.2.7/PKG-INFO   2022-12-09 23:51:26.114431600 +0100
+++ new/ansible-compat-3.0.1/PKG-INFO   2023-02-01 13:13:45.635363300 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: ansible-compat
-Version: 2.2.7
+Version: 3.0.1
 Summary: Ansible compatibility goodies
 Author-email: Sorin Sbarnea <[email protected]>
 Maintainer-email: Sorin Sbarnea <[email protected]>
@@ -42,6 +42,6 @@
 
[![codecov.io](https://codecov.io/github/ansible/ansible-compat/coverage.svg?branch=main)](https://codecov.io/github/ansible/ansible-compat?branch=main)
 
 A python package contains functions that facilitate working with various
-versions of Ansible 2.9 and newer.
+versions of Ansible 2.12 and newer.
 
 Documentation is available at 
[ansible-compat.readthedocs.io](https://ansible-compat.readthedocs.io/en/latest/).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/README.md 
new/ansible-compat-3.0.1/README.md
--- old/ansible-compat-2.2.7/README.md  2022-12-09 23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/README.md  2023-02-01 13:13:27.000000000 +0100
@@ -6,6 +6,6 @@
 
[![codecov.io](https://codecov.io/github/ansible/ansible-compat/coverage.svg?branch=main)](https://codecov.io/github/ansible/ansible-compat?branch=main)
 
 A python package contains functions that facilitate working with various
-versions of Ansible 2.9 and newer.
+versions of Ansible 2.12 and newer.
 
 Documentation is available at 
[ansible-compat.readthedocs.io](https://ansible-compat.readthedocs.io/en/latest/).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/docs/api.md 
new/ansible-compat-3.0.1/docs/api.md
--- old/ansible-compat-2.2.7/docs/api.md        1970-01-01 01:00:00.000000000 
+0100
+++ new/ansible-compat-3.0.1/docs/api.md        2023-02-01 13:13:27.000000000 
+0100
@@ -0,0 +1,8 @@
+# API
+
+::: ansible_compat.config
+::: ansible_compat.errors
+::: ansible_compat.loaders
+::: ansible_compat.prerun
+::: ansible_compat.runtime
+::: ansible_compat.schema
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/docs/conf.py 
new/ansible-compat-3.0.1/docs/conf.py
--- old/ansible-compat-2.2.7/docs/conf.py       2022-12-09 23:51:06.000000000 
+0100
+++ new/ansible-compat-3.0.1/docs/conf.py       1970-01-01 01:00:00.000000000 
+0100
@@ -1,80 +0,0 @@
-"""Configuration file for the Sphinx documentation builder."""
-# pylint: disable=invalid-name,redefined-builtin
-
-# http://www.sphinx-doc.org/en/master/config
-
-
-# -- Project information -----------------------------------------------------
-project = "ansible-compat"
-copyright = "2021, Red Hat Ansible"
-author = "Red Hat Ansible"
-
-# -- General configuration ---------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
-    "sphinx.ext.autodoc",
-    "sphinx.ext.doctest",
-    "sphinx.ext.intersphinx",
-    "sphinx.ext.todo",
-    "sphinx.ext.viewcode",
-    "myst_parser",
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-#
-source_suffix = [".rst", ".md"]
-
-# The master toctree document.
-master_doc = "index"
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = "en"
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This pattern also affects html_static_path and html_extra_path .
-exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "ansible"
-
-
-# -- Options for HTML output -------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-#
-html_theme = "sphinx_ansible_theme"
-
-
-# -- Options for HTMLHelp output ---------------------------------------------
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = "ansible-compat"
-
-
-intersphinx_mapping = {
-    "python": ("https://docs.python.org/3";, None),
-    "packaging": ("https://packaging.pypa.io/en/latest/";, None),
-}
-
-
-# -- Options for todo extension ----------------------------------------------
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/docs/examples.md 
new/ansible-compat-3.0.1/docs/examples.md
--- old/ansible-compat-2.2.7/docs/examples.md   2022-12-09 23:51:06.000000000 
+0100
+++ new/ansible-compat-3.0.1/docs/examples.md   1970-01-01 01:00:00.000000000 
+0100
@@ -1,17 +0,0 @@
-# Examples
-
-## Using Ansible runtime
-
-```{literalinclude} ../test/test_runtime_example.py
-:language: python
-```
-
-## Access to Ansible configuration
-
-As you may not want to parse `ansible-config dump` yourself, you
-can make use of a simple python class that facilitates access to
-it, using python data types.
-
-```{literalinclude} ../test/test_configuration_example.py
-:language: python
-```
Binary files old/ansible-compat-2.2.7/docs/images/favicon.ico and 
new/ansible-compat-3.0.1/docs/images/favicon.ico differ
Binary files old/ansible-compat-2.2.7/docs/images/logo.png and 
new/ansible-compat-3.0.1/docs/images/logo.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/docs/images/logo.svg 
new/ansible-compat-3.0.1/docs/images/logo.svg
--- old/ansible-compat-2.2.7/docs/images/logo.svg       1970-01-01 
01:00:00.000000000 +0100
+++ new/ansible-compat-3.0.1/docs/images/logo.svg       2023-02-01 
13:13:27.000000000 +0100
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg width="100%" height="100%" viewBox="0 0 256 256" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; 
xml:space="preserve" xmlns:serif="http://www.serif.com/"; 
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+    <g id="ansible-aap">
+        <path d="M128,0C198.645,0 256,57.355 256,128C256,198.645 198.645,256 
128,256C57.355,256 0,198.645 0,128C0,57.355 57.355,0 
128,0ZM189.094,178.686L138.002,55.958C136.786,52.714 133.677,50.416 
130.163,50.551C126.513,50.416 123.269,52.714 
122.053,55.958L66.23,190.446L85.423,190.446L107.455,135.029L173.55,188.418C175.442,190.31
 178.011,191.392 180.579,191.527C185.58,191.662 189.77,187.742 
189.905,182.606L189.905,182.336C189.77,181.119 189.499,179.903 
189.094,178.686ZM130.298,78.125L163.413,159.899L113.402,120.431L130.298,78.125Z"
 style="fill:white;"/>
+    </g>
+</svg>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/docs/index.md 
new/ansible-compat-3.0.1/docs/index.md
--- old/ansible-compat-2.2.7/docs/index.md      2022-12-09 23:51:06.000000000 
+0100
+++ new/ansible-compat-3.0.1/docs/index.md      2023-02-01 13:13:27.000000000 
+0100
@@ -1,18 +1,17 @@
-# ansible-compat
+# Examples
 
-```{include} examples.md
+## Using Ansible runtime
 
+```python title="example.py"
+--8<-- "test/test_runtime_example.py"
 ```
 
-## API
+## Access to Ansible configuration
 
-```{eval-rst}
-.. toctree::
-   :maxdepth: 2
-   :caption: Contents:
+As you may not want to parse `ansible-config dump` yourself, you
+can make use of a simple python class that facilitates access to
+it, using python data types.
 
-.. automodule:: ansible_compat.runtime
-.. autoclass:: Runtime
-   :members:
-   :special-members: __init__
+```python
+--8<-- "test/test_configuration_example.py"
 ```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/mkdocs.yml 
new/ansible-compat-3.0.1/mkdocs.yml
--- old/ansible-compat-2.2.7/mkdocs.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/ansible-compat-3.0.1/mkdocs.yml 2023-02-01 13:13:27.000000000 +0100
@@ -0,0 +1,103 @@
+site_name: Ansible Compat Library
+site_url: https://ansible-compat.readthedocs.io/
+repo_url: https://github.com/ansible/ansible-compat
+edit_uri: blob/main/docs/
+copyright: Copyright © 2023 Red Hat, Inc.
+
+strict: true
+watch:
+  - mkdocs.yml
+  - src
+  - docs
+
+theme:
+  name: "material"
+  logo: images/logo.svg
+  favicon: images/favicon.ico
+  features:
+    - content.code.copy
+    - content.action.edit
+    # - navigation.expand
+    - navigation.instant
+    - navigation.tracking
+    - navigation.sections
+    - navigation.indexes
+    - toc.integrate
+  palette:
+    - media: "(prefers-color-scheme: light)"
+      primary: teal
+      accent: blue
+      scheme: default
+      toggle:
+        icon: material/brightness-7
+        name: Switch to dark mode
+    - media: "(prefers-color-scheme: dark)"
+      scheme: slate
+      primary: teal
+      accent: blue
+      toggle:
+        icon: material/brightness-4
+        name: Switch to light mode
+extra:
+  social:
+    - icon: fontawesome/brands/github-alt
+      link: https://github.com/ansible/ansible-compat
+nav:
+  - examples: index.md
+  - api: api.md
+plugins:
+  - autorefs
+  - search
+  - social
+  - mkdocstrings:
+      handlers:
+        python:
+          import:
+            - https://docs.python.org/3/objects.inv
+          options:
+            # heading_level: 2
+            docstring_style: sphinx
+            docstring_options:
+              ignore_init_summary: yes
+            show_submodules: no
+            docstring_section_style: list
+            members_order: alphabetical
+            show_category_heading: no
+            # cannot merge init into class due to parse error...
+            # merge_init_into_class: yes
+            # separate_signature: yes
+            show_root_heading: yes
+            show_signature_annotations: yes
+            separate_signature: yes
+            # show_bases: false
+    # options:
+    #   show_root_heading: true
+    #   docstring_style: sphinx
+
+markdown_extensions:
+  - admonition
+  - def_list
+  - footnotes
+  - pymdownx.highlight:
+      anchor_linenums: true
+  - pymdownx.inlinehilite
+  - pymdownx.snippets:
+      check_paths: true
+  - pymdownx.superfences
+  - pymdownx.magiclink:
+      repo_url_shortener: true
+      repo_url_shorthand: true
+      social_url_shorthand: true
+      social_url_shortener: true
+      user: facelessuser
+      repo: pymdown-extensions
+      normalize_issue_symbols: true
+  - pymdownx.tabbed:
+      alternate_style: true
+  - toc:
+      permalink: true
+  - pymdownx.superfences:
+      custom_fences:
+        - name: mermaid
+          class: mermaid
+          format: !!python/name:pymdownx.superfences.fence_code_format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/pyproject.toml 
new/ansible-compat-3.0.1/pyproject.toml
--- old/ansible-compat-2.2.7/pyproject.toml     2022-12-09 23:51:06.000000000 
+0100
+++ new/ansible-compat-3.0.1/pyproject.toml     2023-02-01 13:13:27.000000000 
+0100
@@ -37,9 +37,11 @@
 ]
 keywords = ["ansible"]
 dependencies = [
+  # 
https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html
+  "ansible-core>=2.12",
   "packaging",
   "PyYAML",
-  "subprocess-tee>=0.3.5",
+  "subprocess-tee>=0.4.1",
   "jsonschema>=4.6.0",
 ]
 
@@ -51,10 +53,19 @@
 
 [project.optional-dependencies]
 docs = [
-  "sphinx-autobuild>=2021.3.14",
-  "sphinx>=5.3.0",
-  "sphinx_ansible_theme",
-  "myst_parser",
+  "argparse-manpage",
+  "black",
+  "cairosvg",
+  "markdown-include",
+  "mkdocs",
+  "mkdocs-exclude",
+  "mkdocs-material",
+  "mkdocs-material-extensions",
+  "mkdocstrings",
+  "mkdocstrings-python",
+  "pillow",
+  "pymdown-extensions",
+  "slugify",
 ]
 test = ["coverage", "pip-tools", "pytest>=7.2.0", "pytest-mock", "pytest-plus"]
 
@@ -64,7 +75,9 @@
 
 [tool.coverage.report]
 exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:"]
+fail_under = 93
 skip_covered = true
+show_missing = true
 
 [tool.mypy]
 python_version = 3.8
@@ -79,6 +92,10 @@
 # warn_unused_configs = True
 exclude = "test/local-content"
 
+[[tool.mypy.overrides]]
+module = "ansible.*"
+ignore_missing_imports = true
+
 [tool.isort]
 profile = "black"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/readthedocs.yml 
new/ansible-compat-3.0.1/readthedocs.yml
--- old/ansible-compat-2.2.7/readthedocs.yml    1970-01-01 01:00:00.000000000 
+0100
+++ new/ansible-compat-3.0.1/readthedocs.yml    2023-02-01 13:13:27.000000000 
+0100
@@ -0,0 +1,21 @@
+version: 2
+
+submodules:
+  include: all
+  recursive: true
+
+mkdocs:
+  fail_on_warning: true
+
+build:
+  os: ubuntu-22.04
+  tools:
+    python: "3.11"
+
+python:
+  system_packages: false
+  install:
+    - method: pip
+      path: .
+      extra_requirements:
+        - docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/requirements.txt 
new/ansible-compat-3.0.1/requirements.txt
--- old/ansible-compat-2.2.7/requirements.txt   2022-12-09 23:51:06.000000000 
+0100
+++ new/ansible-compat-3.0.1/requirements.txt   2023-02-01 13:13:27.000000000 
+0100
@@ -2,83 +2,142 @@
 # This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
-#    pip-compile --extra=docs --extra=test --output-file=requirements.txt 
--resolver=backtracking pyproject.toml
+#    pip-compile --extra=docs --extra=test --output-file=requirements.txt 
--resolver=backtracking --unsafe-package=ansible-core pyproject.toml
 #
-alabaster==0.7.12
-    # via sphinx
-ansible-pygments==0.1.1
-    # via sphinx-ansible-theme
+argparse-manpage==4
+    # via ansible-compat (pyproject.toml)
 attrs==22.1.0
     # via
     #   jsonschema
     #   pytest
-babel==2.11.0
-    # via sphinx
+black==22.12.0
+    # via ansible-compat (pyproject.toml)
 build==0.9.0
     # via pip-tools
+cairocffi==1.4.0
+    # via cairosvg
+cairosvg==2.6.0
+    # via ansible-compat (pyproject.toml)
 certifi==2022.12.7
     # via requests
+cffi==1.15.1
+    # via
+    #   cairocffi
+    #   cryptography
 charset-normalizer==2.1.1
     # via requests
 click==8.1.3
-    # via pip-tools
+    # via
+    #   black
+    #   mkdocs
+    #   pip-tools
 colorama==0.4.6
-    # via sphinx-autobuild
+    # via griffe
 coverage==6.5.0
     # via ansible-compat (pyproject.toml)
-docutils==0.17.1
-    # via
-    #   myst-parser
-    #   sphinx
-    #   sphinx-rtd-theme
+cryptography==39.0.0
+    # via ansible-core
+cssselect2==0.7.0
+    # via cairosvg
+defusedxml==0.7.1
+    # via cairosvg
 exceptiongroup==1.0.4
     # via pytest
+ghp-import==2.1.0
+    # via mkdocs
+griffe==0.25.4
+    # via mkdocstrings-python
 idna==3.4
     # via requests
-imagesize==1.4.1
-    # via sphinx
 importlib-metadata==5.1.0
-    # via sphinx
+    # via
+    #   markdown
+    #   mkdocs
 iniconfig==1.1.1
     # via pytest
 jinja2==3.1.2
     # via
-    #   myst-parser
-    #   sphinx
+    #   ansible-core
+    #   mkdocs
+    #   mkdocs-material
+    #   mkdocstrings
 jsonschema==4.17.3
     # via ansible-compat (pyproject.toml)
-livereload==2.6.3
-    # via sphinx-autobuild
-markdown-it-py==2.1.0
+markdown==3.3.7
     # via
-    #   mdit-py-plugins
-    #   myst-parser
+    #   markdown-include
+    #   mkdocs
+    #   mkdocs-autorefs
+    #   mkdocs-material
+    #   mkdocstrings
+    #   pymdown-extensions
+markdown-include==0.8.0
+    # via ansible-compat (pyproject.toml)
 markupsafe==2.1.1
-    # via jinja2
-mdit-py-plugins==0.3.3
-    # via myst-parser
-mdurl==0.1.2
-    # via markdown-it-py
+    # via
+    #   jinja2
+    #   mkdocstrings
+mergedeep==1.3.4
+    # via mkdocs
+mkdocs==1.4.2
+    # via
+    #   ansible-compat (pyproject.toml)
+    #   mkdocs-autorefs
+    #   mkdocs-exclude
+    #   mkdocs-material
+    #   mkdocstrings
+mkdocs-autorefs==0.4.1
+    # via mkdocstrings
+mkdocs-exclude==1.0.2
+    # via ansible-compat (pyproject.toml)
+mkdocs-material==8.5.11
+    # via ansible-compat (pyproject.toml)
+mkdocs-material-extensions==1.1.1
+    # via
+    #   ansible-compat (pyproject.toml)
+    #   mkdocs-material
+mkdocstrings==0.20.0
+    # via
+    #   ansible-compat (pyproject.toml)
+    #   mkdocstrings-python
+mkdocstrings-python==0.8.3
+    # via ansible-compat (pyproject.toml)
 more-itertools==9.0.0
     # via pytest-plus
-myst-parser==0.18.1
-    # via ansible-compat (pyproject.toml)
+mypy-extensions==0.4.3
+    # via black
 packaging==22.0
     # via
     #   ansible-compat (pyproject.toml)
+    #   ansible-core
     #   build
+    #   mkdocs
     #   pytest
-    #   sphinx
+pathspec==0.10.3
+    # via black
 pep517==0.13.0
     # via build
+pillow==9.4.0
+    # via
+    #   ansible-compat (pyproject.toml)
+    #   cairosvg
+pip==23.0
+    # via pip-tools
 pip-tools==6.11.0
     # via ansible-compat (pyproject.toml)
+platformdirs==2.6.2
+    # via black
 pluggy==1.0.0
     # via pytest
+pycparser==2.21
+    # via cffi
 pygments==2.13.0
+    # via mkdocs-material
+pymdown-extensions==9.9.2
     # via
-    #   ansible-pygments
-    #   sphinx
+    #   ansible-compat (pyproject.toml)
+    #   mkdocs-material
+    #   mkdocstrings
 pyrsistent==0.19.2
     # via jsonschema
 pytest==7.2.0
@@ -90,61 +149,52 @@
     # via ansible-compat (pyproject.toml)
 pytest-plus==0.2
     # via ansible-compat (pyproject.toml)
-pytz==2022.6
-    # via babel
+python-dateutil==2.8.2
+    # via ghp-import
 pyyaml==6.0
     # via
     #   ansible-compat (pyproject.toml)
-    #   myst-parser
+    #   ansible-core
+    #   mkdocs
+    #   pyyaml-env-tag
+pyyaml-env-tag==0.1
+    # via mkdocs
 requests==2.28.1
-    # via sphinx
+    # via mkdocs-material
+resolvelib==0.8.1
+    # via ansible-core
+setuptools==67.0.0
+    # via pip-tools
 six==1.16.0
-    # via livereload
-snowballstemmer==2.2.0
-    # via sphinx
-sphinx==5.3.0
-    # via
-    #   ansible-compat (pyproject.toml)
-    #   myst-parser
-    #   sphinx-ansible-theme
-    #   sphinx-autobuild
-    #   sphinx-rtd-theme
-sphinx-ansible-theme==0.10.1
-    # via ansible-compat (pyproject.toml)
-sphinx-autobuild==2021.3.14
-    # via ansible-compat (pyproject.toml)
-sphinx-rtd-theme==1.1.1
-    # via sphinx-ansible-theme
-sphinxcontrib-applehelp==1.0.2
-    # via sphinx
-sphinxcontrib-devhelp==1.0.2
-    # via sphinx
-sphinxcontrib-htmlhelp==2.0.0
-    # via sphinx
-sphinxcontrib-jsmath==1.0.1
-    # via sphinx
-sphinxcontrib-qthelp==1.0.3
-    # via sphinx
-sphinxcontrib-serializinghtml==1.1.5
-    # via sphinx
-subprocess-tee==0.4.0
+    # via python-dateutil
+slugify==0.0.1
     # via ansible-compat (pyproject.toml)
+subprocess-tee==0.4.1
+    # via ansible-compat (pyproject.toml)
+tinycss2==1.2.1
+    # via
+    #   cairosvg
+    #   cssselect2
 tomli==2.0.1
     # via
+    #   black
     #   build
     #   pep517
     #   pytest
-tornado==6.2
-    # via livereload
 typing-extensions==4.4.0
-    # via myst-parser
+    # via black
 urllib3==1.26.13
     # via requests
+watchdog==2.2.1
+    # via mkdocs
+webencodings==0.5.1
+    # via
+    #   cssselect2
+    #   tinycss2
 wheel==0.38.4
     # via pip-tools
 zipp==3.11.0
     # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
-# pip
-# setuptools
+# ansible-core
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/src/ansible_compat/__init__.py 
new/ansible-compat-3.0.1/src/ansible_compat/__init__.py
--- old/ansible-compat-2.2.7/src/ansible_compat/__init__.py     2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat/__init__.py     2023-02-01 
13:13:27.000000000 +0100
@@ -3,7 +3,7 @@
 
 try:
     __version__ = version("ansible-compat")
-except PackageNotFoundError:  # pragma: no branch
+except PackageNotFoundError:  # pragma: no cover
     __version__ = "0.1.dev1"
 
 __all__ = ["__version__"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/src/ansible_compat/config.py 
new/ansible-compat-3.0.1/src/ansible_compat/config.py
--- old/ansible-compat-2.2.7/src/ansible_compat/config.py       2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat/config.py       2023-02-01 
13:13:27.000000000 +0100
@@ -9,6 +9,7 @@
 
 from packaging.version import Version
 
+from ansible_compat.constants import ANSIBLE_MIN_VERSION
 from ansible_compat.errors import InvalidPrerequisiteError, MissingAnsibleError
 from ansible_compat.ports import cache
 
@@ -22,15 +23,7 @@
 # do not use lru_cache here, as environment can change between calls
 def ansible_collections_path() -> str:
     """Return collection path variable for current version of Ansible."""
-    # respect Ansible behavior, which is to load old name if present
-    for env_var in ["ANSIBLE_COLLECTIONS_PATHS", "ANSIBLE_COLLECTIONS_PATH"]:
-        if env_var in os.environ:
-            return env_var
-
-    # https://github.com/ansible/ansible/pull/70007
-    if ansible_version() >= ansible_version("2.10.0.dev0"):
-        return "ANSIBLE_COLLECTIONS_PATH"
-    return "ANSIBLE_COLLECTIONS_PATHS"
+    return "ANSIBLE_COLLECTIONS_PATH"
 
 
 def parse_ansible_version(stdout: str) -> Version:
@@ -43,11 +36,9 @@
     )
     if match:
         return Version(match.group("version"))
-    # ansible-base 2.10 and Ansible 2.9: 'ansible 2.x.y'
-    match = re.search(r"^ansible (?P<version>[^\s]+)", stdout, re.MULTILINE)
-    if match:
-        return Version(match.group("version"))
-    raise InvalidPrerequisiteError(f"Unable to parse ansible cli version: 
{stdout}")
+    raise InvalidPrerequisiteError(
+        f"Unable to parse ansible cli version: {stdout}\nKeep in mind that 
only {ANSIBLE_MIN_VERSION } or newer are supported."
+    )
 
 
 @cache
@@ -440,7 +431,7 @@
             return _dict[attr_name]
 
         data = super().__getattribute__("data")
-        if attr_name == "data":
+        if attr_name == "data":  # pragma: no cover
             return data
 
         name = attr_name.upper()
@@ -469,3 +460,11 @@
             name = item.lower()
             kind = self.data[item].__class__.__name__
             print(f"{name}: {kind}")
+
+
+__all__ = [
+    "ansible_collections_path",
+    "parse_ansible_version",
+    "ansible_version",
+    "AnsibleConfig",
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/src/ansible_compat/constants.py 
new/ansible-compat-3.0.1/src/ansible_compat/constants.py
--- old/ansible-compat-2.2.7/src/ansible_compat/constants.py    2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat/constants.py    2023-02-01 
13:13:27.000000000 +0100
@@ -2,7 +2,7 @@
 
 
 # Minimal version of Ansible we support for runtime
-ANSIBLE_MIN_VERSION = "2.9"
+ANSIBLE_MIN_VERSION = "2.12"
 
 # Based on 
https://docs.ansible.com/ansible/latest/reference_appendices/config.html
 ANSIBLE_DEFAULT_ROLES_PATH = (
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/src/ansible_compat/ports.py 
new/ansible-compat-3.0.1/src/ansible_compat/ports.py
--- old/ansible-compat-2.2.7/src/ansible_compat/ports.py        2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat/ports.py        2023-02-01 
13:13:27.000000000 +0100
@@ -1,15 +1,10 @@
 """Portability helpers."""
 import sys
-
-# Based on workarounds seen on https://github.com/python/mypy/issues/1362
-if sys.version_info >= (3, 8):
-    from functools import cached_property
-else:
-    from cached_property import cached_property
+from functools import cached_property
 
 if sys.version_info >= (3, 9):
     from functools import cache  # pylint: disable=no-name-in-module
-else:
+else:  # pragma: no cover
     from functools import lru_cache
 
     cache = lru_cache(maxsize=None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/src/ansible_compat/runtime.py 
new/ansible-compat-3.0.1/src/ansible_compat/runtime.py
--- old/ansible-compat-2.2.7/src/ansible_compat/runtime.py      2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat/runtime.py      2023-02-01 
13:13:27.000000000 +0100
@@ -46,6 +46,9 @@
 
     _version: Optional[packaging.version.Version] = None
     cache_dir: Optional[str] = None
+    # Used to track if we have already initialized the Ansible runtime as 
attempts
+    # to do it multiple tilmes will cause runtime warnings from within 
ansible-core
+    initialized: bool = False
 
     # pylint: disable=too-many-arguments
     def __init__(
@@ -68,11 +71,11 @@
         :param min_required_version: Minimal version of Ansible required. If
                                      not found, a :class:`RuntimeError`
                                      exception is raised.
-        :param: require_module: If set, instantiation will fail if Ansible
-                                Python module is missing or is not matching
-                                the same version as the Ansible command line.
-                                That is useful for consumers that expect to
-                                also perform Python imports from Ansible.
+        :param require_module: If set, instantiation will fail if Ansible
+                               Python module is missing or is not matching
+                               the same version as the Ansible command line.
+                               That is useful for consumers that expect to
+                               also perform Python imports from Ansible.
         :param max_retries: Number of times it should retry network operations.
                             Default is 0, no retries.
         :param environ: Environment dictionary to use, if undefined
@@ -88,7 +91,7 @@
         # As CryptographyDeprecationWarning is not a builtin, we cannot use
         # PYTHONWARNINGS to ignore it using category but we can use message.
         # https://stackoverflow.com/q/68251969/99834
-        if "PYTHONWARNINGS" not in self.environ:
+        if "PYTHONWARNINGS" not in self.environ:  # pragma: no cover
             self.environ["PYTHONWARNINGS"] = "ignore:Blowfish has been 
deprecated"
 
         if isolated:
@@ -123,6 +126,29 @@
                 "indicates a broken execution environment."
             )
 
+        # For ansible 2.15+ we need to initialize the plugin loader
+        # https://github.com/ansible/ansible-lint/issues/2945
+        if not Runtime.initialized:  # noqa: F823
+            if self.version >= Version("2.15.0.dev0"):
+                # pylint: disable=import-outside-toplevel,no-name-in-module
+                from ansible.plugins.loader import init_plugin_loader
+
+                init_plugin_loader([])
+            else:
+                # noinspection PyProtectedMember
+                from ansible.utils.collection_loader._collection_finder import 
(  # pylint: disable=import-outside-toplevel
+                    _AnsibleCollectionFinder,
+                )
+
+                # noinspection PyProtectedMember
+                # pylint: disable=protected-access
+                _AnsibleCollectionFinder(
+                    paths=[
+                        
os.path.dirname(os.environ.get(ansible_collections_path(), "."))
+                    ]
+                )._install()  # pylint: disable=protected-access
+            Runtime.initialized = True
+
     def clean(self) -> None:
         """Remove content of cache_dir."""
         if self.cache_dir:
@@ -214,10 +240,7 @@
             "install",
             "-vvv",  # this is needed to make ansible display important info 
in case of failures
         ]
-
-        # ansible-galaxy before 2.11 fails to upgrade collection unless --force
-        # is present, newer versions do not need it
-        if force or self.version_in_range(upper="2.11"):
+        if force:
             cmd.append("--force")
 
         # As ansible-galaxy install is not able to automatically determine
@@ -275,7 +298,9 @@
     ) -> None:
         """Install dependencies from a requirements.yml.
 
-        param: offline: bypass installation, may fail if requirements are not 
met
+        :param requirement: path to requirements.yml file
+        :param retry: retry network operations on failures
+        :param offline: bypass installation, may fail if requirements are not 
met.
         """
         if not os.path.exists(requirement):
             return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-compat-2.2.7/src/ansible_compat.egg-info/PKG-INFO 
new/ansible-compat-3.0.1/src/ansible_compat.egg-info/PKG-INFO
--- old/ansible-compat-2.2.7/src/ansible_compat.egg-info/PKG-INFO       
2022-12-09 23:51:26.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat.egg-info/PKG-INFO       
2023-02-01 13:13:45.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: ansible-compat
-Version: 2.2.7
+Version: 3.0.1
 Summary: Ansible compatibility goodies
 Author-email: Sorin Sbarnea <[email protected]>
 Maintainer-email: Sorin Sbarnea <[email protected]>
@@ -42,6 +42,6 @@
 
[![codecov.io](https://codecov.io/github/ansible/ansible-compat/coverage.svg?branch=main)](https://codecov.io/github/ansible/ansible-compat?branch=main)
 
 A python package contains functions that facilitate working with various
-versions of Ansible 2.9 and newer.
+versions of Ansible 2.12 and newer.
 
 Documentation is available at 
[ansible-compat.readthedocs.io](https://ansible-compat.readthedocs.io/en/latest/).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-compat-2.2.7/src/ansible_compat.egg-info/SOURCES.txt 
new/ansible-compat-3.0.1/src/ansible_compat.egg-info/SOURCES.txt
--- old/ansible-compat-2.2.7/src/ansible_compat.egg-info/SOURCES.txt    
2022-12-09 23:51:26.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat.egg-info/SOURCES.txt    
2023-02-01 13:13:45.000000000 +0100
@@ -6,7 +6,9 @@
 LICENSE
 README.md
 codecov.yml
+mkdocs.yml
 pyproject.toml
+readthedocs.yml
 requirements.txt
 tox.ini
 .github/CODEOWNERS
@@ -17,9 +19,11 @@
 .github/workflows/push.yml
 .github/workflows/release.yml
 .github/workflows/tox.yml
-docs/conf.py
-docs/examples.md
+docs/api.md
 docs/index.md
+docs/images/favicon.ico
+docs/images/logo.png
+docs/images/logo.svg
 examples/reqs_v1/requirements.yml
 examples/reqs_v2/community-molecule-0.1.0.tar.gz
 examples/reqs_v2/requirements.yml
@@ -43,6 +47,7 @@
 test/test_api.py
 test/test_config.py
 test/test_configuration_example.py
+test/test_loaders.py
 test/test_prerun.py
 test/test_runtime.py
 test/test_runtime_example.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-compat-2.2.7/src/ansible_compat.egg-info/requires.txt 
new/ansible-compat-3.0.1/src/ansible_compat.egg-info/requires.txt
--- old/ansible-compat-2.2.7/src/ansible_compat.egg-info/requires.txt   
2022-12-09 23:51:26.000000000 +0100
+++ new/ansible-compat-3.0.1/src/ansible_compat.egg-info/requires.txt   
2023-02-01 13:13:45.000000000 +0100
@@ -1,13 +1,23 @@
+ansible-core>=2.12
 packaging
 PyYAML
-subprocess-tee>=0.3.5
+subprocess-tee>=0.4.1
 jsonschema>=4.6.0
 
 [docs]
-sphinx-autobuild>=2021.3.14
-sphinx>=5.3.0
-sphinx_ansible_theme
-myst_parser
+argparse-manpage
+black
+cairosvg
+markdown-include
+mkdocs
+mkdocs-exclude
+mkdocs-material
+mkdocs-material-extensions
+mkdocstrings
+mkdocstrings-python
+pillow
+pymdown-extensions
+slugify
 
 [test]
 coverage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/test/test_config.py 
new/ansible-compat-3.0.1/test/test_config.py
--- old/ansible-compat-2.2.7/test/test_config.py        2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/test/test_config.py        2023-02-01 
13:13:27.000000000 +0100
@@ -6,12 +6,7 @@
 from _pytest.monkeypatch import MonkeyPatch
 from packaging.version import Version
 
-from ansible_compat.config import (
-    AnsibleConfig,
-    ansible_collections_path,
-    ansible_version,
-    parse_ansible_version,
-)
+from ansible_compat.config import AnsibleConfig, ansible_version, 
parse_ansible_version
 from ansible_compat.errors import InvalidPrerequisiteError, MissingAnsibleError
 
 
@@ -30,6 +25,9 @@
     assert isinstance(config.collections_path, list)
     assert config.collections_paths == config.collections_path
 
+    # check if we can access the special data member
+    assert config.ACTION_WARNINGS == config.data["ACTION_WARNINGS"]
+
     with pytest.raises(AttributeError):
         print(config.THIS_DOES_NOT_EXIST)
 
@@ -52,30 +50,6 @@
     assert new_config is not config
 
 
-def test_ansible_collections_path_210(monkeypatch: MonkeyPatch) -> None:
-    """Checks that ansible_collections_path works as expected correctly."""
-    monkeypatch.setenv("ANSIBLE_COLLECTIONS_PATHS", "foo")
-    monkeypatch.delenv("ANSIBLE_COLLECTIONS_PATH", False)
-    assert ansible_collections_path() == "ANSIBLE_COLLECTIONS_PATHS"
-    monkeypatch.delenv("ANSIBLE_COLLECTIONS_PATHS", False)
-    monkeypatch.setattr(
-        "ansible_compat.config.ansible_version", lambda x="2.10.0": Version(x)
-    )
-    assert ansible_collections_path() == "ANSIBLE_COLLECTIONS_PATH"
-
-
-def test_ansible_collections_path_29(monkeypatch: MonkeyPatch) -> None:
-    """Checks that ansible_collections_path works as expected correctly."""
-    monkeypatch.delenv("ANSIBLE_COLLECTIONS_PATHS", False)
-    monkeypatch.setenv("ANSIBLE_COLLECTIONS_PATH", "foo")
-    assert ansible_collections_path() == "ANSIBLE_COLLECTIONS_PATH"
-    monkeypatch.delenv("ANSIBLE_COLLECTIONS_PATH", False)
-    monkeypatch.setattr(
-        "ansible_compat.config.ansible_version", lambda x="2.9.0": Version(x)
-    )
-    assert ansible_collections_path() == "ANSIBLE_COLLECTIONS_PATHS"
-
-
 def test_parse_ansible_version_fail() -> None:
     """Checks that parse_ansible_version raises an error on invalid input."""
     with pytest.raises(
@@ -96,3 +70,13 @@
     ):
         # bypassing lru cache
         ansible_version.__wrapped__()
+
+
+def test_ansible_version() -> None:
+    """Validate ansible_version behavior."""
+    assert ansible_version() >= Version("1.0")
+
+
+def test_ansible_version_arg() -> None:
+    """Validate ansible_version behavior."""
+    assert ansible_version("2.0") >= Version("1.0")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/test/test_loaders.py 
new/ansible-compat-3.0.1/test/test_loaders.py
--- old/ansible-compat-2.2.7/test/test_loaders.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/ansible-compat-3.0.1/test/test_loaders.py       2023-02-01 
13:13:27.000000000 +0100
@@ -0,0 +1,7 @@
+"""Test for ansible_compat.loaders module."""
+from ansible_compat.loaders import colpath_from_path
+
+
+def test_colpath_from_path() -> None:
+    """Test colpath_from_path non existing path."""
+    assert colpath_from_path("/foo/bar/") is None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/test/test_runtime.py 
new/ansible-compat-3.0.1/test/test_runtime.py
--- old/ansible-compat-2.2.7/test/test_runtime.py       2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/test/test_runtime.py       2023-02-01 
13:13:27.000000000 +0100
@@ -66,6 +66,17 @@
 def test_runtime_require_module() -> None:
     """Check that require_module successful pass."""
     Runtime(require_module=True)
+    # Now we try to set the collection path, something to check if that is
+    # causing an exception, as 2.15 introduced new init code.
+    from ansible.utils.collection_loader import (  # pylint: 
disable=import-outside-toplevel
+        AnsibleCollectionConfig,
+    )
+
+    AnsibleCollectionConfig.playbook_paths = "."
+    # Calling it again in order to see that it does not produce UserWarning: 
AnsibleCollectionFinder has already been configured
+    # which is done by Ansible core 2.15+. We added special code inside Runtime
+    # that should avoid initializing twice and raise that warning.
+    Runtime(require_module=True)
 
 
 def test_runtime_version_fail_module(mocker: MockerFixture) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/test/test_schema.py 
new/ansible-compat-3.0.1/test/test_schema.py
--- old/ansible-compat-2.2.7/test/test_schema.py        2022-12-09 
23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/test/test_schema.py        2023-02-01 
13:13:27.000000000 +0100
@@ -5,7 +5,7 @@
 
 import pytest
 
-from ansible_compat.schema import JsonSchemaError, validate
+from ansible_compat.schema import JsonSchemaError, json_path, validate
 
 expected_results = [
     JsonSchemaError(
@@ -61,3 +61,8 @@
         assert (
             found_errors_json == expected
         ), f"inconsistent returns: {found_errors_json}"
+
+
+def test_json_path() -> None:
+    """Test json_path function."""
+    assert json_path(["a", 1, "b"]) == "$.a[1].b"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-compat-2.2.7/tox.ini 
new/ansible-compat-3.0.1/tox.ini
--- old/ansible-compat-2.2.7/tox.ini    2022-12-09 23:51:06.000000000 +0100
+++ new/ansible-compat-3.0.1/tox.ini    2023-02-01 13:13:27.000000000 +0100
@@ -1,11 +1,11 @@
 [tox]
-minversion = 4.0.0rc1
+minversion = 4.0.0
 envlist =
   lint
   pkg
   docs
   # matrix assumed current (implicit) is 2.13:
-  py38{,-ansible29}
+  py38-ansible212
   py39{,-devel}
   py310{,-devel}
   py311{,-devel}
@@ -17,24 +17,18 @@
 description =
   Run the tests with {basepython}
   devel: ansible devel branch
-  ansible29: ansible 2.9
-  ansible210: ansible-base 2.10
-  ansible211: ansible-base 2.11
   ansible212: ansible-core 2.12
   ansible213: ansible-core 2.13
   ansible214: ansible-core 2.14
 
 deps =
-  ansible29: ansible>=2.9,<2.10
-  ansible210: ansible-base>=2.10,<2.11
-  ansible211: ansible-core>=2.11,<2.12
   ansible212: ansible-core>=2.12,<2.13
   ansible213: ansible-core>=2.13,<2.14
-  ansible214: ansible-core>=2.14.0b1,<2.15
+  ansible214: ansible-core>=2.14,<2.15
 
   devel: ansible-core @ git+https://github.com/ansible/ansible.git  # GPLv3+
-  # avoid installing ansible-core on -devel, ansible29 and ansible210 envs:
-  !devel-!ansible29-!ansible210: ansible-core
+  # avoid installing ansible-core on -devel envs:
+  !devel: ansible-core
   --editable .[test]
 
 commands =
@@ -59,12 +53,13 @@
   LC_ALL
   LC_CTYPE
 setenv =
+  ANSIBLE_DEVEL_WARNING='false'
   COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}/.coverage.{envname}}
   PIP_DISABLE_PIP_VERSION_CHECK = 1
   PIP_CONSTRAINT = {toxinidir}/requirements.txt
   py38: PIP_CONSTRAINT = /dev/null
   PRE_COMMIT_COLOR = always
-  PYTEST_REQPASS = 78
+  PYTEST_REQPASS = 80
   FORCE_COLOR = 1
 allowlist_externals =
   ansible
@@ -125,20 +120,15 @@
   pip uninstall -y ansible-compat
 
 [testenv:py{39,38,37,36}]
-description = Run the tests with {basepython} ansible-core 2.11+
+description = Run the tests with {basepython} ansible-core 2.12+
 deps =
   {[testenv]deps}
-  ansible-core>=2.11
+  ansible-core>=2.12
 
 [testenv:docs]
 description = Build docs
 commands =
-  python -m sphinx \
-    -a -n -W \
-    --keep-going \
-    -b html  {tty:--color} \
-    -d "{toxworkdir}/doctree" \
-    docs/ "{toxworkdir}/html"
+  mkdocs {posargs:build} --strict
 deps =
   --editable .[docs]
 passenv = *

Reply via email to