From 1e5bed4c235b70db6ce91c32d3c6a84d8550c187 Mon Sep 17 00:00:00 2001 From: David Larsen Date: Fri, 23 Jan 2026 08:12:24 -0500 Subject: [PATCH] Fix: Jira dashboard config params not reaching notifier Two bugs were preventing Jira settings configured in the Socket dashboard from being used by the Jira notifier: 1. Parameter name mismatch in notifications.yaml - Dashboard API returns `jiraUrl` -> normalized to `jira_url` - But notifications.yaml defined param as `name: server` - Manager looks up params by name, so `jira_url` was never found - Fixed by renaming params to match dashboard keys: `jira_url`, `jira_project` 2. Priority bug in manager param resolution - Comment said "app_config -> env var -> default" (app_config highest) - But code would set val from app_config, then overwrite with default if env var wasn't set - Fixed by restructuring: start with default, apply env var, then app_config Also updated jira_notifier.py to look for the correct param names (`jira_url`, `jira_project`, `jira_email`, `jira_api_token`) and fall back to the `auth` dict for backwards compatibility. Tested locally with simulated dashboard config - all four Jira params now resolve correctly. Co-Authored-By: Claude Opus 4.5 --- .../core/notification/jira_notifier.py | 11 ++++++---- socket_basics/core/notification/manager.py | 21 ++++++++++--------- socket_basics/notifications.yaml | 4 ++-- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/socket_basics/core/notification/jira_notifier.py b/socket_basics/core/notification/jira_notifier.py index 0fea3eb..fe0edd1 100644 --- a/socket_basics/core/notification/jira_notifier.py +++ b/socket_basics/core/notification/jira_notifier.py @@ -21,20 +21,23 @@ class JiraNotifier(BaseNotifier): def __init__(self, params: Dict[str, Any] | None = None): super().__init__(params or {}) # JIRA configuration from params, env variables, or app config + # Parameter names match dashboard config keys (jira_url, jira_project) self.server = ( - self.config.get('server') or + self.config.get('jira_url') or get_jira_url() ) self.project = ( - self.config.get('project') or + self.config.get('jira_project') or get_jira_project() ) self.email = ( - self.config.get('email') or + self.config.get('jira_email') or + self.config.get('auth', {}).get('email') or get_jira_email() ) self.api_token = ( - self.config.get('api_token') or + self.config.get('jira_api_token') or + self.config.get('auth', {}).get('api_token') or get_jira_api_token() ) diff --git a/socket_basics/core/notification/manager.py b/socket_basics/core/notification/manager.py index 095855c..c8614b5 100644 --- a/socket_basics/core/notification/manager.py +++ b/socket_basics/core/notification/manager.py @@ -209,11 +209,11 @@ def load_from_config(self) -> None: env_var = p.get('env_variable') p_type = p.get('type', 'str') - # Resolve value: app_config -> env var -> default - val = None - if self.app_config and pname in self.app_config: - val = self.app_config.get(pname) - if env_var and os.getenv(env_var) is not None: + # Resolve value priority: app_config (highest) -> env var -> default (lowest) + val = p_default + + # Check env var (overrides default) + if env_var: ev = os.getenv(env_var) if ev is not None: if p_type == 'bool': @@ -223,13 +223,14 @@ def load_from_config(self) -> None: val = int(ev) except Exception: logger.warning("Failed to convert notifier param %s=%s to int for notifier %s; using default %s", pname, ev, name, p_default) - val = p_default else: val = ev - else: - val = p_default - else: - val = p_default + + # Check app_config (highest priority, overrides env var) + if self.app_config and pname in self.app_config: + app_val = self.app_config.get(pname) + if app_val is not None: + val = app_val params[pname] = val else: diff --git a/socket_basics/notifications.yaml b/socket_basics/notifications.yaml index 066873e..20dce3f 100644 --- a/socket_basics/notifications.yaml +++ b/socket_basics/notifications.yaml @@ -61,11 +61,11 @@ notifiers: module_path: "socket_basics.core.notification.jira_notifier" class: "JiraNotifier" parameters: - - name: server + - name: jira_url option: --jira-url env_variable: INPUT_JIRA_URL type: str - - name: project + - name: jira_project option: --jira-project env_variable: INPUT_JIRA_PROJECT type: str