Утилита для упрощения генерации доков
This commit is contained in:
parent
ab38a0db50
commit
752604b20b
11 changed files with 234 additions and 45 deletions
90
SRV/utils/build_docs.py
Normal file
90
SRV/utils/build_docs.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Утилита для сборки Sphinx-документации проекта GONETS.
|
||||
|
||||
Позволяет из корня каталога `SRV/` одним запуском пересобрать HTML и Markdown
|
||||
версии документации. Пример использования:
|
||||
|
||||
poetry run python utils/build_docs.py
|
||||
|
||||
По умолчанию собираются оба билда (`html` и `markdown`). Повторные вызовы
|
||||
перезаписывают существующий вывод Sphinx.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Iterable, List
|
||||
|
||||
from sphinx.cmd.build import build_main
|
||||
|
||||
|
||||
ROOT_DIR = Path(__file__).resolve().parent.parent
|
||||
DOCS_DIR = ROOT_DIR / "docs"
|
||||
BUILD_ROOT = DOCS_DIR / "_build"
|
||||
|
||||
|
||||
def build_docs(builders: Iterable[str]) -> None:
|
||||
"""
|
||||
Вызывает Sphinx для каждого указанного билдера.
|
||||
|
||||
Args:
|
||||
builders: последовательность имён билдов Sphinx (например, ["html"]).
|
||||
|
||||
Raises:
|
||||
RuntimeError: если сборка для какого-либо билдера завершилась с ошибкой.
|
||||
"""
|
||||
for builder in builders:
|
||||
output_dir = BUILD_ROOT / builder
|
||||
output_dir.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
args: List[str] = [
|
||||
"-b",
|
||||
builder,
|
||||
str(DOCS_DIR),
|
||||
str(output_dir),
|
||||
]
|
||||
print(f"[build-docs] sphinx-build {' '.join(args)}")
|
||||
|
||||
exit_code = build_main(args)
|
||||
if exit_code != 0:
|
||||
raise RuntimeError(
|
||||
f"Sphinx build failed for builder '{builder}' with exit code {exit_code}"
|
||||
)
|
||||
|
||||
|
||||
def parse_args(argv: Iterable[str]) -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Сборка документации проекта GONETS (Sphinx)."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--builder",
|
||||
action="append",
|
||||
choices=("html", "markdown"),
|
||||
help="Ограничить сборку указанными билдерами (по умолчанию html и markdown).",
|
||||
)
|
||||
return parser.parse_args(argv)
|
||||
|
||||
|
||||
def main(argv: Iterable[str] | None = None) -> int:
|
||||
args = parse_args(argv or sys.argv[1:])
|
||||
builders = args.builder or ["html", "markdown"]
|
||||
|
||||
if not DOCS_DIR.exists():
|
||||
print(f"[build-docs] docs directory not found: {DOCS_DIR}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
try:
|
||||
build_docs(builders)
|
||||
except RuntimeError as exc:
|
||||
print(f"[build-docs] {exc}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
print("[build-docs] Documentation build completed successfully")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Loading…
Add table
Add a link
Reference in a new issue