backstage / mkdocs-monorepo-plugin

✚ Build multiple documentation folders in a single Mkdocs. Designed for large codebases.
https://backstage.github.io/mkdocs-monorepo-plugin/
Apache License 2.0
319 stars 74 forks source link

after version 1.0.0, mkdocs with this plugin exits on a TypeError #113

Closed timconinx closed 10 months ago

timconinx commented 1 year ago

Dependencies managed through pipenv

[dev-packages]
mkdocs = "*"
mkdocs-monorepo-plugin = "1.0.1"
mkdocs-material = "*"
mkdocs-build-plantuml-plugin = "*"

[requires]
python_version = "3.10"

When monorepo-plugin's version is 1.0.0 the mkdocs serve starts normal, when it is higher or *, it exits on

ERROR   -  Error reading page 'modules/module1/messaging.md': join() missing 1 required positional argument: 'path'
Traceback (most recent call last):
  File "C:\Users\timcon\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\timcon\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\Scripts\mkdocs.EXE\__main__.py", line 7, in <module>
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\click\core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs\__main__.py", line 270, in serve_command
    serve.serve(**kwargs)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs\commands\serve.py", line 86, in serve
    builder(config)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs\commands\serve.py", line 67, in builder
    build(config, live_server=None if is_clean else server, dirty=is_dirty)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs\commands\build.py", line 322, in build
    _populate_page(file.page, config, files, dirty)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs\commands\build.py", line 165, in _populate_page
    page = config.plugins.on_pre_page(page, config=config, files=files)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs\plugins.py", line 567, in on_pre_page
    return self.run_event('pre_page', page, config=config, files=files)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs\plugins.py", line 507, in run_event
    result = method(item, **kwargs)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs_monorepo_plugin\plugin.py", line 71, in on_pre_page
    set_edit_url(config, page, self)
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs_monorepo_plugin\edit_uri.py", line 104, in set_edit_url
    page.edit_url = edit_url.build()
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs_monorepo_plugin\edit_uri.py", line 97, in build
    if self.__has_repo():
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs_monorepo_plugin\edit_uri.py", line 85, in __has_repo
    page_config_file_yaml = self.__get_page_config_file_yaml()
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs_monorepo_plugin\edit_uri.py", line 80, in __get_page_config_file_yaml
    abs_page_config_file_path = self.__get_page_config_file_path()
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs_monorepo_plugin\edit_uri.py", line 51, in __get_page_config_file_path
    alias = self.__get_page_dir_alias()
  File "C:\Users\timcon\.virtualenvs\moaprplatform-H8UYWFRq\lib\site-packages\mkdocs_monorepo_plugin\edit_uri.py", line 35, in __get_page_dir_alias
    alias = path.join(*parts)
TypeError: join() missing 1 required positional argument: 'path'

I tested this with a colleague (who uses a mac) who doesn't have this problem

The monorepo configuration follows the format

nav:
  - Intro: 'index.md'
  - Modules:
    - module1: '!include ./platform/golang/org/module1/mkdocs.yml'
    - module2: '!include ./platform/golang/org/module2/mkdocs.yml'

The modules themselves don't have any special configuration

timconinx commented 1 year ago

More information: The error occurs when a module starts with a site name with a '/' in it

site_name: org/module1

Seems to be problematic

timconinx commented 1 year ago

Update: changing line 35 in edit_uri.py to

alias = "/".join(parts)

fixes the issue (which seemed to already have been fixed in version 0.4.9)

So using / instead of the os specific os.path solves the problem... I don't know if you'd consider this a structural fix though 🤷‍♂️

agentbellnorm commented 10 months ago

@timconinx Is the name of the component org/module? Is that also the name in the software catalog? The catalog doesn't support / in the name (https://backstage.io/docs/features/software-catalog/descriptor-format#name-required) so I'd be hesitant to say that techdocs supports slashes.

I'd recommend just using the allowed characters -_.. Is that a viable option for you?

timconinx commented 10 months ago

Thank you for your answer. We changed the site-name's to include underscores instead of slashes. And we'll make a note not to include slashes in future sitenames.