mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-23 20:29:06 -05:00
generate_site.py writes the Starlight project in website/ and nothing else: mkdocs.yml, the MkDocs hooks, theme overrides and stylesheet go, and the wiki is written in Starlight's syntax. Both workflows set up Node with the official actions/setup-node pinned by commit, run npm ci from the committed lockfile, build with the strict link validator and check the result with validate_site.py. The search weighs a page by what it answers: Start here pages first, a system page's cards and file names before a guide citing them, deep guides, launchers, aliases and frozen copies after. Status badges, hash blocks and the export change lists leave the index. The ranking sits at the centre of a range where the 13 queries of search_gate.py all answer, in the search box itself. 839 pages, every URL and 45,611 ids match the MkDocs build. The tests read the Starlight content and syntax.
24 lines
1.1 KiB
JavaScript
24 lines
1.1 KiB
JavaScript
// Raw Pagefind results with their scores, to see why a page ranks where it does.
|
|
// node search_scores.mjs <base url> <query> [ranking json]
|
|
import { chromium } from 'playwright-core';
|
|
|
|
const [base, query, ranking] = process.argv.slice(2);
|
|
const browser = await chromium.launch({ executablePath: '/usr/bin/google-chrome' });
|
|
const page = await browser.newPage();
|
|
await page.goto(base, { waitUntil: 'networkidle' });
|
|
const rows = await page.evaluate(async ({ root, query, ranking, top }) => {
|
|
const pagefind = await import(`${root}pagefind/pagefind.js`);
|
|
if (ranking) await pagefind.options({ ranking: JSON.parse(ranking) });
|
|
const search = await pagefind.search(query);
|
|
const shown = search.results.slice(0, top);
|
|
const data = await Promise.all(shown.map((result) => result.data()));
|
|
return shown.map((result, index) => ({
|
|
score: result.score.toFixed(3),
|
|
url: data[index].url,
|
|
words: data[index].word_count,
|
|
hits: result.words.length,
|
|
}));
|
|
}, { root: base, query, ranking, top: Number(process.env.TOP || 8) });
|
|
for (const row of rows) console.log(row.score, row.words, row.hits, row.url);
|
|
await browser.close();
|