release 1.3.0: sticky bar suite version + Forgejo tag link

This commit is contained in:
Hernâni Marques 2026-07-18 17:03:48 +02:00
parent 9eac6e58b4
commit db8b474d39
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
6 changed files with 121 additions and 2 deletions

View file

@ -32,6 +32,8 @@ def ui(lang: str, key: str, **kwargs) -> str:
"jump_first_error": "Jump to first error",
"jump_first_warn": "Jump to first warning",
"generated": "generated",
"version": "version",
"source": "source",
"what_monitors": "What this monitors",
"what_monitors_title": "Expand: what this page checks",
@ -83,6 +85,8 @@ def ui(lang: str, key: str, **kwargs) -> str:
"jump_first_error": "Aller à la première erreur",
"jump_first_warn": "Aller au premier avertissement",
"generated": "généré",
"version": "version",
"source": "source",
"what_monitors": "Ce que cette page contrôle",
"what_monitors_title": "Déplier : ce que cette page vérifie",
@ -412,6 +416,8 @@ def sticky_bar_html(
first_err_href: str | None,
first_warn_href: str | None,
scope: dict[str, object] | None = None,
suite_version: str = "",
suite_version_url: str = "",
) -> str:
level = status_level(n_err, n_warn)
lang = "en"
@ -469,6 +475,20 @@ def sticky_bar_html(
f" · <code>{html.escape(suite_path)}</code>" if suite_path else ""
)
# Version badge (linked to Forgejo tag when available)
ver = (suite_version or "").strip()
ver_url = (suite_version_url or "").strip()
if ver:
if ver_url:
version_html = (
f'<a class="version-link" href="{html.escape(ver_url)}" '
f'title="{html.escape(ui(lang, "version"))} {html.escape(ver)}" '
f'rel="noopener noreferrer">{html.escape(ver)}</a>'
)
else:
version_html = f'<span class="version-link muted">{html.escape(ver)}</span>'
else:
version_html = ""
# Compact sticky row always visible; "Was geprüft wird" expands inside sticky-bar
return f"""
<div class="sticky-bar sticky-{level}" id="status-bar" role="status"
@ -482,6 +502,8 @@ def sticky_bar_html(
<span class="sep">·</span>
{warn_stat}
<span class="sep">·</span>
{version_html}
<span class="sep">·</span>
<span class="generated"
data-generated-iso="{html.escape(generated_iso)}"
title="{html.escape(generated_at)}">
@ -562,6 +584,13 @@ STICKY_CSS = """
.stat.warn { color: var(--warn); border-color: #664; background: #1a1608; }
.stat.muted { opacity: 0.55; font-weight: 600; }
a.stat:hover { text-decoration: underline; filter: brightness(1.15); }
.version-link {
font-weight: 700; font-size: 12px; color: var(--info);
text-decoration: none; padding: 1px 8px; border-radius: 3px;
border: 1px solid #234; background: #0a1520;
}
.version-link:hover { text-decoration: underline; filter: brightness(1.15); }
.version-link.muted { opacity: 0.7; color: #8ab; }
.generated { color: var(--dim); font-size: 12px; }
.generated time { color: #bbb; }
.generated .age { color: #888; margin-left: 4px; }
@ -739,6 +768,8 @@ def build_html(
generated_iso: str,
link_other: str | None,
page_label: str = "monitoring",
suite_version: str = "",
suite_version_url: str = "",
) -> str:
raw_lines = [strip_ansi(l).rstrip("\n") for l in log_text.splitlines()]
while raw_lines and not raw_lines[-1].strip():
@ -854,6 +885,8 @@ def build_html(
first_err_href=first_err_href,
first_warn_href=first_warn_href,
scope=scope,
suite_version=suite_version,
suite_version_url=suite_version_url,
)
return f"""<!DOCTYPE html>
@ -955,6 +988,8 @@ def build_redirect_html(
n_err: int = 0,
n_warn: int = 0,
log_text: str = "",
suite_version: str = "",
suite_version_url: str = "",
) -> str:
commit_short = commit[:12] if commit else "unknown"
link = path_err if path_err.endswith("/") else path_err + "/"
@ -985,6 +1020,8 @@ def build_redirect_html(
first_err_href=link,
first_warn_href=None,
scope=scope,
suite_version=suite_version,
suite_version_url=suite_version_url,
)
return f"""<!DOCTYPE html>
<html lang="{html.escape(lang if "lang" in dir() else "en")}">
@ -1039,6 +1076,16 @@ def main() -> None:
default="/monitoring_err/",
help="URL path for error page (redirect target)",
)
ap.add_argument(
"--suite-version",
default="",
help="Release tag shown in sticky bar (e.g. v1.3.0)",
)
ap.add_argument(
"--suite-version-url",
default="",
help="URL to tag on Forgejo (src/tag/...)",
)
ap.add_argument(
"--lang",
default="",
@ -1075,6 +1122,8 @@ def main() -> None:
n_err=n_err,
n_warn=n_warn,
log_text=log_text,
suite_version=getattr(args, "suite_version", "") or "",
suite_version_url=getattr(args, "suite_version_url", "") or "",
)
else:
html_out = build_html(
@ -1089,6 +1138,8 @@ def main() -> None:
generated_iso=generated_iso,
link_other=args.link_other or None,
page_label=args.page_label,
suite_version=getattr(args, "suite_version", "") or "",
suite_version_url=getattr(args, "suite_version_url", "") or "",
)
args.out.parent.mkdir(parents=True, exist_ok=True)