pokeemmo/.github/docs_validate/inclusive_summary.py

65 lines
1.9 KiB
Python
Executable File

#!/usr/bin/python3
"""
Checks that all documentation pages that should be mentioned in
`docs/SUMMARY.md` are mentioned the file
"""
import glob
import re
import os
from pathlib import Path
errorLines = []
if not os.path.exists("Makefile"):
errorLines.append("Please run this script from your root folder.")
summaryFile = Path("docs/SUMMARY.md")
if not errorLines:
if not summaryFile.is_file():
errorLines.append("docs/SUMMARY.md missing")
summaryContents = []
if not errorLines:
with open(summaryFile, 'r', encoding='UTF-8') as file:
entry_pattern = re.compile(r" *\- \[[^\]]*\]\(([^\)]*)\)\n")
lineNo = 0
while line:=file.readline():
lineNo = lineNo + 1
if line == "# Summary\n" or line == "\n":
pass
elif match:=entry_pattern.match(line):
if "" != match.group(1):
summaryContents.append(Path(match.group(1)))
else:
if not errorLines:
errorLines.append("## Unexpected lines in docs/SUMMARY.md")
errorLines.append(f"- {lineNo}: {line.strip()}")
if not errorLines:
for pathName in glob.glob("**/*.md", root_dir="docs", recursive=True):
path = Path(pathName)
if path == Path("SUMMARY.md"):
pass
elif path == Path("changelogs/template.md"):
pass
elif path in summaryContents:
pass
else:
if not errorLines:
errorLines.append("## `docs/**/*.md` files present but not mentioned in `docs/SUMMARY.md`")
errorLines.append("- " + str(path))
if errorLines:
for line in errorLines:
print(line)
if 'GITHUB_STEP_SUMMARY' in os.environ:
with open(os.environ['GITHUB_STEP_SUMMARY'], 'w', encoding='UTF-8') as file:
for line in errorLines:
file.write(line)
file.write('\n')
quit(1)