docs.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. """Handlers for the QMK documentation generator (docusaurus).
  2. """
  3. import shutil
  4. from subprocess import DEVNULL
  5. from milc import cli
  6. from qmk.constants import QMK_FIRMWARE
  7. DOCS_PATH = QMK_FIRMWARE / 'docs'
  8. BUILDDEFS_PATH = QMK_FIRMWARE / 'builddefs' / 'docs'
  9. BUILD_PATH = QMK_FIRMWARE / '.build'
  10. BUILD_DOCS_PATH = BUILD_PATH / 'docs'
  11. DOXYGEN_PATH = BUILD_DOCS_PATH / 'static' / 'doxygen'
  12. def run_docs_command(cmd, capture_output=False if cli.config.general.verbose else True):
  13. cli.run(['npm', 'run', '--prefix', BUILD_DOCS_PATH, cmd], capture_output=capture_output, check=True, stdin=DEVNULL)
  14. def prepare_docs_build_area():
  15. if BUILD_DOCS_PATH.exists():
  16. shutil.rmtree(BUILD_DOCS_PATH)
  17. cli.log.info('Copying "%s" folder to "%s"', BUILDDEFS_PATH, BUILD_DOCS_PATH)
  18. # ignore .gitignore'd folders when we're testing locally
  19. shutil.copytree(BUILDDEFS_PATH, BUILD_DOCS_PATH, ignore=shutil.ignore_patterns("node_modules", "build", ".docusaurus"))
  20. # When not verbose we want to hide all output
  21. args = {
  22. 'capture_output': False if cli.config.general.verbose else True,
  23. 'check': True,
  24. 'stdin': DEVNULL,
  25. }
  26. cli.log.info('Generating doxygen docs at %s', DOXYGEN_PATH)
  27. cli.run(['doxygen', 'Doxyfile'], **args)
  28. cli.log.info('Installing docusaurus dependencies')
  29. cli.run(['npm', 'ci', '--prefix', BUILD_DOCS_PATH], **args)