diff --git a/dvc/utils/hydra.py b/dvc/utils/hydra.py index c83be6f2f..6e12cabdc 100644 --- a/dvc/utils/hydra.py +++ b/dvc/utils/hydra.py @@ -36,6 +36,8 @@ def compose_and_dump( with initialize_config_dir(config_dir, version_base=None): cfg = compose(config_name=config_name, overrides=overrides) + OmegaConf.resolve(cfg) + suffix = Path(output_file).suffix.lower() if suffix not in [".yml", ".yaml"]: dumper = DUMPERS[suffix] diff --git a/tests/func/utils/test_hydra.py b/tests/func/utils/test_hydra.py index d2f7679c4..cc677a1ac 100644 --- a/tests/func/utils/test_hydra.py +++ b/tests/func/utils/test_hydra.py @@ -178,7 +178,7 @@ def test_compose_and_dump(tmp_dir, suffix, overrides, expected): def test_compose_and_dump_yaml_handles_string(tmp_dir): - """Regression test for 8583""" + """Regression test for https://github.com/iterative/dvc/issues/8583""" from dvc.utils.hydra import compose_and_dump config = tmp_dir / "conf" / "config.yaml" @@ -189,6 +189,20 @@ def test_compose_and_dump_yaml_handles_string(tmp_dir): assert output_file.read_text() == "foo: 'no'\n" +def test_compose_and_dump_resolves_interpolation(tmp_dir): + """Regression test for https://github.com/iterative/dvc/issues/9196""" + from dvc.utils.hydra import compose_and_dump + + config = tmp_dir / "conf" / "config.yaml" + config.parent.mkdir() + config.dump({"data": {"root": "path/to/root", "raw": "${.root}/raw"}}) + output_file = tmp_dir / "params.yaml" + compose_and_dump(output_file, str(config.parent), "config", []) + assert output_file.parse() == { + "data": {"root": "path/to/root", "raw": "path/to/root/raw"} + } + + @pytest.mark.parametrize( "overrides, expected", [