diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 05:17:02 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 05:17:02 +0000 |
commit | 90762dda6bc343cc68c736ec0e4368b2909c2a12 (patch) | |
tree | 522fbd669fac12e8db704af129aaf91b6e9dfa96 | |
parent | Releasing progress-linux version 4.1.12-1~progress7.99u1. (diff) | |
download | python-ansible-compat-90762dda6bc343cc68c736ec0e4368b2909c2a12.tar.xz python-ansible-compat-90762dda6bc343cc68c736ec0e4368b2909c2a12.zip |
Merging upstream version 24.5.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r-- | .config/constraints.txt (renamed from requirements.txt) | 261 | ||||
-rw-r--r-- | .config/requirements-docs.in | 3 | ||||
-rw-r--r-- | .config/requirements-test.in | 5 | ||||
-rw-r--r-- | .config/requirements.in | 7 | ||||
-rw-r--r-- | .git_archival.txt | 8 | ||||
-rw-r--r-- | .github/dependabot.yml | 9 | ||||
-rw-r--r-- | .github/workflows/ack.yml | 2 | ||||
-rw-r--r-- | .github/workflows/push.yml | 4 | ||||
-rw-r--r-- | .github/workflows/release.yml | 6 | ||||
-rw-r--r-- | .github/workflows/tox.yml | 15 | ||||
-rw-r--r-- | .pre-commit-config.yaml | 20 | ||||
-rw-r--r-- | .readthedocs.yml | 2 | ||||
-rw-r--r-- | pyproject.toml | 33 | ||||
-rw-r--r-- | src/ansible_compat/runtime.py | 23 | ||||
-rw-r--r-- | test/test_runtime.py | 13 | ||||
-rw-r--r-- | tox.ini | 4 |
16 files changed, 207 insertions, 208 deletions
diff --git a/requirements.txt b/.config/constraints.txt index 1d4ed20..17f80d3 100644 --- a/requirements.txt +++ b/.config/constraints.txt @@ -2,7 +2,7 @@ # 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 +# pip-compile --all-extras --output-file=.config/constraints.txt --strip-extras --unsafe-package=ansible-core --unsafe-package=resolvelib --unsafe-package=typing_extensions pyproject.toml # argparse-manpage==4.5 # via ansible-compat (pyproject.toml) @@ -10,324 +10,265 @@ attrs==23.2.0 # via # jsonschema # referencing -babel==2.13.1 - # via - # mkdocs-ansible - # mkdocs-material -beautifulsoup4==4.12.2 +babel==2.15.0 + # via mkdocs-material +beautifulsoup4==4.12.3 # via # linkchecker - # mkdocs-ansible # mkdocs-htmlproofer-plugin -black==23.12.1 +black==24.4.2 # via ansible-compat (pyproject.toml) -build==1.0.3 +build==1.2.1 # via pip-tools -cairocffi==1.6.1 - # via - # cairosvg - # mkdocs-ansible +cairocffi==1.7.0 + # via cairosvg cairosvg==2.7.1 # via mkdocs-ansible -certifi==2023.11.17 - # via - # mkdocs-ansible - # requests +certifi==2024.2.2 + # via requests cffi==1.16.0 # via # cairocffi # cryptography - # mkdocs-ansible charset-normalizer==3.3.2 - # via - # mkdocs-ansible - # requests + # via requests click==8.1.7 # via # black # mkdocs - # mkdocs-ansible # mkdocstrings # pip-tools colorama==0.4.6 # via # griffe - # mkdocs-ansible # mkdocs-material -coverage==7.4.0 +coverage==7.5.1 # via ansible-compat (pyproject.toml) -cryptography==41.0.7 +cryptography==42.0.7 # via ansible-core csscompressor==0.9.5 - # via - # mkdocs-ansible - # mkdocs-minify-plugin + # via mkdocs-minify-plugin cssselect2==0.7.0 - # via - # cairosvg - # mkdocs-ansible + # via cairosvg defusedxml==0.7.1 - # via - # cairosvg - # mkdocs-ansible -dnspython==2.4.2 - # via - # linkchecker - # mkdocs-ansible -exceptiongroup==1.2.0 + # via cairosvg +dnspython==2.6.1 + # via linkchecker +exceptiongroup==1.2.1 # via pytest ghp-import==2.1.0 - # via - # mkdocs - # mkdocs-ansible -griffe==0.38.0 - # via - # mkdocs-ansible - # mkdocstrings-python + # via mkdocs +griffe==0.44.0 + # via mkdocstrings-python htmlmin2==0.1.13 - # via - # mkdocs-ansible - # mkdocs-minify-plugin -idna==3.4 - # via - # mkdocs-ansible - # requests -importlib-metadata==6.8.0 - # via mkdocs-ansible + # via mkdocs-minify-plugin +idna==3.7 + # via requests iniconfig==2.0.0 # via pytest -jinja2==3.1.2 +jinja2==3.1.4 # via # ansible-core # mkdocs - # mkdocs-ansible + # mkdocs-macros-plugin # mkdocs-material # mkdocstrings jsmin==3.0.1 - # via - # mkdocs-ansible - # mkdocs-minify-plugin -jsonschema==4.20.0 + # via mkdocs-minify-plugin +jsonschema==4.22.0 # via ansible-compat (pyproject.toml) jsonschema-specifications==2023.12.1 # via jsonschema -linkchecker==10.3.0 +linkchecker==10.4.0 # via mkdocs-ansible -markdown==3.5.1 +markdown==3.6 # via # markdown-include # mkdocs - # mkdocs-ansible # mkdocs-autorefs # mkdocs-htmlproofer-plugin # mkdocs-material # mkdocstrings # pymdown-extensions -markdown-exec==1.8.0 +markdown-exec==1.8.1 # via mkdocs-ansible markdown-include==0.8.1 # via mkdocs-ansible -markupsafe==2.1.3 +markupsafe==2.1.5 # via # jinja2 # mkdocs - # mkdocs-ansible + # mkdocs-autorefs # mkdocstrings mergedeep==1.3.4 # via # mkdocs - # mkdocs-ansible -mkdocs==1.5.3 + # mkdocs-get-deps +mkdocs==1.6.0 # via # mkdocs-ansible # mkdocs-autorefs # mkdocs-gen-files # mkdocs-htmlproofer-plugin + # mkdocs-macros-plugin # mkdocs-material # mkdocs-minify-plugin # mkdocs-monorepo-plugin # mkdocstrings -mkdocs-ansible==0.2.1 - # via - # ansible-compat (pyproject.toml) - # mkdocs-ansible -mkdocs-autorefs==0.5.0 - # via - # mkdocs-ansible - # mkdocstrings +mkdocs-ansible==24.3.1 + # via ansible-compat (pyproject.toml) +mkdocs-autorefs==1.0.1 + # via mkdocstrings mkdocs-gen-files==0.5.0 # via mkdocs-ansible -mkdocs-htmlproofer-plugin==1.0.0 +mkdocs-get-deps==0.2.0 + # via mkdocs +mkdocs-htmlproofer-plugin==1.2.1 + # via mkdocs-ansible +mkdocs-macros-plugin==1.0.5 # via mkdocs-ansible -mkdocs-material==9.5.3 +mkdocs-material==9.5.21 # via mkdocs-ansible mkdocs-material-extensions==1.3.1 # via # mkdocs-ansible # mkdocs-material -mkdocs-minify-plugin==0.7.2 +mkdocs-minify-plugin==0.8.0 # via mkdocs-ansible mkdocs-monorepo-plugin==1.1.0 # via mkdocs-ansible -mkdocstrings==0.24.0 +mkdocstrings==0.25.1 # via # mkdocs-ansible # mkdocstrings-python -mkdocstrings-python==1.7.5 +mkdocstrings-python==1.10.0 # via mkdocs-ansible mypy-extensions==1.0.0 # via black -packaging==23.2 +packaging==24.0 # via # ansible-compat (pyproject.toml) # ansible-core # black # build # mkdocs - # mkdocs-ansible + # pipdeptree # pytest paginate==0.5.6 - # via - # mkdocs-ansible - # mkdocs-material -pathspec==0.11.2 + # via mkdocs-material +pathspec==0.12.1 # via # black # mkdocs - # mkdocs-ansible -pillow==10.2.0 +pillow==10.3.0 # via # cairosvg # mkdocs-ansible -pip==23.3.2 - # via pip-tools -pip-tools==7.3.0 +pip==24.0 + # via + # pip-tools + # pipdeptree +pip-tools==7.4.1 # via ansible-compat (pyproject.toml) -pipdeptree==2.13.1 +pipdeptree==2.20.0 # via mkdocs-ansible -platformdirs==4.0.0 +platformdirs==4.2.1 # via # black - # mkdocs - # mkdocs-ansible + # mkdocs-get-deps # mkdocstrings -pluggy==1.3.0 +pluggy==1.5.0 # via pytest -pycparser==2.21 - # via - # cffi - # mkdocs-ansible -pygments==2.17.1 - # via - # mkdocs-ansible - # mkdocs-material -pymdown-extensions==10.7 +pycparser==2.22 + # via cffi +pygments==2.18.0 + # via mkdocs-material +pymdown-extensions==10.8.1 # via # markdown-exec # mkdocs-ansible # mkdocs-material # mkdocstrings -pyproject-hooks==1.0.0 - # via build -pytest==7.4.4 +pyproject-hooks==1.1.0 + # via + # build + # pip-tools +pytest==8.2.0 # via # ansible-compat (pyproject.toml) # pytest-mock # pytest-plus -pytest-mock==3.12.0 +pytest-mock==3.14.0 # via ansible-compat (pyproject.toml) -pytest-plus==0.6.1 +pytest-plus==0.7.0 # via ansible-compat (pyproject.toml) -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # ghp-import - # mkdocs-ansible -python-slugify==8.0.1 - # via - # mkdocs-ansible - # mkdocs-monorepo-plugin + # mkdocs-macros-plugin +python-slugify==8.0.4 + # via mkdocs-monorepo-plugin pyyaml==6.0.1 # via # ansible-compat (pyproject.toml) # ansible-core # mkdocs - # mkdocs-ansible + # mkdocs-get-deps + # mkdocs-macros-plugin # pymdown-extensions # pyyaml-env-tag pyyaml-env-tag==0.1 - # via - # mkdocs - # mkdocs-ansible -referencing==0.32.1 + # via mkdocs +referencing==0.35.1 # via # jsonschema # jsonschema-specifications -regex==2023.10.3 - # via - # mkdocs-ansible - # mkdocs-material +regex==2024.4.28 + # via mkdocs-material requests==2.31.0 # via # linkchecker - # mkdocs-ansible # mkdocs-htmlproofer-plugin # mkdocs-material -rpds-py==0.16.2 +rpds-py==0.18.1 # via # jsonschema # referencing -setuptools==69.0.3 +setuptools==69.5.1 # via pip-tools six==1.16.0 - # via - # mkdocs-ansible - # python-dateutil + # via python-dateutil soupsieve==2.5 - # via - # beautifulsoup4 - # mkdocs-ansible + # via beautifulsoup4 subprocess-tee==0.4.1 # via ansible-compat (pyproject.toml) +termcolor==2.4.0 + # via mkdocs-macros-plugin text-unidecode==1.3 - # via - # mkdocs-ansible - # python-slugify -tinycss2==1.2.1 + # via python-slugify +tinycss2==1.3.0 # via # cairosvg # cssselect2 - # mkdocs-ansible tomli==2.0.1 # via # argparse-manpage # black # build # pip-tools - # pyproject-hooks # pytest -typing-extensions==4.8.0 - # via - # black - # mkdocs-ansible -urllib3==2.1.0 - # via - # mkdocs-ansible - # requests -watchdog==3.0.0 - # via - # mkdocs - # mkdocs-ansible +typing-extensions==4.11.0 + # via black +urllib3==2.2.1 + # via requests +watchdog==4.0.0 + # via mkdocs webencodings==0.5.1 # via # cssselect2 - # mkdocs-ansible # tinycss2 -wheel==0.42.0 +wheel==0.43.0 # via pip-tools -zipp==3.17.0 - # via - # importlib-metadata - # mkdocs-ansible # The following packages are considered to be unsafe in a requirements file: # ansible-core diff --git a/.config/requirements-docs.in b/.config/requirements-docs.in new file mode 100644 index 0000000..e4b17c4 --- /dev/null +++ b/.config/requirements-docs.in @@ -0,0 +1,3 @@ +argparse-manpage +black +mkdocs-ansible>=24.3.1 diff --git a/.config/requirements-test.in b/.config/requirements-test.in new file mode 100644 index 0000000..85d4c2d --- /dev/null +++ b/.config/requirements-test.in @@ -0,0 +1,5 @@ +coverage +pip-tools +pytest-mock +pytest-plus>=0.6.1 +pytest>=7.2.0 diff --git a/.config/requirements.in b/.config/requirements.in new file mode 100644 index 0000000..29c2662 --- /dev/null +++ b/.config/requirements.in @@ -0,0 +1,7 @@ +# https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html +ansible-core>=2.12 +packaging +PyYAML +subprocess-tee>=0.4.1 +jsonschema>=4.6.0 +typing-extensions>=4.5.0;python_version<'3.10' diff --git a/.git_archival.txt b/.git_archival.txt index d6cf91b..1f151b2 100644 --- a/.git_archival.txt +++ b/.git_archival.txt @@ -1,4 +1,4 @@ -node: 1ff572c26b20363436af440921fec1b3d6d1d19f -node-date: 2024-03-11T15:50:46+00:00 -describe-name: v4.1.12 -ref-names: tag: v4.1.12 +node: 77f4aa656f20def28864421bd8a3c94fceeb61b4 +node-date: 2024-05-08T17:33:47+01:00 +describe-name: v24.5.1 +ref-names: HEAD -> main, tag: v24.5.1a0, tag: v24.5.1 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 45874a7..3d396cc 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,10 +1,8 @@ --- -# Until bug below is sorted we will not allow dependabot to run by itself -# https://github.com/dependabot/dependabot-core/issues/369 version: 2 updates: - package-ecosystem: pip - directory: / + directory: ".config" schedule: day: sunday interval: weekly @@ -12,7 +10,10 @@ updates: - dependabot-deps-updates - skip-changelog versioning-strategy: lockfile-only - open-pull-requests-limit: 0 # neutered + groups: + dependencies: + patterns: + - "*" - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/.github/workflows/ack.yml b/.github/workflows/ack.yml index 1a73a9d..376206b 100644 --- a/.github/workflows/ack.yml +++ b/.github/workflows/ack.yml @@ -1,4 +1,4 @@ -# See https://github.com/ansible/devtools/blob/main/.github/workflows/ack.yml +# See https://github.com/ansible/team-devtools/blob/main/.github/workflows/ack.yml name: ack on: pull_request_target: diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index c0c8e95..5b400b4 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,4 +1,4 @@ -# See https://github.com/ansible/devtools/blob/main/.github/workflows/push.yml +# See https://github.com/ansible/team-devtools/blob/main/.github/workflows/push.yml name: push on: push: @@ -9,4 +9,4 @@ on: jobs: ack: - uses: ansible/devtools/.github/workflows/push.yml@main + uses: ansible/team-devtools/.github/workflows/push.yml@main diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b05de88..e207cb2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,12 +5,8 @@ on: types: [published] jobs: - before-release: - uses: ansible/ansible-compat/.github/workflows/tox.yml@main - release: name: release ${{ github.event.ref }} - needs: before-release # unable to use environment with uses/with, basically cannot reuse release pipelines environment: release runs-on: ubuntu-22.04 @@ -34,6 +30,6 @@ jobs: with: fetch-depth: 0 # needed by setuptools-scm - name: Build dists - run: python -m tox -e pkg + run: python3 -m tox -e pkg - name: Publish to pypi.org uses: pypa/gh-action-pypi-publish@unstable/v1 diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index c767c48..26df89b 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -78,15 +78,15 @@ jobs: 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.passed_name }} + run: python3 -m tox --notest --skip-missing-interpreters false -vv -e ${{ matrix.passed_name }} - name: Test with tox - run: python -m tox -e ${{ matrix.passed_name }} + run: python3 -m tox -e ${{ matrix.passed_name }} - name: Archive logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: logs.zip + name: logs-${{ matrix.name }}.zip path: .tox/**/log/ - name: Upload coverage data @@ -105,6 +105,13 @@ jobs: - build runs-on: ubuntu-22.04 steps: + - name: Merge logs into a single archive + uses: actions/upload-artifact/merge@v4 + with: + name: logs.zip + pattern: logs*.zip + delete-merged: true + - name: Check codecov.io status if: github.event_name == 'pull_request' uses: coactions/codecov-status@main diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 57030ab..e8fed89 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ exclude: | )$ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.2.0" + rev: "v0.4.3" hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] @@ -40,7 +40,7 @@ repos: - prettier-plugin-toml - prettier-plugin-sort-json - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v4.5.0 + rev: v4.6.0 hooks: - id: end-of-file-fixer - id: trailing-whitespace @@ -60,19 +60,19 @@ repos: hooks: - id: codespell - repo: https://github.com/adrienverge/yamllint.git - rev: v1.33.0 + rev: v1.35.1 hooks: - id: yamllint files: \.(yaml|yml)$ types: [file, yaml] entry: yamllint --strict - repo: https://github.com/psf/black - rev: 24.1.1 + rev: 24.4.2 hooks: - id: black language_version: python3 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.8.0 + rev: v1.10.0 hooks: - id: mypy # empty args needed in order to match mypy cli behavior @@ -89,7 +89,7 @@ repos: - types-pkg_resources - types-jsonschema>=4.4.9 - repo: https://github.com/pycqa/pylint - rev: v3.0.3 + rev: v3.1.0 hooks: - id: pylint additional_dependencies: @@ -104,20 +104,20 @@ repos: name: Upgrade constraints files and requirements files: ^(pyproject\.toml|requirements\.txt)$ language: python - entry: python -m piptools compile --resolver=backtracking --upgrade -q --strip-extras --extra docs --extra test --output-file=requirements.txt pyproject.toml --unsafe-package ansible-core --unsafe-package resolvelib --unsafe-package typing_extensions + entry: python3 -m piptools compile --resolver=backtracking --upgrade -q --strip-extras --all-extras --output-file=.config/constraints.txt pyproject.toml --unsafe-package ansible-core --unsafe-package resolvelib --unsafe-package typing_extensions pass_filenames: false stages: - manual additional_dependencies: - - pip-tools>=6.11.0 + - pip-tools>=7.4.1 - id: pip-compile name: Check constraints files and requirements files: ^(pyproject\.toml|requirements\.txt)$ language: python - entry: python -m piptools compile --resolver=backtracking -q --strip-extras --extra docs --extra test --output-file=requirements.txt pyproject.toml --unsafe-package ansible-core --unsafe-package resolvelib --unsafe-package typing_extensions + entry: python3 -m piptools compile --resolver=backtracking -q --strip-extras --all-extras --output-file=.config/constraints.txt pyproject.toml --unsafe-package ansible-core --unsafe-package resolvelib --unsafe-package typing_extensions pass_filenames: false additional_dependencies: - - pip-tools>=6.11.0 + - pip-tools>=7.4.1 - repo: https://github.com/packit/pre-commit-hooks rev: v1.2.0 hooks: diff --git a/.readthedocs.yml b/.readthedocs.yml index a36c386..66a051a 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -36,7 +36,7 @@ python: version: "3.9" install: # On https://readthedocs.org/dashboard/ansible-lint/environmentvariables/ we - # do have PIP_CONSTRAINTS=requirements.txt which ensures we install only + # do have PIP_CONSTRAINTS=.config/constraints.txt which ensures we install only # pinned requirements that that we know to be working. - method: pip path: . diff --git a/pyproject.toml b/pyproject.toml index 0e7d843..51b6a80 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta" [project] # https://peps.python.org/pep-0621/#readme requires-python = ">=3.9" -dynamic = ["version"] +dynamic = ["version", "dependencies", "optional-dependencies"] name = "ansible-compat" description = "Ansible compatibility goodies" readme = "README.md" @@ -36,23 +36,10 @@ classifiers = [ "Topic :: Utilities" ] keywords = ["ansible"] -dependencies = [ - # https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html - "ansible-core>=2.12", - "packaging", - "PyYAML", - "subprocess-tee>=0.4.1", - "jsonschema>=4.6.0", - "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/" +documentation = "https://ansible.readthedocs.io/projects/compat/" repository = "https://github.com/ansible/ansible-compat" changelog = "https://github.com/ansible/ansible-compat/releases" @@ -160,6 +147,22 @@ known-third-party = ["packaging"] [tool.ruff.pydocstyle] convention = "pep257" +[tool.setuptools.dynamic] +dependencies = {file = [".config/requirements.in"]} +optional-dependencies.docs = {file = [".config/requirements-docs.in"]} +optional-dependencies.test = {file = [".config/requirements-test.in"]} + [tool.setuptools_scm] local_scheme = "no-local-version" +tag_regex = "^(?P<prefix>v)?(?P<version>\\d+[^\\+]*)(?P<suffix>.*)?$" write_to = "src/ansible_compat/_version.py" +# To prevent accidental pick of mobile version tags such 'v6' +git_describe_command = [ + "git", + "describe", + "--dirty", + "--tags", + "--long", + "--match", + "v*.*" +] diff --git a/src/ansible_compat/runtime.py b/src/ansible_compat/runtime.py index 4556b7e..fbeaa98 100644 --- a/src/ansible_compat/runtime.py +++ b/src/ansible_compat/runtime.py @@ -156,6 +156,7 @@ class Runtime: # to do it multiple tilmes will cause runtime warnings from within ansible-core initialized: bool = False plugins: Plugins + _has_playbook_cache: dict[tuple[str, Path | None], bool] = {} def __init__( self, @@ -432,6 +433,28 @@ class Runtime: return False return True + def has_playbook(self, playbook: str, *, basedir: Path | None = None) -> bool: + """Return true if ansible can load a given playbook. + + This is also used for checking if playbooks from within collections + are present and if they pass syntax check. + """ + if (playbook, basedir) in self._has_playbook_cache: + return self._has_playbook_cache[playbook, basedir] + + proc = self.run(["ansible-playbook", "--syntax-check", playbook], cwd=basedir) + result = proc.returncode == 0 + if not result: + if not basedir: + basedir = Path() + msg = f"has_playbook returned false for '{basedir / playbook}' due to syntax check returning {proc.returncode}" + logging.debug(msg) + + # cache the result + self._has_playbook_cache[playbook, basedir] = result + + return result + def install_collection( self, collection: str | Path, diff --git a/test/test_runtime.py b/test/test_runtime.py index 6a110d4..0823f60 100644 --- a/test/test_runtime.py +++ b/test/test_runtime.py @@ -893,3 +893,16 @@ def test_get_galaxy_role_name_invalid() -> None: "role_name": False, # <-- invalid data, should be string } assert _get_galaxy_role_name(galaxy_infos) == "" + + +def test_runtime_has_playbook() -> None: + """Tests has_playbook method.""" + runtime = Runtime(require_module=True) + + assert not runtime.has_playbook("this-does-not-exist.yml") + # call twice to ensure cache is used: + assert not runtime.has_playbook("this-does-not-exist.yml") + + assert not runtime.has_playbook("this-does-not-exist.yml", basedir=Path()) + # this is part of community.molecule collection + assert runtime.has_playbook("community.molecule.validate.yml") @@ -85,9 +85,9 @@ setenv = COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}/.coverage.{envname}} COVERAGE_PROCESS_START={toxinidir}/pyproject.toml PIP_DISABLE_PIP_VERSION_CHECK = 1 - PIP_CONSTRAINT = {toxinidir}/requirements.txt + PIP_CONSTRAINT = {toxinidir}/.config/constraints.txt PRE_COMMIT_COLOR = always - PYTEST_REQPASS = 93 + PYTEST_REQPASS = 94 FORCE_COLOR = 1 allowlist_externals = ansible |