From 1969b336dc08474fd2c3876f7a7af81e3e796fd9 Mon Sep 17 00:00:00 2001 From: Benjamin Mah Date: Fri, 28 Mar 2025 10:57:04 -0400 Subject: [PATCH 1/3] Initial template rule for release notes --- bugbot/rules/release_notes.py | 60 +++++++++++++++++++++++++++++++++++ configs/rules.json | 4 +++ templates/release_notes.html | 8 +++++ 3 files changed, 72 insertions(+) create mode 100644 bugbot/rules/release_notes.py create mode 100644 templates/release_notes.html diff --git a/bugbot/rules/release_notes.py b/bugbot/rules/release_notes.py new file mode 100644 index 000000000..ab2ad2340 --- /dev/null +++ b/bugbot/rules/release_notes.py @@ -0,0 +1,60 @@ +from jinja2 import Environment, FileSystemLoader + +from bugbot import mail, utils +from bugbot.bzcleaner import BzCleaner +from bugbot.nag_me import Nag + + +class ReleaseNotes(BzCleaner, Nag): + def __init__(self): + super().__init__() + + def description(self): + return "Weekly Release Notes Digest" + + def template(self): + return "release_notes.html" + + def get_email_data(self, date: str): + # Simulate API call to fetch release notes + return [ + {"title": "New Dark Mode in Settings", "link": "https://example.com/1"}, + { + "title": "Performance Improvements in Rendering", + "link": "https://example.com/2", + }, + {"title": "Security Fixes", "link": "https://example.com/3"}, + ] + + def send_email(self, date="today"): + login_info = utils.get_login_info() + data = self.get_email_data(date) + if data: + title, body = self.get_email(date, data) + receivers = utils.get_config(self.name(), "receivers") + mail.send( + login_info["ldap_username"], + receivers, + title, + body, + html=True, + login=login_info, + dryrun=self.dryrun, + ) + + def get_email(self, date: str, data: dict, preamble: str = ""): + env = Environment(loader=FileSystemLoader("templates")) + template = env.get_template(self.template()) + message = template.render(date=date, data=data) + + common = env.get_template("common.html") + body = common.render( + preamble=preamble, + message=message, + query_url=None, + ) + return self.get_email_subject(date), body + + +if __name__ == "__main__": + ReleaseNotes().run() diff --git a/configs/rules.json b/configs/rules.json index a3a9fb990..fa238e4a0 100644 --- a/configs/rules.json +++ b/configs/rules.json @@ -478,5 +478,9 @@ }, "perfalert_resolved_regression": { "additional_receivers": ["perfalert-activity@mozilla.com", "sparky@mozilla.com"] + }, + "release_notes": { + "must_run": ["Mon"], + "receivers": ["release-mgmt@mozilla.com"] } } diff --git a/templates/release_notes.html b/templates/release_notes.html new file mode 100644 index 000000000..1ae677a47 --- /dev/null +++ b/templates/release_notes.html @@ -0,0 +1,8 @@ +

Release Notes Summary for {{ date }}

+ From f5e8a7a97ae0e1638e280276470fa041ed97a8c0 Mon Sep 17 00:00:00 2001 From: Benjamin Mah Date: Wed, 23 Apr 2025 13:26:26 -0400 Subject: [PATCH 2/3] Fixed rule to work with local URL - need to specify cloud function URL once deployed --- bugbot/rules/release_notes.py | 39 +++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/bugbot/rules/release_notes.py b/bugbot/rules/release_notes.py index ab2ad2340..aa0351486 100644 --- a/bugbot/rules/release_notes.py +++ b/bugbot/rules/release_notes.py @@ -1,3 +1,4 @@ +import requests from jinja2 import Environment, FileSystemLoader from bugbot import mail, utils @@ -6,8 +7,9 @@ class ReleaseNotes(BzCleaner, Nag): - def __init__(self): + def __init__(self, version=None): super().__init__() + self.version = version def description(self): return "Weekly Release Notes Digest" @@ -16,21 +18,33 @@ def template(self): return "release_notes.html" def get_email_data(self, date: str): - # Simulate API call to fetch release notes - return [ - {"title": "New Dark Mode in Settings", "link": "https://example.com/1"}, - { - "title": "Performance Improvements in Rendering", - "link": "https://example.com/2", - }, - {"title": "Security Fixes", "link": "https://example.com/3"}, - ] + params = {"date": date} + if self.version: + params["version"] = self.version + base_url = "http://localhost:8080/" + resp = requests.get(base_url, params=params) + resp.raise_for_status() + data = resp.json() + results = [] + for row in data["commits"]: + parts = row.split(",") + if len(parts) >= 4: + results.append( + { + "category": parts[0].strip("[] "), + "title": parts[1].strip(), + "bug": parts[2].strip(), + "desc": parts[3].strip(), + } + ) + return results def send_email(self, date="today"): login_info = utils.get_login_info() data = self.get_email_data(date) if data: - title, body = self.get_email(date, data) + preamble = f"The following were the identified relevant commits for version {self.version or '(unknown)'}" + title, body = self.get_email(date, data, preamble=preamble) receivers = utils.get_config(self.name(), "receivers") mail.send( login_info["ldap_username"], @@ -46,7 +60,6 @@ def get_email(self, date: str, data: dict, preamble: str = ""): env = Environment(loader=FileSystemLoader("templates")) template = env.get_template(self.template()) message = template.render(date=date, data=data) - common = env.get_template("common.html") body = common.render( preamble=preamble, @@ -57,4 +70,4 @@ def get_email(self, date: str, data: dict, preamble: str = ""): if __name__ == "__main__": - ReleaseNotes().run() + ReleaseNotes(version="FIREFOX_BETA_136_BASE").run() From 0090acf7693167ffacfaaec82a5d7f4e6e0d7026 Mon Sep 17 00:00:00 2001 From: Benjamin Mah Date: Mon, 28 Apr 2025 09:36:55 -0400 Subject: [PATCH 3/3] Added weeks_lookup to release notes rule --- configs/rules.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configs/rules.json b/configs/rules.json index fa238e4a0..0d8711fe3 100644 --- a/configs/rules.json +++ b/configs/rules.json @@ -481,6 +481,7 @@ }, "release_notes": { "must_run": ["Mon"], - "receivers": ["release-mgmt@mozilla.com"] + "receivers": ["release-mgmt@mozilla.com"], + "weeks_lookup": 4 } }