Build documentation in multiple repos into one site.
Project description
mkdocs-multirepo-plugin
Build documentation in multiple repos into one site.
If you like this plugin and want me to continue maintaining it in my free time, please buy me a 🍺!
Features
- Distributed Documentation: Keep docs close to the code but findable on one site.
- Seperates Concerns: Separate documentation from other files that go into building your mkdocs site (e.g., theme overrides).
- Fast: Documentation is imported asynchronously, using asyncio.
- Simple: All configuration is done within the
plugins
ornav
sections of your mkdocs.yml file. - Use in Production: The plugin can be used in a CI/CD pipeline.
OS Support
Dependencies
Newer versions of Git preferred.
Setup
Install plugin using pip:
pip install mkdocs-multirepo-plugin
Next, add the plugin to your mkdocs.yml
plugins:
- multirepo
The plugin introduces the !import statement in your config's nav section. You can now use the import statement to add a documentation section, where the docs are pulled from the source repo.
!import Statement Sections
- {url}: Only required part of !import statement (e.g.,
https://github.com/{user}/{repo name}
). - branch={branch}: Tells multirepo what branch to use. Defaults to master if not supplied.
- docs_dir={path}: The path to the docs directory for the section. Defaults to docs/* (a glob) if not supplied.
- multi_docs={True | False}: If set to True, all docs directories will be imported (more info here).
- config={filename}.yml: Tells multirepo the name of the config file, containing configuration for the plugin. The default value is also
mkdocs.yml
. This config file can live within the docs directory or in the parent directory. - extra_imports=["{filename | path | glob}"]: Use this if you want to import additional directories or files along with the docs.
nav:
- Home: 'index.md'
- MicroService: '!import {url}?branch={branch}&docs_dir={path}&multi_docs={True | False}&config={filename}.yml'
MicroService mkdocs.yml (located within the docs directory or the parent directory)
edit_uri: /blob/master/
nav:
- Home: index.md
Things to Note:
- If using !import in the nav, the imported repo must have a mkdocs.yml (or another filename with a ?config={filename}.yml) file with a nav section located in either the docs directory or the root directory.
- nav takes precedence over repos (see below).
- {path} can also be a glob (e.g.,
docs/*
).
If you'd prefer MkDocs to build the site nav based on the directory structure, you can define your other repos within the plugins section.
Note: Cleanup should be set to
false
when developing (i.e., when callingmkdocs serve
). This will prevent importing repos multiple times with livereload.
plugins:
- search
- multirepo:
# (optional) tells multirepo to cleanup the temporary directory after site is built.
cleanup: true
repos:
- section: Backstage
# you can define the edit uri path
import_url: 'https://github.com/backstage/backstage?edit_uri=/blob/master/'
- section: Monorepo
import_url: 'https://github.com/backstage/mkdocs-monorepo-plugin?edit_uri=/blob/master/'
- section: 'Techdocs-cli'
# note that the branch is still specified in the url
import_url: 'https://github.com/backstage/techdocs-cli?branch=main&edit_uri=/blob/main/'
- section: FastAPI
import_url: 'https://github.com/tiangolo/fastapi?docs_dir=docs/en/docs/*'
- section: Monorepo Multi Docs
import_url: https://github.com/backstage/mkdocs-monorepo-plugin?multi_docs=True&docs_dir=sample-docs/*
- section: 'Django REST'
import_url: 'https://github.com/encode/django-rest-framework'
- section: 'Cookiecutter Pypackage'
import_url: 'https://github.com/zillionare/cookiecutter-pypackage'
- section: 'Pydantic'
import_url: 'https://github.com/samuelcolvin/pydantic'
Once you're done configuring, run either mkdocs serve
or mkdocs build
. This will import
the docs into a temporary directory and build the site.
Additional Features
α Multiple Docs Directories in Imported Repo (Alpha)
If an imported repo is a monorepo (i.e., has multiple docs directories), multirepo automatically includes them in the site when multi_docs
is set to True
.
Suppose Microservice's directory structure is this.
├───mkdocs.yml (required if nav section is defined)
├───README.md
├───project1
│ └───src
│ └───docs
│ └───assets
| index.md
| technical.md
├───project2
│ └───src
│ └───docs
│ index.md
By default, this directory turns into this.
├───mkdocs.yml (required if nav section is defined)
├───README.md
├───project1
│ └───assets
| index.md
| technical.md
├───project2
│ index.md
Note:
- If using the nav !import statement, make sure the nav paths reflect the new directory structure, which doesn't include docs directories.
- edit_urls will still map to underlying markdown file based on the actual directory structure in the remote's repository.
Use in CI/CD
If you want to use the plugin within Azure Pipelines or Github Actions, you'll need to define an AccessToken
environment variable for the mkdocs build
step. The AccessToken
should have access to clone
all repos.
Azure Pipeline Step Example
- script: |
source ./env/bin/activate
mkdocs build
env:
AccessToken: $(System.AccessToken)
displayName: 'Build MkDocs Site'
β Development in Imported Repos (Beta)
For mkdocs serve
to work properly in an imported repo (a repo that is imported in the parent site), you will need to add the multirepo plugin within the imported repo as well as the parent repo, including the following configuration.
Notes:
- You will also need to have
plugins
andpackages
the parent repo uses installed within your localvenv
.- See documentation on the set git command for
sparse-checkout
if you are confused with whatdirs
can contain.
plugins:
multirepo:
imported_repo: true
url: https://github.com/squidfunk/mkdocs-material
section_name: Backstage
# directories and files needed for building the site
# any path in docs will be included. For example, index.md is the
# homepage of the parent site
dirs: ["material/*", "mkdocs.yml", "docs/index.md"]
custom_dir: material
yml_file: mkdocs.yml # this can also be a relative path
branch: master
Writers can now run mkdocs serve
within their local repo, using the main site's configuration, custom theming and features. This means all development is distributed, without technical writers having to switch repos.
α Deep Navigation Imports
plugins:
- multirepo:
deep_nav_imports: true
This toggle allows for !import
statements to be placed in deeper levels of nav. Slightly less performant on build.
nav:
- Home: 'index.md'
- Category:
- Subcategory:
- MyImportedDocs: '!import ...'
Examples
Running Tests
Tests were modeled off of mkdocs-monorepo-plugin. To run the test suite you'll need:
- Python
- Git
- Docker
- MkDocs
Integration Testing
The command below will use Docker to run our test suites in numerous Python versions. It may take some time on first run, but should be very fast afterwards. When you're done, feel free to run docker prune
to clear them from your local cache. We use the slim
versions of the public python
images from Docker Hub.
$ ./__tests__/test.sh
For faster tests, you can opt to run in Python 3.7 rather than all supported Python versions:
$ PYTHON_37_ONLY=1 ./__tests__/test.sh
Unit Testing
$ pip install -r requirements.txt
$ python -m unittest tests.unittests
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mkdocs-multirepo-plugin-reedsutliff-0.4.4.tar.gz
.
File metadata
- Download URL: mkdocs-multirepo-plugin-reedsutliff-0.4.4.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.7.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 560eaced4d0372da2caac8dfc5a2177fc0819e9f15f0b11404acd28bbd0a1955 |
|
MD5 | c7ce5b5a8de2474d1d487fcf06236c77 |
|
BLAKE2b-256 | 69a202efa83cd4534e45339f06d93dc5ae8c088d4ee47c6ccdc27585b237274e |
File details
Details for the file mkdocs_multirepo_plugin_reedsutliff-0.4.4-py3-none-any.whl
.
File metadata
- Download URL: mkdocs_multirepo_plugin_reedsutliff-0.4.4-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.7.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73f9b432493fffecc383b110c34635d9a58d595a6e556f6ae4050477c4d79999 |
|
MD5 | 764ef3dc660bc183d8361c4376677c2c |
|
BLAKE2b-256 | 72d5b130b542980ef74b5f090f9752fd1d8855e0455aca286a2653d269dd1f28 |