Path: blob/main/ci_scripts/send_build_notification.py
1 views
#!/usr/bin/env python312import argparse3import json4import os5import plistlib6import subprocess7import sys8910EVENT_PREFIXES = {11"started": "🔨",12"failed": "💥",13"finished": "🚀",14}1516WORKFLOW_PREFIXES = [17"Nightly",18"Release",19]202122def get_marketing_version():23with open("../Signal/Signal-Info.plist", "rb") as file:24contents = plistlib.load(file)25return contents["CFBundleShortVersionString"]262728def get_xcode_version():29return subprocess.run(30["xcodebuild", "-version"], check=True, capture_output=True, encoding="utf8"31).stdout.split("\n")[0]323334def build_payload(src, dst, message):35payload = {36"number": src,37"recipients": [dst],38"message": message,39}40return json.dumps(payload)414243def main(ns):44env = os.environ45endpoint = env.get("NOTIFY_ENDPOINT")46if endpoint is None:47print("Doing nothing because there's no endpoint.")48exit(0)49workflow = env.get("CI_WORKFLOW", "")50if not any(workflow.startswith(prefix) for prefix in WORKFLOW_PREFIXES):51print(f"Doing nothing because '{workflow}' isn't valid.")52exit(0)5354authorization = env["NOTIFY_AUTHORIZATION"]55source = env["NOTIFY_SOURCE"]56destination = env["NOTIFY_DESTINATION"]5758build_number = env["CI_BUILD_NUMBER"]59build_url = env["CI_BUILD_URL"]60prefix = EVENT_PREFIXES[ns.event]61ref = env["CI_GIT_REF"]62trigger = env["CI_START_CONDITION"]63version = get_marketing_version()64xcode_version = get_xcode_version()6566message = (67f"{prefix} Cloud build for {version} ({build_number}) {ns.event} "68f"from {ref} (trigger: {trigger})\n\nXcode version: {xcode_version}\n\n{build_url}"69)70args = ["curl", "--silent"]71args.extend(["-H", "Content-Type: application/json"])72args.extend(["-H", f"Authorization: {authorization}"])73args.extend(["-d", build_payload(source, destination, message)])74args.extend([endpoint])75subprocess.run(args)767778if __name__ == "__main__":79parser = argparse.ArgumentParser()80parser.add_argument("event", choices=sorted(EVENT_PREFIXES.keys()))81ns = parser.parse_args()82main(ns)838485