From c1a9f6639387a5537b7c75128e469281064a3bd4 Mon Sep 17 00:00:00 2001 From: Manoj Bajaj Date: Wed, 10 Jun 2026 19:49:41 +0530 Subject: [PATCH] fix: add env field to config and disable PostHog in non-prod environments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds `env: Literal["prod", "dev", "test"]` to `AuthsomeConfig` (read from `AUTHSOME_ENV`) so the runtime environment is a first-class config concern shared across client and server. Gates `analytics_enabled` on `env == "prod"` in `ServerConfig` so PostHog is never initialised in dev or test — preventing the background consumer thread from blocking pytest process exit and causing CI jobs to hang until the 6-hour GitHub Actions timeout. Test suite now sets `AUTHSOME_ENV=test` at module level and in the `_disable_analytics` autouse fixture. The CI workflow also sets it as defence-in-depth and adds `timeout-minutes: 10` so runaway jobs fail fast. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/python-test.yml | 3 +++ src/authsome/config.py | 2 ++ src/authsome/server/config.py | 4 ++-- tests/conftest.py | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 70969f2d..1055cb4c 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -23,6 +23,9 @@ on: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 10 + env: + AUTHSOME_ENV: test steps: - uses: actions/checkout@v4 diff --git a/src/authsome/config.py b/src/authsome/config.py index c5bb3997..e95930cf 100644 --- a/src/authsome/config.py +++ b/src/authsome/config.py @@ -1,6 +1,7 @@ """Process-wide configuration for Authsome.""" from pathlib import Path +from typing import Literal from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict @@ -14,6 +15,7 @@ class AuthsomeConfig(BaseSettings): model_config = SettingsConfigDict(env_prefix="AUTHSOME_") version: str = __version__ + env: Literal["prod", "dev", "test"] = "prod" home: Path = Field(default=Path.home() / ".authsome") base_url: str = Field(default="http://127.0.0.1:7998") diff --git a/src/authsome/server/config.py b/src/authsome/server/config.py index 746aa9b8..04f2d44d 100644 --- a/src/authsome/server/config.py +++ b/src/authsome/server/config.py @@ -63,8 +63,8 @@ def kv_store_dir(self) -> Path: @property def analytics_enabled(self) -> bool: - """True when daemon telemetry has not been opted out.""" - return bool(self.posthog_api_key) and not self.do_not_track + """True only in prod when telemetry has not been opted out.""" + return self.env == "prod" and bool(self.posthog_api_key) and not self.do_not_track @property def database(self) -> str: diff --git a/tests/conftest.py b/tests/conftest.py index 78778b11..17fa6d32 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -10,6 +10,7 @@ _tmp_dir = tempfile.TemporaryDirectory(prefix="authsome_test_home_") os.environ["AUTHSOME_HOME"] = _tmp_dir.name os.environ["AUTHSOME_BASE_URL"] = TEST_AUTHSOME_BASE_URL +os.environ["AUTHSOME_ENV"] = "test" os.environ["AUTHSOME_DO_NOT_TRACK"] = "true" os.environ.pop("AUTHSOME_POSTHOG_API_KEY", None) os.environ.pop("POSTHOG_API_KEY", None) @@ -23,6 +24,7 @@ def _disable_analytics(monkeypatch: pytest.MonkeyPatch) -> None: get_server_config.cache_clear() monkeypatch.setenv("AUTHSOME_BASE_URL", TEST_AUTHSOME_BASE_URL) + monkeypatch.setenv("AUTHSOME_ENV", "test") monkeypatch.setenv("AUTHSOME_DO_NOT_TRACK", "true") monkeypatch.delenv("AUTHSOME_POSTHOG_API_KEY", raising=False) monkeypatch.delenv("POSTHOG_API_KEY", raising=False)