From 8124396218ed7e77662dbfeac2a477782333c559 Mon Sep 17 00:00:00 2001 From: David de la Iglesia Castro Date: Fri, 25 Nov 2022 20:04:35 +0100 Subject: [PATCH] exp: Expose baseline and name via `run_env`. Required by DVCLive for the experiments onboarding and live metrics features. Related (not sure if closes): https://github.com/iterative/dvc/issues/6668 --- dvc/env.py | 2 ++ dvc/repo/experiments/queue/base.py | 10 ++++++-- tests/func/experiments/test_experiments.py | 27 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/dvc/env.py b/dvc/env.py index 0d9186ac8..dac52bf4e 100644 --- a/dvc/env.py +++ b/dvc/env.py @@ -4,6 +4,8 @@ DVC_PAGER = "DVC_PAGER" DVC_ROOT = "DVC_ROOT" DVCLIVE_RESUME = "DVCLIVE_RESUME" DVC_IGNORE_ISATTY = "DVC_IGNORE_ISATTY" +DVC_EXP_BASELINE_REV = "DVC_EXP_BASELINE_REV" +DVC_EXP_NAME = "DVC_EXP_NAME" DVC_EXP_GIT_REMOTE = "DVC_EXP_GIT_REMOTE" DVC_EXP_AUTO_PUSH = "DVC_EXP_AUTO_PUSH" DVC_NO_ANALYTICS = "DVC_NO_ANALYTICS" diff --git a/dvc/repo/experiments/queue/base.py b/dvc/repo/experiments/queue/base.py index b7e15b53a..4cebb19ac 100644 --- a/dvc/repo/experiments/queue/base.py +++ b/dvc/repo/experiments/queue/base.py @@ -20,7 +20,7 @@ from typing import ( from funcy import cached_property, retry from dvc.dependency import ParamsDependency -from dvc.env import DVCLIVE_RESUME +from dvc.env import DVC_EXP_BASELINE_REV, DVC_EXP_NAME, DVCLIVE_RESUME from dvc.exceptions import DvcException from dvc.lock import LockError from dvc.ui import ui @@ -396,7 +396,13 @@ class BaseStashQueue(ABC): ) # save additional repro command line arguments - run_env = {DVCLIVE_RESUME: "1"} if resume_rev else {} + run_env = { + DVC_EXP_BASELINE_REV: baseline_rev, + } + if name: + run_env[DVC_EXP_NAME] = name + if resume_rev: + run_env[DVCLIVE_RESUME] = "1" self._pack_args(*args, run_env=run_env, **kwargs) # save experiment as a stash commit diff --git a/tests/func/experiments/test_experiments.py b/tests/func/experiments/test_experiments.py index 12d41aac0..d8b5606df 100644 --- a/tests/func/experiments/test_experiments.py +++ b/tests/func/experiments/test_experiments.py @@ -2,6 +2,7 @@ import itertools import logging import os import stat +from textwrap import dedent import pytest from funcy import first @@ -682,3 +683,29 @@ def test_experiments_workspace_not_log_exception(caplog, dvc, scm): dvc.experiments.run() assert not caplog.text + + +def test_run_env(tmp_dir, dvc, scm): + dump_run_env = dedent( + """\ + import os + from dvc.env import DVC_EXP_BASELINE_REV, DVC_EXP_NAME + with open("DVC_EXP_BASELINE_REV", "w") as f: + f.write(os.environ.get(DVC_EXP_BASELINE_REV, "")) + with open("DVC_EXP_NAME", "w") as f: + f.write(os.environ.get(DVC_EXP_NAME, "")) + """ + ) + (tmp_dir / "dump_run_env.py").write_text(dump_run_env) + baseline = scm.get_rev() + dvc.stage.add( + cmd="python dump_run_env.py", + name="run_env", + ) + dvc.experiments.run() + assert (tmp_dir / "DVC_EXP_BASELINE_REV").read_text().strip() == baseline + assert (tmp_dir / "DVC_EXP_NAME").read_text().strip() == "" + + dvc.experiments.run(name="foo") + assert (tmp_dir / "DVC_EXP_BASELINE_REV").read_text().strip() == baseline + assert (tmp_dir / "DVC_EXP_NAME").read_text().strip() == "foo"