Fix bilingual tutorial indexes and internal links (#209)

* Fix bilingual tutorial index generation

* Check relative Markdown links in CI

* Harden documentation regression checks

* Reduce link parser complexity

* Run link checks for every repository change

---------

Co-authored-by: LinuxDev9002 <i@littlefisher.me>
This commit is contained in:
云微
2026-07-14 04:10:51 -07:00
committed by GitHub
parent 8bfc912d6a
commit e08f604769
11 changed files with 456 additions and 37 deletions

View File

@@ -0,0 +1,49 @@
import re
import unittest
from pathlib import Path
from scripts.generate_toc import generate_toc, generate_toc_cn
ROOT = Path(__file__).resolve().parent.parent
LINK_PATTERN = re.compile(r"\]\((src/.+?)/README(?:\.zh)?\.md\)")
TRACING_LESSONS = {
"src/30-sslsniff",
"src/31-goroutine",
"src/33-funclatency",
"src/37-uprobe-rust",
"src/39-nginx",
"src/40-mysql",
"src/48-energy",
}
def lesson_links(markdown: str) -> set[str]:
return set(LINK_PATTERN.findall(markdown))
def subsection(markdown: str, heading: str, next_heading: str) -> str:
return markdown.split(f"\n\n{heading}:\n\n", 1)[1].split(
f"\n\n{next_heading}:\n\n", 1
)[0]
class TocParityTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.english = generate_toc(ROOT / "src", ROOT, ROOT)
cls.chinese = generate_toc_cn(ROOT / "src", ROOT, ROOT)
def test_english_and_chinese_indexes_contain_the_same_lessons(self):
self.assertSetEqual(lesson_links(self.english), lesson_links(self.chinese))
def test_chinese_tracing_subsection_contains_all_tracing_lessons(self):
english_tracing = lesson_links(subsection(self.english, "Tracing", "Security"))
chinese_tracing = lesson_links(subsection(self.chinese, "追踪", "安全"))
self.assertSetEqual(english_tracing, TRACING_LESSONS)
self.assertSetEqual(chinese_tracing, TRACING_LESSONS)
if __name__ == "__main__":
unittest.main()