diff --git a/conda_build/metadata.py b/conda_build/metadata.py index c254329d28..071036bd0c 100644 --- a/conda_build/metadata.py +++ b/conda_build/metadata.py @@ -1338,6 +1338,10 @@ def parse_until_resolved( ) self.final = final + if self.skip(): + self.final = True + return + # recursively parse again so long as each iteration has fewer undefined jinja variables undefined_jinja_vars = () while set(undefined_jinja_vars) != set(self.undefined_jinja_vars): diff --git a/news/5458-avoid-undefined-jinja-in-skipped b/news/5458-avoid-undefined-jinja-in-skipped new file mode 100644 index 0000000000..e1c232a65e --- /dev/null +++ b/news/5458-avoid-undefined-jinja-in-skipped @@ -0,0 +1,19 @@ +### Enhancements + +* + +### Bug fixes + +* Allow undefined jinja variables when a particular metadata block evaluates as skipped. (#5458) + +### Deprecations + +* + +### Docs + +* + +### Other + +* diff --git a/tests/test_metadata.py b/tests/test_metadata.py index b8dc9df8e4..99b26dd424 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -623,3 +623,27 @@ def test_parse_until_resolved(testing_metadata: MetaData, tmp_path: Path) -> Non match=("Failed to render jinja template"), ): testing_metadata.parse_until_resolved() + + +def test_parse_until_resolved_skip_avoids_undefined_jinja( + testing_metadata: MetaData, tmp_path: Path +) -> None: + (recipe := tmp_path / (name := "meta.yaml")).write_text( + """ +package: + name: dummy + version: {{version}} +build: + skip: True +""" + ) + testing_metadata._meta_path = recipe + testing_metadata._meta_name = name + + # because skip is True, we should not error out here - so no exception should be raised + try: + testing_metadata.parse_until_resolved() + except CondaBuildUserError: + pytest.fail( + "Undefined variable caused error, even though this build is skipped" + )