From 78d9d1a9945933858dd3ef1a43c5a4042eb935a3 Mon Sep 17 00:00:00 2001 From: Raphael Gaschignard Date: Mon, 17 Nov 2025 15:57:31 +1000 Subject: [PATCH] feat: allow deploy alerts to go to a different channel configuring SLACK_ALERT_CHANNEL_ID will send deploy failure messages to a separate channel --- gitops_server/settings.py | 2 ++ gitops_server/utils/slack.py | 15 +++++++++++++-- gitops_server/workers/deployer/deploy.py | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gitops_server/settings.py b/gitops_server/settings.py index f51d5ef..0d5bcbc 100644 --- a/gitops_server/settings.py +++ b/gitops_server/settings.py @@ -12,5 +12,7 @@ # The slack channel ID starts with C SLACK_CHANNEL_ID = os.environ.get("SLACK_CHANNEL_ID", "") +SLACK_ALERT_CHANNEL_ID = os.environ.get("SLACK_ALERT_CHANNEL_ID", "") + # How many parallel deploys can be done at once GITOPS_MAX_PARALLEL_DEPLOYS = os.environ.get("GITOPS_MAX_PARALLEL_DEPLOYS", "5") diff --git a/gitops_server/utils/slack.py b/gitops_server/utils/slack.py index 9e91105..855c5a1 100644 --- a/gitops_server/utils/slack.py +++ b/gitops_server/utils/slack.py @@ -27,11 +27,22 @@ def __str__(self) -> str: return f"" +async def post_alert(message: str) -> str | None: + """ + Post a message to a slack alert channel (if it's configured) or the default slack channel + """ + return await post_to_channel(message, channel_id=settings.SLACK_ALERT_CHANNEL_ID or settings.SLACK_CHANNEL_ID) + + async def post(message: str) -> str | None: """Post a message to a slack channel""" + return await post_to_channel(message, channel_id=settings.SLACK_CHANNEL_ID) + + +async def post_to_channel(message: str, channel_id: str | None) -> str | None: logger.info("POSTING TO SLACK") - if settings.SLACK_TOKEN and settings.SLACK_CHANNEL_ID: - response = client.chat_postMessage(channel=settings.SLACK_CHANNEL_ID, text=message) + if settings.SLACK_TOKEN and channel_id: + response = client.chat_postMessage(channel=channel_id, text=message) if response.status_code >= 300: logger.warning("Failed to post a message to slack (see below):") logger.error(f"{message}", exc_info=True) diff --git a/gitops_server/workers/deployer/deploy.py b/gitops_server/workers/deployer/deploy.py index 3121fe5..fc9cb88 100644 --- a/gitops_server/workers/deployer/deploy.py +++ b/gitops_server/workers/deployer/deploy.py @@ -271,7 +271,7 @@ async def post_result(self, app: App, result: UpdateAppResult, deployer: "Deploy deploy_result["slack_message"] or f"Failed to deploy app `{result['app_name']}` for cluster `{settings.CLUSTER_NAME}`:\n>>>{result['output']}" ) - await slack.post(message) + await slack.post_alert(message) else: self.successful_apps.add(app.name) await handle_successful_deploy(app, result, deployer)