Skip to content

Commit 4ea556b

Browse files
committed
last_started_at, reformat package name
1 parent 2601278 commit 4ea556b

File tree

4 files changed

+44
-16
lines changed

4 files changed

+44
-16
lines changed

src/redis_release/bht/state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ class Workflow(BaseModel):
9090
inputs: Dict[str, str] = Field(default_factory=dict)
9191
uuid: Optional[str] = None
9292
triggered_at: Optional[datetime] = None
93-
started_at: Optional[datetime] = None
9493
run_id: Optional[int] = None
9594
url: Optional[str] = None
9695
timeout_minutes: int = 45
@@ -145,6 +144,7 @@ class ReleaseMeta(BaseModel):
145144

146145
tag: Optional[str] = None
147146
release_type: Optional[ReleaseType] = None
147+
last_started_at: Optional[datetime] = None
148148
ephemeral: ReleaseMetaEphemeral = Field(default_factory=ReleaseMetaEphemeral)
149149

150150

src/redis_release/bht/tree.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import logging
88
import os
99
from contextlib import contextmanager
10+
from datetime import datetime, timezone
1011
from typing import Any, Iterator, List, Optional, Set, Tuple, Union
1112

1213
from py_trees.behaviour import Behaviour
@@ -118,6 +119,9 @@ def initialize_tree_and_state(
118119
)
119120
tree = BehaviourTree(root)
120121

122+
if not read_only:
123+
state_syncer.state.meta.last_started_at = datetime.now(tz=timezone.utc)
124+
121125
# Add snapshot visitor to track visited nodes
122126
snapshot_visitor = SnapshotVisitor()
123127
tree.visitors.append(snapshot_visitor)

src/redis_release/slack_bot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ async def _post_status(
183183
state = state_syncer.state
184184

185185
# Check if state exists (has any data beyond defaults)
186-
if not state.packages:
186+
if not state.meta.last_started_at:
187187
if self.reply_in_thread:
188188
await self.app.client.chat_postMessage(
189189
channel=channel,

src/redis_release/state_slack.py

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,26 @@ def __init__(self, slack_token: str, slack_channel_id: str):
7575
self.last_blocks_json: Optional[str] = None
7676
self.started_at = datetime.now(timezone.utc)
7777

78+
def format_package_name(self, package_name: str, state: ReleaseState) -> str:
79+
"""Format package name with capital letter and release type.
80+
81+
Args:
82+
package_name: The raw package name
83+
state: The ReleaseState to get release type from
84+
85+
Returns:
86+
Formatted package name with capital letter and release type in parentheses
87+
"""
88+
# Capitalize first letter of package name
89+
formatted = package_name.capitalize()
90+
91+
# Add release type if available
92+
if state.meta.release_type:
93+
release_type_str = state.meta.release_type.value
94+
formatted = f"{formatted} ({release_type_str})"
95+
96+
return formatted
97+
7898
def update_message(self, state: ReleaseState) -> bool:
7999
"""Post or update Slack message with release state.
80100
@@ -148,19 +168,20 @@ def _make_blocks(self, state: ReleaseState) -> List[Dict[str, Any]]:
148168
}
149169
)
150170

151-
# Show started date (when SlackStatePrinter was created)
152-
started_str = self.started_at.strftime("%Y-%m-%d %H:%M:%S %Z")
153-
blocks.append(
154-
{
155-
"type": "context",
156-
"elements": [
157-
{
158-
"type": "mrkdwn",
159-
"text": f"*Started:* {started_str}",
160-
}
161-
],
162-
}
163-
)
171+
# Show started date from state.meta.last_started_at if available
172+
if state.meta.last_started_at:
173+
started_str = state.meta.last_started_at.strftime("%Y-%m-%d %H:%M:%S %Z")
174+
blocks.append(
175+
{
176+
"type": "context",
177+
"elements": [
178+
{
179+
"type": "mrkdwn",
180+
"text": f"*Started:* {started_str}",
181+
}
182+
],
183+
}
184+
)
164185

165186
# Legend with two columns
166187
blocks.append(
@@ -183,6 +204,9 @@ def _make_blocks(self, state: ReleaseState) -> List[Dict[str, Any]]:
183204

184205
# Process each package
185206
for package_name, package in sorted(state.packages.items()):
207+
# Format package name with capital letter and release type
208+
formatted_name = self.format_package_name(package_name, state)
209+
186210
# Get workflow statuses
187211
build_status_emoji = self._get_status_emoji(package, package.build)
188212
publish_status_emoji = self._get_status_emoji(package, package.publish)
@@ -193,7 +217,7 @@ def _make_blocks(self, state: ReleaseState) -> List[Dict[str, Any]]:
193217
"type": "section",
194218
"text": {
195219
"type": "mrkdwn",
196-
"text": f"*{package_name}*\n*Build:* {build_status_emoji} | *Publish:* {publish_status_emoji}",
220+
"text": f"*{formatted_name}*\n*Build:* {build_status_emoji} | *Publish:* {publish_status_emoji}",
197221
},
198222
}
199223
)

0 commit comments

Comments
 (0)