From d9c85a2f3e824f1e3769aa7a9aec7286a1eb10e5 Mon Sep 17 00:00:00 2001 From: Ajeya Krishna Date: Thu, 22 Oct 2026 09:39:47 +0000 Subject: [PATCH] fix(config): skip empty CI release variables --- langfuse/_utils/environment.py | 5 +++-- tests/unit/test_environment.py | 26 ++++++++++++++++++++++++++ tests/unit/test_initialization.py | 15 +++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tests/unit/test_environment.py diff --git a/langfuse/_utils/environment.py b/langfuse/_utils/environment.py index a696b3a59..e4e289efc 100644 --- a/langfuse/_utils/environment.py +++ b/langfuse/_utils/environment.py @@ -29,6 +29,7 @@ def get_common_release_envs() -> Optional[str]: for env in common_release_envs: - if env in os.environ: - return os.environ[env] + value = os.environ.get(env) + if value: + return value return None diff --git a/tests/unit/test_environment.py b/tests/unit/test_environment.py new file mode 100644 index 000000000..db99d454a --- /dev/null +++ b/tests/unit/test_environment.py @@ -0,0 +1,26 @@ +import pytest + +from langfuse._utils.environment import common_release_envs, get_common_release_envs + + +@pytest.mark.parametrize( + "values,expected", + [ + ({}, None), + ({name: "" for name in common_release_envs}, None), + ({"RENDER_GIT_COMMIT": "", "GITHUB_SHA": "github-sha"}, "github-sha"), + ( + {"RENDER_GIT_COMMIT": "render-sha", "GITHUB_SHA": "github-sha"}, + "render-sha", + ), + ({"RENDER_GIT_COMMIT": " ", "GITHUB_SHA": "github-sha"}, " "), + ], + ids=["unset", "all-empty", "skip-empty", "precedence", "preserve-whitespace"], +) +def test_get_common_release_envs(monkeypatch, values, expected): + for name in common_release_envs: + monkeypatch.delenv(name, raising=False) + for name, value in values.items(): + monkeypatch.setenv(name, value) + + assert get_common_release_envs() == expected diff --git a/tests/unit/test_initialization.py b/tests/unit/test_initialization.py index 1f682d3fe..8ee028000 100644 --- a/tests/unit/test_initialization.py +++ b/tests/unit/test_initialization.py @@ -10,6 +10,7 @@ from langfuse import Langfuse from langfuse._client.resource_manager import LangfuseResourceManager +from langfuse._utils.environment import common_release_envs class TestClientInitialization: @@ -135,6 +136,20 @@ def test_zero_sample_rate_parameter_is_preserved( assert client._resources is not None assert client._resources.sample_rate == 0.0 + def test_empty_ci_release_falls_back_to_next_variable(self, monkeypatch): + for name in [*common_release_envs, "LANGFUSE_RELEASE"]: + monkeypatch.delenv(name, raising=False) + monkeypatch.setenv("RENDER_GIT_COMMIT", "") + monkeypatch.setenv("GITHUB_SHA", "github-sha") + + client = Langfuse( + public_key="test_pk_release", + secret_key="test_sk", + tracing_enabled=False, + ) + + assert client._release == "github-sha" + def test_base_url_env_var(self, cleanup_env_vars): """Test that LANGFUSE_BASE_URL environment variable is used correctly.""" os.environ["LANGFUSE_BASE_URL"] = "http://test-base-url.com"