Skip to content

Commit cb11d09

Browse files
authored
Merge pull request #8 from teams-notifier/multiple-fixes
Misc fixes
2 parents 3fedc2f + 6e726c0 commit cb11d09

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

cards/merge_request.yaml.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ body:
1111
wrap: true
1212
- columns:
1313
- items:
14-
- color: Accent
14+
- color: {{ precalc.icon_color | default("Accent") }}
1515
name: BranchRequest
1616
type: Icon
1717
type: Column
@@ -24,7 +24,7 @@ body:
2424
weight: Bolder
2525
wrap: true
2626
- size: Small
27-
text: Opened by {{ precalc.openner.name }}
27+
text: Opened by {{ precalc.opener.name }}
2828
type: TextBlock
2929
wrap: true
3030
spacing: Small

cards/render.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/env python3
22
import datetime
33
import json
4+
from enum import Enum
45
from typing import Any
56

67
import yaml
@@ -11,6 +12,16 @@
1112
from db import MergeRequestInfos
1213

1314

15+
class Teams_Color(Enum):
16+
DEFAULT = "default"
17+
DARK = "dark"
18+
LIGHT = "light"
19+
ACCENT = "accent"
20+
GOOD = "good"
21+
WARNING = "warning"
22+
ATTENTION = "attention"
23+
24+
1425
def render(mri: MergeRequestInfos) -> dict[str, Any]:
1526
env = Environment(loader=FileSystemLoader("./cards/"))
1627
templ: Template = env.get_template("merge_request.yaml.j2")
@@ -36,11 +47,18 @@ def render(mri: MergeRequestInfos) -> dict[str, Any]:
3647
if approver.status == "approved"
3748
]
3849

50+
icon_color: Teams_Color = Teams_Color.ACCENT
51+
52+
if mri.merge_request_payload.object_attributes.action == "close":
53+
icon_color = Teams_Color.ATTENTION
54+
if mri.merge_request_payload.object_attributes.action == "merge":
55+
icon_color = Teams_Color.GOOD
56+
3957
precalc = {
4058
"path_with_namespace": mri.merge_request_payload.project.path_with_namespace,
4159
"iid": mri.merge_request_payload.object_attributes.iid,
4260
"title": mri.merge_request_payload.object_attributes.title,
43-
"openner": mri.merge_request_extra_state.openner,
61+
"opener": mri.merge_request_extra_state.opener,
4462
"detailed_merge_status": mri.merge_request_payload.object_attributes.detailed_merge_status,
4563
"latest_action": mri.merge_request_payload.object_attributes.action,
4664
"source_branch": mri.merge_request_payload.object_attributes.source_branch,
@@ -49,6 +67,7 @@ def render(mri: MergeRequestInfos) -> dict[str, Any]:
4967
"url": mri.merge_request_payload.object_attributes.url,
5068
"latest_pipeline": latest_pipeline_infos,
5169
"approvers": approvers,
70+
"icon_color": icon_color.value,
5271
}
5372

5473
rendered = templ.render(

db.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class GitlabApprovals(GitlabUser):
9494

9595
class MergeRequestExtraState(BaseModel):
9696
version: int
97-
openner: GitlabUser
97+
opener: GitlabUser
9898
approvers: dict[str, GitlabApprovals]
9999
pipeline_statuses: dict[str, PipelinePayload]
100100
emojis: dict[str, Any]
@@ -145,7 +145,7 @@ async def get_merge_request_ref_infos(self, merge_request: MergeRequestPayload)
145145
insert_only_vals={
146146
"merge_request_extra_state": {
147147
"version": 1,
148-
"openner": {
148+
"opener": {
149149
"id": merge_request.user.id,
150150
"name": merge_request.user.name,
151151
"username": merge_request.user.username,

webhook/merge_request.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,25 @@ async def create_or_update_message(
100100

101101
connection: asyncpg.Connection
102102
async with await database.acquire() as connection:
103-
await connection.execute(
103+
result = await connection.fetchrow(
104104
"""UPDATE merge_request_message_ref
105105
SET message_id = $1
106106
WHERE merge_request_message_ref_id = $2
107+
AND message_id IS NULL
108+
RETURNING merge_request_message_ref_id
107109
""",
108110
response.get("message_id"),
109111
mrmsgref.merge_request_message_ref_id,
110112
)
113+
if result is None or len(result) == 0:
114+
# This case is a race condition so cleanup the second message :)
115+
await client.request(
116+
"DELETE",
117+
config.ACTIVITY_API + "api/v1/message",
118+
json={
119+
"message_id": str(response.get("message_id")),
120+
},
121+
)
111122
else:
112123
payload["message_id"] = str(mrmsgref.message_id)
113124
res = await client.request(

0 commit comments

Comments
 (0)