summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/changelog/2259.bugfix.rst2
-rw-r--r--src/tox/tox_env/api.py3
-rw-r--r--src/tox/tox_env/python/virtual_env/api.py6
-rw-r--r--tests/session/cmd/test_sequential.py20
4 files changed, 31 insertions, 0 deletions
diff --git a/docs/changelog/2259.bugfix.rst b/docs/changelog/2259.bugfix.rst
new file mode 100644
index 00000000..324b8e50
--- /dev/null
+++ b/docs/changelog/2259.bugfix.rst
@@ -0,0 +1,2 @@
+Insert ``TOX_WORK_DIR``, ``TOX_ENV_NAME``, ``TOX_ENV_DIR`` and ``VIRTUAL_ENV`` environment variables for each tox
+environments environment variables to keep contract with tox version 3 - by :user:`gaborbernat`.
diff --git a/src/tox/tox_env/api.py b/src/tox/tox_env/api.py
index 1dc7650f..42b71daf 100644
--- a/src/tox/tox_env/api.py
+++ b/src/tox/tox_env/api.py
@@ -308,6 +308,9 @@ class ToxEnv(ABC):
result["PATH"] = self._make_path()
for key in set_env:
result[key] = set_env.load(key)
+ result["TOX_ENV_NAME"] = self.name
+ result["TOX_WORK_DIR"] = str(self.core["work_dir"])
+ result["TOX_ENV_DIR"] = str(self.conf["env_dir"])
return result
@staticmethod
diff --git a/src/tox/tox_env/python/virtual_env/api.py b/src/tox/tox_env/python/virtual_env/api.py
index 8f14baf4..ad22fc66 100644
--- a/src/tox/tox_env/python/virtual_env/api.py
+++ b/src/tox/tox_env/python/virtual_env/api.py
@@ -161,3 +161,9 @@ class VirtualEnv(Python, ABC):
@property
def runs_on_platform(self) -> str:
return sys.platform
+
+ @property
+ def environment_variables(self) -> dict[str, str]:
+ environment_variables = super().environment_variables
+ environment_variables["VIRTUAL_ENV"] = str(self.conf["env_dir"])
+ return environment_variables
diff --git a/tests/session/cmd/test_sequential.py b/tests/session/cmd/test_sequential.py
index 7c51dde8..ea925f8a 100644
--- a/tests/session/cmd/test_sequential.py
+++ b/tests/session/cmd/test_sequential.py
@@ -1,6 +1,7 @@
from __future__ import annotations
import json
+import os
import re
import sys
from pathlib import Path
@@ -417,3 +418,22 @@ def test_sequential_clears_pkg_at_most_once(tox_project: ToxProjectCreator, demo
project = tox_project({"tox.ini": ""})
result = project.run("r", "--root", str(demo_pkg_inline), "-e", "a,b", "-r")
result.assert_success()
+
+
+def test_sequential_inserted_env_vars(tox_project: ToxProjectCreator, demo_pkg_inline: Path) -> None:
+ ini = """
+ [testenv]
+ commands=python -c 'import os; [print(f"{k}={v}") for k, v in os.environ.items() if \
+ k.startswith("TOX_") or k == "VIRTUAL_ENV"]'
+ """
+ project = tox_project({"tox.ini": ini})
+ result = project.run("r", "--root", str(demo_pkg_inline))
+ result.assert_success()
+
+ assert re.search(f"TOX_PACKAGE={re.escape(str(project.path))}.*.tar.gz{os.linesep}", result.out)
+ assert f"TOX_ENV_NAME=py{os.linesep}" in result.out
+ work_dir = project.path / ".tox" / "4"
+ assert f"TOX_WORK_DIR={work_dir}{os.linesep}" in result.out
+ env_dir = work_dir / "py"
+ assert f"TOX_ENV_DIR={env_dir}{os.linesep}" in result.out
+ assert f"VIRTUAL_ENV={env_dir}{os.linesep}" in result.out