mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-29 23:27:19 -05:00
feat: build the site with Astro Starlight
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.
This commit is contained in:
1 parent
abe240073c
commit
123d698e43
64 files changed
+742
-3118
No files matched your search
@@ -0,0 +1,46 @@
|
||||
"""The generated site pages, for the tests that read them.
|
||||
|
||||
generate_site.py writes each page into the Starlight project's content
|
||||
collection, as .md or as .mdx when it uses a component. A test names a
|
||||
page by its docs path (``which-pack.md``) and gets whichever file holds it.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[1]
|
||||
CONTENT = REPO_ROOT / "website" / "src" / "content" / "docs"
|
||||
|
||||
|
||||
def require() -> Path:
|
||||
"""The content folder, or a skip when the site was not generated (a
|
||||
failure in CI, which generates it before the suite)."""
|
||||
if not (CONTENT / "index.md").is_file():
|
||||
if os.environ.get("CI"):
|
||||
raise AssertionError("CI generates the site before the suite")
|
||||
raise unittest.SkipTest("site not generated (python scripts/generate_site.py)")
|
||||
return CONTENT
|
||||
|
||||
|
||||
def page(name: str) -> Path:
|
||||
"""The file of a page named by its docs path."""
|
||||
stem = name[:-3] if name.endswith(".md") else name
|
||||
for suffix in (".md", ".mdx"):
|
||||
candidate = CONTENT / f"{stem}{suffix}"
|
||||
if candidate.is_file():
|
||||
return candidate
|
||||
return CONTENT / f"{stem}.md"
|
||||
|
||||
|
||||
def pages() -> list[Path]:
|
||||
"""Every page file, sorted."""
|
||||
root = require()
|
||||
return sorted(p for p in root.rglob("*") if p.suffix in (".md", ".mdx"))
|
||||
|
||||
|
||||
def name(path: Path) -> str:
|
||||
"""A page file's docs path, the name tests use for it."""
|
||||
return path.relative_to(CONTENT).with_suffix(".md").as_posix()
|
||||
Reference in new issue
Block a user