官网去掉指向私有仓库的链接,完整更新日志折叠在页面内

This commit is contained in:
gentpan committed 2026-09-13 08:14:36 +05:00
1 parent 3117b69deb
commit a67d12120b
7 files changed
+164 -58

No files matched your search

+4
View File
@@ -24,6 +24,10 @@ APP="build/DerivedData/Build/Products/Release/OpenStats.app"
DMG_NAME="OpenStats-${VERSION}.dmg"
ZIP_NAME="OpenStats-${VERSION}.zip"
# 在线升级的更新摘要取自该版本的更新日志:发版前把 “## 未发布” 改成 “## 版本 · 日期”
grep -q "^## ${VERSION} · " CHANGELOG.md \
|| { echo "error: CHANGELOG.md 里没有 “## ${VERSION} · 日期” 标题,先把 “## 未发布” 改成正式版本。" >&2; exit 1; }
if [ -z "$SIGN_ID" ]; then
echo "error: 钥匙串里没有 Developer ID Application 证书,无法发布。" >&2
exit 1
+39 -16
View File
@@ -27,9 +27,8 @@ ROOT = pathlib.Path(__file__).resolve().parent.parent
RECENT_DAYS = 3
WEEKS = 26
KIND_EN = {"新增": "Added", "样式": "Style", "修复": "Fixed"}
KIND_EN = {"新增": "Added", "样式": "Style", "调整": "Changed", "修复": "Fixed"}
WEB_ITEMS_PER_DAY = 8
CHANGELOG_URL = "https://github.com/gentpan/OpenStats/blob/main/CHANGELOG.md"
# ── CHANGELOG.md ──────────────────────────────────────────────────────────
@@ -170,24 +169,48 @@ def inline_html(text):
return out
def web_day(release, day, lines):
items = [(g["kind"], item) for g in day["groups"] for item in g["items"]]
lines.append(' <article class="log__day">')
lines.append(f' <div class="log__head"><time datetime="{day["date"]}">{day["date"]}</time>'
f'<span class="log__tag">{html.escape(release["version"])}</span></div>')
lines.append(f' <p class="log__counts">{html.escape(counts(day, False))}</p>')
def item_lines(chunk, indent):
return [f'{indent}<li><span class="log__kind">{html.escape(kind)}</span>{inline_html(item)}</li>'
for kind, item in chunk]
lines.append(' <ul class="log__list">')
lines += item_lines(items[:WEB_ITEMS_PER_DAY], " ")
lines.append(" </ul>")
rest = items[WEB_ITEMS_PER_DAY:]
if rest:
# 仓库是私有的,完整条目直接折叠在官网上,不链接到 GitHub
lines.append(' <details class="log__rest">')
lines.append(f' <summary>还有 {len(rest)} 项</summary>')
lines.append(' <ul class="log__list">')
lines += item_lines(rest, " ")
lines.append(" </ul>")
lines.append(" </details>")
lines.append(" </article>")
def web_block(releases, indent=" "):
"""官网只展示已发布的版本:最近几天直接显示,更早的折叠。"""
released = [r for r in releases if r["version"]]
entries = day_entries(released)
lines = ["<!-- changelog:start -->",
"<!-- 由 Scripts/sync_changelog.py 从 CHANGELOG.md 生成,请勿手改。 -->",
'<div class="log">']
for release, day in day_entries(releases)[:RECENT_DAYS]:
label = release["version"] or "未发布"
items = [(g["kind"], item) for g in day["groups"] for item in g["items"]]
lines.append(' <article class="log__day">')
lines.append(f' <div class="log__head"><time datetime="{day["date"]}">{day["date"]}</time>'
f'<span class="log__tag">{html.escape(label)}</span></div>')
lines.append(f' <p class="log__counts">{html.escape(counts(day, False))}</p>')
lines.append(' <ul class="log__list">')
for kind, item in items[:WEB_ITEMS_PER_DAY]:
lines.append(f' <li><span class="log__kind">{html.escape(kind)}</span>{inline_html(item)}</li>')
lines.append(" </ul>")
if len(items) > WEB_ITEMS_PER_DAY:
lines.append(f' <a class="log__more" href="{CHANGELOG_URL}">还有 {len(items) - WEB_ITEMS_PER_DAY} 项 →</a>')
lines.append(" </article>")
for release, day in entries[:RECENT_DAYS]:
web_day(release, day, lines)
older = entries[RECENT_DAYS:]
if older:
lines.append(' <details class="log__older">')
lines.append(f' <summary>更早的更新({len(older)} 天)</summary>')
for release, day in older:
web_day(release, day, lines)
lines.append(" </details>")
lines.append("</div>")
lines.append("<!-- changelog:end -->")
return "\n".join(lines[:1] + [indent + line for line in lines[1:]])