diff --git a/src/ansible_dev_environment/utils.py b/src/ansible_dev_environment/utils.py index 9cc2d62..66616ce 100644 --- a/src/ansible_dev_environment/utils.py +++ b/src/ansible_dev_environment/utils.py @@ -280,12 +280,15 @@ def collect_manifests( # noqa: C901 def builder_introspect(config: Config, output: Output) -> None: """Introspect a collection. + Use the sys executable to run builder, since it is a direct dependency + it should be accessible to the current interpreter. + Args: config: The configuration object. output: The output object. """ command = ( - f"ansible-builder introspect {config.site_pkg_path}" + f"{sys.executable} -m ansible_builder introspect {config.site_pkg_path}" f" --write-pip {config.discovered_python_reqs}" f" --write-bindep {config.discovered_bindep_reqs}" " --sanitize" @@ -316,7 +319,7 @@ def builder_introspect(config: Config, output: Output) -> None: ) except subprocess.CalledProcessError as exc: err = f"Failed to discover requirements: {exc} {exc.stderr}" - logger.critical(err) + output.critical(err) if not config.discovered_python_reqs.exists(): config.discovered_python_reqs.touch() diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index a51e8d2..0494e07 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -13,7 +13,7 @@ ) from ansible_dev_environment.config import Config from ansible_dev_environment.output import Output -from ansible_dev_environment.utils import TermFeatures +from ansible_dev_environment.utils import TermFeatures, builder_introspect term_features = TermFeatures(color=False, links=False) @@ -123,3 +123,43 @@ def test_parse_collection_request(scenario: tuple[str, Collection | None]) -> No parse_collection_request(string=string, config=config, output=output) else: assert parse_collection_request(string=string, config=config, output=output) == spec + + +def test_builder_found(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + """Test that builder is found. + + Args: + tmp_path: A temporary path + monkeypatch: The pytest Monkeypatch fixture + + Raises: + AssertionError: if either file is not found + """ + + @property # type: ignore[misc] + def cache_dir(_self: Config) -> Path: + """Return a temporary cache directory. + + Args: + _self: The Config object + + Returns: + A temporary cache directory. + """ + return tmp_path + + monkeypatch.setattr(Config, "cache_dir", cache_dir) + + args = Namespace(venv=str(tmp_path / ".venv"), system_site_packages=False, verbose=0) + + cfg = Config( + args=args, + term_features=term_features, + output=output, + ) + cfg.init() + + builder_introspect(cfg, output) + + assert cfg.discovered_bindep_reqs.exists() is True + assert cfg.discovered_python_reqs.exists() is True