[tbb-commits] [Git][tpo/applications/tor-browser-build][maint-13.0] Bug 41042: Add options to include updates in the changelog scripts.
richard (@richard)
git at gitlab.torproject.org
Tue Dec 19 12:03:09 UTC 2023
richard pushed to branch maint-13.0 at The Tor Project / Applications / tor-browser-build
Commits:
2fbd7956 by Pier Angelo Vendrame at 2023-12-19T12:02:56+00:00
Bug 41042: Add options to include updates in the changelog scripts.
Pass the new version of components as arguments to avoid having to
change the changelog output after it has been generated by the script.
- - - - -
1 changed file:
- tools/fetch-changelogs.py
Changes:
=====================================
tools/fetch-changelogs.py
=====================================
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+import argparse
from datetime import datetime
import enum
from pathlib import Path
@@ -23,6 +24,11 @@ project_order = {
}
+class EntryType(enum.IntFlag):
+ UPDATE = 0
+ ISSUE = 1
+
+
class Platform(enum.IntFlag):
WINDOWS = 8
MACOS = 4
@@ -32,40 +38,12 @@ class Platform(enum.IntFlag):
ALL_PLATFORMS = 8 | 4 | 2 | 1
-class Issue:
- def __init__(self, j):
- self.title = j["title"]
- self.project, self.number = (
- j["references"]["full"].rsplit("/", 2)[-1].split("#")
- )
- self.number = int(self.number)
- self.platform = 0
- self.num_platforms = 0
- if "Desktop" in j["labels"]:
- self.platform = Platform.DESKTOP
- self.num_platforms += 3
- else:
- if "Windows" in j["labels"]:
- self.platform |= Platform.WINDOWS
- self.num_platforms += 1
- if "MacOS" in j["labels"]:
- self.platform |= Platform.MACOS
- self.num_platforms += 1
- if "Linux" in j["labels"]:
- self.platform |= Platform.LINUX
- self.num_platforms += 1
- if "Android" in j["labels"]:
- if is_mb and self.num_platforms == 0:
- raise Exception(
- f"Android-only issue on Mullvad Browser: {j['references']['full']}!"
- )
- elif not is_mb:
- self.platform |= Platform.ANDROID
- self.num_platforms += 1
- if not self.platform or (is_mb and self.platform == Platform.DESKTOP):
- self.platform = Platform.ALL_PLATFORMS
- self.num_platforms = 4
- self.is_build = "Build System" in j["labels"]
+class ChangelogEntry:
+ def __init__(self, type_, platform, num_platforms, is_build):
+ self.type = type_
+ self.platform = platform
+ self.num_platforms = num_platforms
+ self.is_build = is_build
def get_platforms(self):
if self.platform == Platform.ALL_PLATFORMS:
@@ -81,15 +59,78 @@ class Issue:
platforms.append("Android")
return " + ".join(platforms)
- def __str__(self):
- return f"Bug {self.number}: {self.title} [{self.project}]"
-
def __lt__(self, other):
+ if self.type != other.type:
+ return self.type < other.type
+ if self.type == EntryType.UPDATE:
+ # Rely on sorting being stable on Python
+ return False
if self.project == other.project:
return self.number < other.number
return project_order[self.project] < project_order[other.project]
+class UpdateEntry(ChangelogEntry):
+ def __init__(self, name, version):
+ if name == "Firefox" and not is_mb:
+ platform = Platform.DESKTOP
+ num_platforms = 3
+ elif name == "GeckoView":
+ platform = Platform.ANDROID
+ num_platforms = 3
+ else:
+ platform = Platform.ALL_PLATFORMS
+ num_platforms = 4
+ super().__init__(
+ EntryType.UPDATE, platform, num_platforms, name == "Go"
+ )
+ self.name = name
+ self.version = version
+
+ def __str__(self):
+ return f"Updated {self.name} to {self.version}"
+
+
+class Issue(ChangelogEntry):
+ def __init__(self, j):
+ self.title = j["title"]
+ self.project, self.number = (
+ j["references"]["full"].rsplit("/", 2)[-1].split("#")
+ )
+ self.number = int(self.number)
+ platform = 0
+ num_platforms = 0
+ if "Desktop" in j["labels"]:
+ platform = Platform.DESKTOP
+ num_platforms += 3
+ else:
+ if "Windows" in j["labels"]:
+ platform |= Platform.WINDOWS
+ num_platforms += 1
+ if "MacOS" in j["labels"]:
+ platform |= Platform.MACOS
+ num_platforms += 1
+ if "Linux" in j["labels"]:
+ platform |= Platform.LINUX
+ num_platforms += 1
+ if "Android" in j["labels"]:
+ if is_mb and num_platforms == 0:
+ raise Exception(
+ f"Android-only issue on Mullvad Browser: {j['references']['full']}!"
+ )
+ elif not is_mb:
+ platform |= Platform.ANDROID
+ num_platforms += 1
+ if not platform or (is_mb and platform == Platform.DESKTOP):
+ platform = Platform.ALL_PLATFORMS
+ num_platforms = 4
+ is_build = "Build System" in j["labels"]
+ super().__init__(EntryType.ISSUE, platform, num_platforms, is_build)
+
+ def __str__(self):
+ return f"Bug {self.number}: {self.title} [{self.project}]"
+
+
def sorted_issues(issues):
issues = [sorted(v) for v in issues.values()]
return sorted(
@@ -99,8 +140,20 @@ def sorted_issues(issues):
)
-if len(sys.argv) < 2:
- print(f"Usage: {sys.argv[0]} version-to-release or #issue-id")
+parser = argparse.ArgumentParser()
+parser.add_argument("issue_version")
+parser.add_argument("--date", help="The date of the release")
+parser.add_argument("--firefox", help="New Firefox version (if we rebased)")
+parser.add_argument("--tor", help="New Tor version (if updated)")
+parser.add_argument("--no-script", help="New NoScript version (if updated)")
+parser.add_argument("--openssl", help="New OpenSSL version (if updated)")
+parser.add_argument("--ublock", help="New uBlock version (if updated)")
+parser.add_argument("--zlib", help="New zlib version (if updated)")
+parser.add_argument("--go", help="New Go version (if updated)")
+args = parser.parse_args()
+
+if not args.issue_version:
+ parser.print_help()
sys.exit(1)
token_file = Path(__file__).parent / ".changelogs_token"
@@ -121,7 +174,7 @@ with token_file.open() as f:
token = f.read().strip()
headers = {"PRIVATE-TOKEN": token}
-version = sys.argv[1]
+version = args.issue_version
r = requests.get(
f"{API_URL}/projects/{PROJECT_ID}/issues?labels=Release Prep",
headers=headers,
@@ -132,7 +185,7 @@ if r.status_code == 401:
issue = None
issues = []
for i in r.json():
- if i["title"].find(sys.argv[1]) != -1:
+ if i["title"].find(version) != -1:
issues.append(i)
if len(issues) == 1:
issue = issues[0]
@@ -172,20 +225,44 @@ iid = issue["iid"]
linked = {}
linked_build = {}
+
+
+def add_entry(entry):
+ target = linked_build if entry.is_build else linked
+ if entry.platform not in target:
+ target[entry.platform] = []
+ target[entry.platform].append(entry)
+
+
+if args.firefox:
+ add_entry(UpdateEntry("Firefox", args.firefox))
+ if not is_mb:
+ add_entry(UpdateEntry("GeckoView", args.firefox))
+if args.tor and not is_mb:
+ add_entry(UpdateEntry("Tor", args.tor))
+if args.no_script:
+ add_entry(UpdateEntry("NoScript", args.no_script))
+if not is_mb:
+ if args.openssl:
+ add_entry(UpdateEntry("OpenSSL", args.openssl))
+ if args.zlib:
+ add_entry(UpdateEntry("zlib", args.zlib))
+ if args.go:
+ add_entry(UpdateEntry("Go", args.go))
+elif args.ublock:
+ add_entry(UpdateEntry("uBlock Origin", args.ublock))
+
r = requests.get(
f"{API_URL}/projects/{PROJECT_ID}/issues/{iid}/links", headers=headers
)
for i in r.json():
- i = Issue(i)
- target = linked_build if i.is_build else linked
- if i.platform not in target:
- target[i.platform] = []
- target[i.platform].append(i)
+ add_entry(Issue(i))
+
linked = sorted_issues(linked)
linked_build = sorted_issues(linked_build)
name = "Mullvad" if is_mb else "Tor"
-date = datetime.now().strftime("%B %d %Y")
+date = args.date if args.date else datetime.now().strftime("%B %d %Y")
print(f"{name} Browser {version} - {date}")
for issues in linked:
print(f" * {issues[0].get_platforms()}")
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/2fbd79566fc832b2a670f1b8b2529f2c69cac64c
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/2fbd79566fc832b2a670f1b8b2529f2c69cac64c
You're receiving this email because of your account on gitlab.torproject.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tbb-commits/attachments/20231219/a2043cb3/attachment-0001.htm>
More information about the tbb-commits
mailing list