release: v7.6.0

This commit is contained in:
Richard Macias
2026-02-27 19:45:31 -06:00
parent fec6fb1953
commit aeb633e51e

View File

@@ -204,47 +204,44 @@ def diff_apps(
# Table rendering for release notes # Table rendering for release notes
def make_app_table_row(app: dict[str, Any]) -> str: def make_app_table_row(app: dict[str, Any], change: str) -> str:
display_name = f'<a href="{get_application_url(app)}">{get_display_name(app)}</a>' display_name = f'<a href="{get_application_url(app)}">{get_display_name(app)}</a>'
obtainium_link = make_obtainium_link(app) obtainium_link = make_obtainium_link(app)
badge = f'<a href="{obtainium_link}">Add to Obtainium!</a>' badge = f'<a href="{obtainium_link}">Add to Obtainium!</a>' if change != "Removed" else "-"
std = "" if should_include_app(app, "standard") else "" std = "" if should_include_app(app, "standard") else ""
ds = "" if should_include_app(app, "dual-screen") else "" ds = "" if should_include_app(app, "dual-screen") else ""
return f"| {display_name} | {badge} | {std} | {ds} |" return f"| {display_name} | {badge} | {change} | {std} | {ds} |"
TABLE_HEADER = ( CHANGES_TABLE_HEADER = (
"| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |\n" "| Application | Add to Obtainium | Change | Standard | Dual-Screen |\n"
"|------------------|------------------|---------------------------|----------------------|" "|-------------|------------------|--------|----------|-------------|"
) )
def generate_app_table(apps: list[dict[str, Any]], group_by_category: bool = False) -> str: def generate_changes_table(
if not apps: added: list[dict[str, Any]],
changed: list[dict[str, Any]],
removed: list[dict[str, Any]],
) -> str:
rows: list[tuple[str, dict[str, Any]]] = []
for app in added:
rows.append(("Added", app))
for app in changed:
rows.append(("Updated", app))
for app in removed:
rows.append(("Removed", app))
if not rows:
return "" return ""
if not group_by_category: rows.sort(key=lambda r: get_display_name(r[1]).lower())
lines = [TABLE_HEADER]
for app in sorted(apps, key=lambda a: get_display_name(a).lower()): lines = [CHANGES_TABLE_HEADER]
lines.append(make_app_table_row(app)) for change, app in rows:
lines.append(make_app_table_row(app, change))
return "\n".join(lines) return "\n".join(lines)
# Group by category
categorized: defaultdict[str, list[dict[str, Any]]] = defaultdict(list)
for app in apps:
for cat in app.get("categories", ["Other"]):
categorized[cat].append(app)
sections: list[str] = []
for category in sorted(categorized.keys()):
sections.append(f"### {category}\n")
sections.append(TABLE_HEADER)
for app in sorted(categorized[category], key=lambda a: get_display_name(a).lower()):
sections.append(make_app_table_row(app))
sections.append("")
return "\n".join(sections)
def _git_log_lines(since_tag: str | None, pretty_format: str) -> list[str]: def _git_log_lines(since_tag: str | None, pretty_format: str) -> list[str]:
cmd = ["git", "log"] cmd = ["git", "log"]
@@ -328,20 +325,9 @@ def generate_release_notes(
lines.append(f"- {contributor}") lines.append(f"- {contributor}")
lines.append("") lines.append("")
if added: if added or changed or removed:
lines.append("## New Apps\n") lines.append("## App Changes\n")
lines.append(generate_app_table(added, group_by_category=True)) lines.append(generate_changes_table(added, changed, removed))
lines.append("")
if changed:
lines.append("## App Updates\n")
lines.append(generate_app_table(changed, group_by_category=False))
lines.append("")
if removed:
lines.append("## Removed Apps\n")
for app in sorted(removed, key=lambda a: get_display_name(a).lower()):
lines.append(f"- {get_display_name(app)}")
lines.append("") lines.append("")
return "\n".join(lines) return "\n".join(lines)