logiguard fork v3: full patch set on verified 8c74db0 tree
Includes prior-session patches (carry forward so the app compiles): - crates/gpui/build.rs: cross-compile manifest fix - crates/gpui/src/platform.rs: PlatformWindow::activate_with_token trait method - crates/gpui/src/window.rs: Window::activate_with_token public API - crates/gpui_linux/src/linux/wayland/window.rs: WaylandWindow::activate_with_token + activate() keyboard-serial fix Plus the focus-serial fix: - serial.rs: SerialKind::KeyboardEnter - client.rs: store wl_keyboard.enter serial; latest_serial_of() Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
93
script/flatpak/convert-release-notes.py
Normal file
93
script/flatpak/convert-release-notes.py
Normal file
@@ -0,0 +1,93 @@
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import sys
|
||||
import textwrap
|
||||
|
||||
from html import escape
|
||||
|
||||
def clean_line(line: str, in_code_fence: bool) -> str:
|
||||
line = re.sub(r"\(\[(#\d+)\]\([\w|\d\:|\/|\.|\-|_]*\)\)", lambda match: f"[{match.group(1)}]", line)
|
||||
line = re.sub(r"\[(#\d+)\]\([\w|\d\:|\/|\.|\-|_]*\)", lambda match: f"[{match.group(1)}]", line)
|
||||
if not in_code_fence:
|
||||
line = line.strip()
|
||||
|
||||
return escape(line)
|
||||
|
||||
|
||||
def convert_body(body: str) -> str:
|
||||
formatted = ""
|
||||
|
||||
in_code_fence = False
|
||||
in_list = False
|
||||
for line in body.splitlines():
|
||||
line = clean_line(line, in_code_fence)
|
||||
if not line:
|
||||
continue
|
||||
if re.search(r'\[[\w|\d|:|\/|\.|\-|_]*\]\([\w|\d|:|\/|\.|\-|_]*\)', line):
|
||||
continue
|
||||
line = re.sub(r"(?<!\`)`([^`\n]+)`(?!`)", lambda match: f"<code>{match.group(1)}</code>", line)
|
||||
|
||||
contains_code_fence = bool(re.search(r"```", line))
|
||||
is_list = bool(re.search(r"^-\s*", line))
|
||||
|
||||
if in_list and not is_list:
|
||||
formatted += "</ul>\n"
|
||||
if (not in_code_fence and contains_code_fence) or (not in_list and is_list):
|
||||
formatted += "<ul>\n"
|
||||
in_list = is_list
|
||||
in_code_fence = contains_code_fence != in_code_fence
|
||||
|
||||
if is_list:
|
||||
line = re.sub(r"^-\s*", "", line)
|
||||
line = f" <li>{line}</li>"
|
||||
elif in_code_fence or contains_code_fence:
|
||||
line = f" <li><code> {line}</code></li>"
|
||||
else:
|
||||
line = f"<p>{line}</p>"
|
||||
formatted += f"{line}\n"
|
||||
|
||||
if (not in_code_fence and contains_code_fence):
|
||||
formatted += "</ul>\n"
|
||||
if in_code_fence or in_list:
|
||||
formatted += "</ul>\n"
|
||||
return formatted
|
||||
|
||||
def get_release_info(tag: str):
|
||||
url = f"https://api.github.com/repos/zed-industries/zed/releases/tags/{tag}"
|
||||
response = requests.get(url)
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
else:
|
||||
print(f"Failed to fetch release info for tag '{tag}'. Status code: {response.status_code}")
|
||||
quit()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.chdir(sys.path[0])
|
||||
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: python convert-release-notes.py <tag> <channel>")
|
||||
sys.exit(1)
|
||||
|
||||
tag = sys.argv[1]
|
||||
channel = sys.argv[2]
|
||||
|
||||
release_info = get_release_info(tag)
|
||||
body = convert_body(release_info["body"])
|
||||
version = tag.removeprefix("v").removesuffix("-pre")
|
||||
date = release_info["published_at"]
|
||||
|
||||
release_info_str = f"<release version=\"{version}\" date=\"{date}\">\n"
|
||||
release_info_str += f" <description>\n"
|
||||
release_info_str += textwrap.indent(body, " " * 8)
|
||||
release_info_str += f" </description>\n"
|
||||
release_info_str += f" <url>https://github.com/zed-industries/zed/releases/tag/{tag}</url>\n"
|
||||
release_info_str += "</release>\n"
|
||||
|
||||
channel_releases_file = f"../../crates/zed/resources/flatpak/release-info/{channel}"
|
||||
with open(channel_releases_file) as f:
|
||||
old_release_info = f.read()
|
||||
with open(channel_releases_file, "w") as f:
|
||||
f.write(textwrap.indent(release_info_str, " " * 8) + old_release_info)
|
||||
print(f"Added release notes from {tag} to '{channel_releases_file}'")
|
||||
Reference in New Issue
Block a user