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
This commit is contained in:
David de la Iglesia Castro
2022-11-28 13:13:04 +01:00
parent e95ae5613d
commit 8124396218
3 changed files with 37 additions and 2 deletions
+2
View File
@@ -4,6 +4,8 @@ DVC_PAGER = "DVC_PAGER"
DVC_ROOT = "DVC_ROOT" DVC_ROOT = "DVC_ROOT"
DVCLIVE_RESUME = "DVCLIVE_RESUME" DVCLIVE_RESUME = "DVCLIVE_RESUME"
DVC_IGNORE_ISATTY = "DVC_IGNORE_ISATTY" 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_GIT_REMOTE = "DVC_EXP_GIT_REMOTE"
DVC_EXP_AUTO_PUSH = "DVC_EXP_AUTO_PUSH" DVC_EXP_AUTO_PUSH = "DVC_EXP_AUTO_PUSH"
DVC_NO_ANALYTICS = "DVC_NO_ANALYTICS" DVC_NO_ANALYTICS = "DVC_NO_ANALYTICS"
+8 -2
View File
@@ -20,7 +20,7 @@ from typing import (
from funcy import cached_property, retry from funcy import cached_property, retry
from dvc.dependency import ParamsDependency 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.exceptions import DvcException
from dvc.lock import LockError from dvc.lock import LockError
from dvc.ui import ui from dvc.ui import ui
@@ -396,7 +396,13 @@ class BaseStashQueue(ABC):
) )
# save additional repro command line arguments # 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) self._pack_args(*args, run_env=run_env, **kwargs)
# save experiment as a stash commit # save experiment as a stash commit
@@ -2,6 +2,7 @@ import itertools
import logging import logging
import os import os
import stat import stat
from textwrap import dedent
import pytest import pytest
from funcy import first from funcy import first
@@ -682,3 +683,29 @@ def test_experiments_workspace_not_log_exception(caplog, dvc, scm):
dvc.experiments.run() dvc.experiments.run()
assert not caplog.text 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"