release 1.3.0: sticky bar suite version + Forgejo tag link
This commit is contained in:
parent
9eac6e58b4
commit
db8b474d39
6 changed files with 121 additions and 2 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue