From eb67073a052b2ca653d2a3e0857ce58d3a976d92 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 20 Oct 2026 11:26:57 -0700 Subject: [PATCH 1/3] ci: redirect the nightly Pages root to the benchmark charts The site only wrote bench/index.html, so https://moq-dev.github.io/moq/ returned 404. Co-Authored-By: Claude Opus 5.5 --- sh/gh/bench-publish.sh | 2 +- sh/gh/bench-report.py | 7 +++++++ sh/gh/bench-report.test.py | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/sh/gh/bench-publish.sh b/sh/gh/bench-publish.sh index 6ee65b8e41f..6c6b91ee709 100755 --- a/sh/gh/bench-publish.sh +++ b/sh/gh/bench-publish.sh @@ -22,7 +22,7 @@ case ${1:-} in fi git worktree add "$2" gh-pages just gh benchmark-report index "$2" - git -C "$2" add bench/index.html .nojekyll + git -C "$2" add index.html bench/index.html .nojekyll if ! git -C "$2" diff --cached --quiet; then git -C "$2" -c user.name=github-actions -c user.email=github-actions@users.noreply.github.com \ commit -m 'Update benchmark landing page' diff --git a/sh/gh/bench-report.py b/sh/gh/bench-report.py index 5dc89fc973c..829f038f985 100644 --- a/sh/gh/bench-report.py +++ b/sh/gh/bench-report.py @@ -169,6 +169,13 @@ def index(directory):

Each series keeps its source and payload shape. A failed suite contributes no point. Metrics and local reproduction

+''') + # Benchmarks are the only report so far; the root forwards to them instead of 404ing. + (directory / 'index.html').write_text(''' + +MoQ nightly reports +MoQ nightly benchmarks + ''') (directory / '.nojekyll').touch() diff --git a/sh/gh/bench-report.test.py b/sh/gh/bench-report.test.py index ea5da4426c7..15a47e5f40a 100644 --- a/sh/gh/bench-report.test.py +++ b/sh/gh/bench-report.test.py @@ -92,6 +92,7 @@ def test_landing_page_keeps_existing_charts_and_history(self): (chart / 'data.js').write_text('history') report.index(self.root) self.assertIn('costs/', (chart.parent / 'index.html').read_text()) + self.assertIn('url=bench/', (self.root / 'index.html').read_text()) self.assertEqual((chart / 'data.js').read_text(), 'history') self.assertTrue((self.root / '.nojekyll').exists()) From 1b9dacb55a2162a4c727447f2f112bb8efce58f7 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 20 Oct 2026 11:28:55 -0700 Subject: [PATCH 2/3] ci: list every nightly report on the Pages root Each gh-pages writer owns one directory, so the root links whichever reports exist, labeled by their page titles, instead of forwarding only to bench/. Co-Authored-By: Claude Opus 5.5 --- sh/gh/bench-report.py | 14 +++++++++++--- sh/gh/bench-report.test.py | 8 +++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/sh/gh/bench-report.py b/sh/gh/bench-report.py index 829f038f985..f0079a3621b 100644 --- a/sh/gh/bench-report.py +++ b/sh/gh/bench-report.py @@ -170,11 +170,19 @@ def index(directory): Metrics and local reproduction

''') - # Benchmarks are the only report so far; the root forwards to them instead of 404ing. + # gh-pages hosts every nightly report, each in its own directory with its own writer. + reports = [] + for page in sorted(directory.glob('*/index.html')): + title = re.search(r'(.*?)', page.read_text(), re.S) + label = title.group(1).strip() if title else page.parent.name + reports.append(f'
  • {html.escape(label)}
  • ') (directory / 'index.html').write_text(''' - + MoQ nightly reports -MoQ nightly benchmarks + +

    MoQ nightly reports

    +
      ''' + ''.join(reports) + '''
    +

    Nightly runs

    ''') (directory / '.nojekyll').touch() diff --git a/sh/gh/bench-report.test.py b/sh/gh/bench-report.test.py index 15a47e5f40a..9ae23747df8 100644 --- a/sh/gh/bench-report.test.py +++ b/sh/gh/bench-report.test.py @@ -92,7 +92,13 @@ def test_landing_page_keeps_existing_charts_and_history(self): (chart / 'data.js').write_text('history') report.index(self.root) self.assertIn('costs/', (chart.parent / 'index.html').read_text()) - self.assertIn('url=bench/', (self.root / 'index.html').read_text()) + relays = self.root / 'relays' + relays.mkdir() + (relays / 'index.html').write_text('Relay smoke') + report.index(self.root) + landing = (self.root / 'index.html').read_text() + self.assertIn('MoQ benchmarks', landing) + self.assertIn('Relay smoke', landing) self.assertEqual((chart / 'data.js').read_text(), 'history') self.assertTrue((self.root / '.nojekyll').exists()) From e7f3077d4ae5c151eb79cbb06a9c9b541595506a Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 20 Oct 2026 11:38:10 -0700 Subject: [PATCH 3/3] docs(bench): point the trend site at git.moq.dev Co-Authored-By: Claude Opus 5.5 --- bench/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bench/README.md b/bench/README.md index abd7f6ecba2..f1777f9aeb4 100644 --- a/bench/README.md +++ b/bench/README.md @@ -344,14 +344,14 @@ The shared Rust benchmark nightly invocation measures both targets in quick mode ## Nightly trends -The trend site will be at once the -maintainer enables GitHub Pages with **Source: GitHub Actions**. The Nightly +The trend site is at , linked from the +[nightly reports](https://git.moq.dev/) root with every other report. The Nightly workflow keeps history on one `gh-pages` branch and deploys the generated `github-action-benchmark` charts explicitly. The publisher runs only on `main`, serializes history writes, and leaves regression alerts and comments disabled. -Enabling Pages is a separate repository setting; merging the workflow does not -change it. Until it is enabled, the Nightly's Benchmark site job still records -history on `gh-pages`, then fails at deployment. +Re-running its job in place fails, because the earlier attempt's +`github-pages` artifact remains; delete that artifact first or wait for the +next Nightly. The charts include these measurements: