diff --git a/docs/desktop/index.html b/docs/desktop/index.html index 38233004..016906b9 100644 --- a/docs/desktop/index.html +++ b/docs/desktop/index.html @@ -62,6 +62,51 @@ main { max-width: 1200px; margin: 0 auto; padding: 1.5rem; } h1 { margin: 0 0 0.25rem; font-size: 1.5rem; } .subtitle { color: var(--muted); margin: 0; } + .page-heading { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.65rem 0.85rem; + margin: 0 0 0.25rem; + } + .page-heading h1 { margin: 0; } + .channel-badge { + display: inline-block; + font-size: 0.72rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 0.22rem 0.6rem; + border-radius: 999px; + line-height: 1.2; + white-space: nowrap; + } + .channel-badge-nightly { + background: #ddf4ff; + color: #0969da; + } + .channel-badge-pr { + background: #dafbe1; + color: #1a7f37; + } + .channel-badge-release { + background: #fff1e5; + color: #bc4c00; + } + @media (prefers-color-scheme: dark) { + .channel-badge-nightly { + background: #12263a; + color: #58a6ff; + } + .channel-badge-pr { + background: #12261e; + color: #3fb950; + } + .channel-badge-release { + background: #2d1f14; + color: #f0883e; + } + } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); @@ -80,6 +125,50 @@ .card:hover { border-color: var(--link); } .card h2 { margin: 0 0 0.5rem; font-size: 1.1rem; } .card p { margin: 0; color: var(--muted); font-size: 0.9rem; } + .listing-card { + display: flex; + flex-direction: column; + gap: 0.75rem; + } + .listing-card:hover { border-color: var(--link); } + .listing-card .listing-main { + text-decoration: none; + color: inherit; + flex: 1; + } + .listing-card .listing-main h2 { margin: 0 0 0.4rem; font-size: 1.1rem; } + .listing-card .listing-meta { + margin: 0; + color: var(--muted); + font-size: 0.9rem; + } + .listing-card .listing-meta + .listing-meta { margin-top: 0.2rem; } + .listing-card .listing-extra { + font-size: 0.85rem; + color: var(--link); + text-decoration: none; + } + .listing-card .listing-extra:hover { text-decoration: underline; } + .listing-history { + list-style: none; + margin: 0.65rem 0 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 0.35rem; + } + .listing-history li { + display: flex; + flex-wrap: wrap; + gap: 0.35rem 0.75rem; + font-size: 0.85rem; + color: var(--muted); + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + } + .listing-history .commit { + color: var(--text); + font-weight: 600; + } .profile-fact-groups { display: flex; flex-direction: column; diff --git a/docs/desktop/nightly/index.html b/docs/desktop/nightly/index.html new file mode 100644 index 00000000..f9bc9341 --- /dev/null +++ b/docs/desktop/nightly/index.html @@ -0,0 +1,549 @@ + + + + + + Nightly benchmarks — Status App Benchmarks + + + +
Status App Benchmarks
+
Nightly

Windows Nightly Benchmark Dashboard

Nightly charts have not been published to this path yet.

After the next successful nightly publish, this page is replaced with the full rolling dashboard. Older charts may still appear under docs/desktop/ until that cleanup.

+ + diff --git a/docs/desktop/pr/index.html b/docs/desktop/pr/index.html index 7d52b8a1..bce23e36 100644 --- a/docs/desktop/pr/index.html +++ b/docs/desktop/pr/index.html @@ -62,6 +62,51 @@ main { max-width: 1200px; margin: 0 auto; padding: 1.5rem; } h1 { margin: 0 0 0.25rem; font-size: 1.5rem; } .subtitle { color: var(--muted); margin: 0; } + .page-heading { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.65rem 0.85rem; + margin: 0 0 0.25rem; + } + .page-heading h1 { margin: 0; } + .channel-badge { + display: inline-block; + font-size: 0.72rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 0.22rem 0.6rem; + border-radius: 999px; + line-height: 1.2; + white-space: nowrap; + } + .channel-badge-nightly { + background: #ddf4ff; + color: #0969da; + } + .channel-badge-pr { + background: #dafbe1; + color: #1a7f37; + } + .channel-badge-release { + background: #fff1e5; + color: #bc4c00; + } + @media (prefers-color-scheme: dark) { + .channel-badge-nightly { + background: #12263a; + color: #58a6ff; + } + .channel-badge-pr { + background: #12261e; + color: #3fb950; + } + .channel-badge-release { + background: #2d1f14; + color: #f0883e; + } + } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); @@ -80,6 +125,50 @@ .card:hover { border-color: var(--link); } .card h2 { margin: 0 0 0.5rem; font-size: 1.1rem; } .card p { margin: 0; color: var(--muted); font-size: 0.9rem; } + .listing-card { + display: flex; + flex-direction: column; + gap: 0.75rem; + } + .listing-card:hover { border-color: var(--link); } + .listing-card .listing-main { + text-decoration: none; + color: inherit; + flex: 1; + } + .listing-card .listing-main h2 { margin: 0 0 0.4rem; font-size: 1.1rem; } + .listing-card .listing-meta { + margin: 0; + color: var(--muted); + font-size: 0.9rem; + } + .listing-card .listing-meta + .listing-meta { margin-top: 0.2rem; } + .listing-card .listing-extra { + font-size: 0.85rem; + color: var(--link); + text-decoration: none; + } + .listing-card .listing-extra:hover { text-decoration: underline; } + .listing-history { + list-style: none; + margin: 0.65rem 0 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 0.35rem; + } + .listing-history li { + display: flex; + flex-wrap: wrap; + gap: 0.35rem 0.75rem; + font-size: 0.85rem; + color: var(--muted); + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + } + .listing-history .commit { + color: var(--text); + font-weight: 600; + } .profile-fact-groups { display: flex; flex-direction: column; @@ -475,6 +564,6 @@
Status App Benchmarks
-

Pull request benchmarks

Persistent benchmark history for explicitly tested pull requests.

+
Pull request

Pull request benchmarks

Persistent benchmark history for explicitly tested pull requests.

diff --git a/docs/desktop/releases/index.html b/docs/desktop/releases/index.html index 723a79e2..3c699cf2 100644 --- a/docs/desktop/releases/index.html +++ b/docs/desktop/releases/index.html @@ -62,6 +62,51 @@ main { max-width: 1200px; margin: 0 auto; padding: 1.5rem; } h1 { margin: 0 0 0.25rem; font-size: 1.5rem; } .subtitle { color: var(--muted); margin: 0; } + .page-heading { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.65rem 0.85rem; + margin: 0 0 0.25rem; + } + .page-heading h1 { margin: 0; } + .channel-badge { + display: inline-block; + font-size: 0.72rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 0.22rem 0.6rem; + border-radius: 999px; + line-height: 1.2; + white-space: nowrap; + } + .channel-badge-nightly { + background: #ddf4ff; + color: #0969da; + } + .channel-badge-pr { + background: #dafbe1; + color: #1a7f37; + } + .channel-badge-release { + background: #fff1e5; + color: #bc4c00; + } + @media (prefers-color-scheme: dark) { + .channel-badge-nightly { + background: #12263a; + color: #58a6ff; + } + .channel-badge-pr { + background: #12261e; + color: #3fb950; + } + .channel-badge-release { + background: #2d1f14; + color: #f0883e; + } + } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); @@ -80,6 +125,50 @@ .card:hover { border-color: var(--link); } .card h2 { margin: 0 0 0.5rem; font-size: 1.1rem; } .card p { margin: 0; color: var(--muted); font-size: 0.9rem; } + .listing-card { + display: flex; + flex-direction: column; + gap: 0.75rem; + } + .listing-card:hover { border-color: var(--link); } + .listing-card .listing-main { + text-decoration: none; + color: inherit; + flex: 1; + } + .listing-card .listing-main h2 { margin: 0 0 0.4rem; font-size: 1.1rem; } + .listing-card .listing-meta { + margin: 0; + color: var(--muted); + font-size: 0.9rem; + } + .listing-card .listing-meta + .listing-meta { margin-top: 0.2rem; } + .listing-card .listing-extra { + font-size: 0.85rem; + color: var(--link); + text-decoration: none; + } + .listing-card .listing-extra:hover { text-decoration: underline; } + .listing-history { + list-style: none; + margin: 0.65rem 0 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 0.35rem; + } + .listing-history li { + display: flex; + flex-wrap: wrap; + gap: 0.35rem 0.75rem; + font-size: 0.85rem; + color: var(--muted); + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + } + .listing-history .commit { + color: var(--text); + font-weight: 600; + } .profile-fact-groups { display: flex; flex-direction: column; @@ -475,6 +564,6 @@
Status App Benchmarks
-

Release benchmarks

RC-to-final performance history, isolated by release series.

No published runs yet.

+
Release

Release benchmarks

RC-to-final performance history, isolated by release series.

No published runs yet.

diff --git a/scripts/site_generator.py b/scripts/site_generator.py index 051809ef..13da638b 100644 --- a/scripts/site_generator.py +++ b/scripts/site_generator.py @@ -20,6 +20,12 @@ from regression_report import ScenarioSummary, Violation CHARTS_DIR = 'charts' SITE_TITLE = 'Status App Benchmarks' +STATUS_APP_REPO = 'https://github.com/status-im/status-app' +CHANNEL_BADGE = { + 'nightly': ('Nightly', 'channel-badge-nightly'), + 'pr': ('Pull request', 'channel-badge-pr'), + 'release': ('Release', 'channel-badge-release'), +} MACHINE_FIELD_LABELS = { 'hostname': 'Host', 'windows_version': 'Windows', @@ -113,6 +119,51 @@ def _page_styles() -> str: main { max-width: 1200px; margin: 0 auto; padding: 1.5rem; } h1 { margin: 0 0 0.25rem; font-size: 1.5rem; } .subtitle { color: var(--muted); margin: 0; } + .page-heading { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.65rem 0.85rem; + margin: 0 0 0.25rem; + } + .page-heading h1 { margin: 0; } + .channel-badge { + display: inline-block; + font-size: 0.72rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 0.22rem 0.6rem; + border-radius: 999px; + line-height: 1.2; + white-space: nowrap; + } + .channel-badge-nightly { + background: #ddf4ff; + color: #0969da; + } + .channel-badge-pr { + background: #dafbe1; + color: #1a7f37; + } + .channel-badge-release { + background: #fff1e5; + color: #bc4c00; + } + @media (prefers-color-scheme: dark) { + .channel-badge-nightly { + background: #12263a; + color: #58a6ff; + } + .channel-badge-pr { + background: #12261e; + color: #3fb950; + } + .channel-badge-release { + background: #2d1f14; + color: #f0883e; + } + } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); @@ -131,6 +182,50 @@ def _page_styles() -> str: .card:hover { border-color: var(--link); } .card h2 { margin: 0 0 0.5rem; font-size: 1.1rem; } .card p { margin: 0; color: var(--muted); font-size: 0.9rem; } + .listing-card { + display: flex; + flex-direction: column; + gap: 0.75rem; + } + .listing-card:hover { border-color: var(--link); } + .listing-card .listing-main { + text-decoration: none; + color: inherit; + flex: 1; + } + .listing-card .listing-main h2 { margin: 0 0 0.4rem; font-size: 1.1rem; } + .listing-card .listing-meta { + margin: 0; + color: var(--muted); + font-size: 0.9rem; + } + .listing-card .listing-meta + .listing-meta { margin-top: 0.2rem; } + .listing-card .listing-extra { + font-size: 0.85rem; + color: var(--link); + text-decoration: none; + } + .listing-card .listing-extra:hover { text-decoration: underline; } + .listing-history { + list-style: none; + margin: 0.65rem 0 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 0.35rem; + } + .listing-history li { + display: flex; + flex-wrap: wrap; + gap: 0.35rem 0.75rem; + font-size: 0.85rem; + color: var(--muted); + font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + } + .listing-history .commit { + color: var(--text); + font-weight: 600; + } .profile-fact-groups { display: flex; flex-direction: column; @@ -542,6 +637,18 @@ def _layout(title: str, body: str) -> str: """ +def _channel_badge_html(channel: str) -> str: + label, css_class = CHANNEL_BADGE.get(channel, (channel.title(), 'channel-badge-nightly')) + return f'{escape(label)}' + + +def _heading_with_badge(heading: str, channel: str) -> str: + return ( + f'
{_channel_badge_html(channel)}' + f'

{escape(heading)}

' + ) + + def _chart_iframe(chart_path: str, title: str) -> str: return ( f'