-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
/
Copy pathsend_build_notification.py
executable file
·76 lines (61 loc) · 1.9 KB
/
send_build_notification.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python3
import argparse
import json
import os
import plistlib
import subprocess
import sys
EVENT_PREFIXES = {
"started": "🔨",
"failed": "💥",
"finished": "🚀",
}
WORKFLOW_PREFIXES = [
"Nightly",
"Release",
]
def get_marketing_version():
with open("../Signal/Signal-Info.plist", "rb") as file:
contents = plistlib.load(file)
return contents["CFBundleShortVersionString"]
def build_payload(src, dst, message):
payload = {
"number": src,
"recipients": [dst],
"message": message,
}
return json.dumps(payload)
def main(ns):
env = os.environ
endpoint = env.get("NOTIFY_ENDPOINT")
if endpoint is None:
print("Doing nothing because there's no endpoint.")
exit(0)
workflow = env.get("CI_WORKFLOW", "")
if not any(workflow.startswith(prefix) for prefix in WORKFLOW_PREFIXES):
print(f"Doing nothing because '{workflow}' isn't valid.")
exit(0)
authorization = env["NOTIFY_AUTHORIZATION"]
source = env["NOTIFY_SOURCE"]
destination = env["NOTIFY_DESTINATION"]
build_number = env["CI_BUILD_NUMBER"]
build_url = env["CI_BUILD_URL"]
prefix = EVENT_PREFIXES[ns.event]
ref = env["CI_GIT_REF"]
trigger = env["CI_START_CONDITION"]
version = get_marketing_version()
message = (
f"{prefix} Cloud build for {version} ({build_number}) {ns.event} "
f"from {ref} (trigger: {trigger})\n\n{build_url}"
)
args = ["curl", "--silent"]
args.extend(["-H", "Content-Type: application/json"])
args.extend(["-H", f"Authorization: {authorization}"])
args.extend(["-d", build_payload(source, destination, message)])
args.extend([endpoint])
subprocess.run(args)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("event", choices=sorted(EVENT_PREFIXES.keys()))
ns = parser.parse_args()
main(ns)