Add a github action to generate documentation using mkdocs

python mkdocs github action

3 min read | by Jordi Prats

If you have a tool that uses the python's click module for building a command line interface. Using mkdocs and mkdocs-click we can automatically generate documentation for it

First we will have to install mkdocs and mkdocs-click using pip as follows:

pip install mkdocs
pip install mkdocs-click

Using awstools as an example, we'll have to create the following files:

First, the general configuration (/mkdocs.yml)

site_name: awstools
theme: 
    name: readthedocs
    navigation_depth: 8
    nav_style: dark
    collapse_navigation: False

docs_dir: docs

markdown_extensions:
    - mkdocs-click

To generate pages, we'll need to create the markdown pages that we need. The index page it's going to be (/docs/index.md). For this example we are going to use it to directly hold the documentation we want to generate:

# CLI Reference

This page provides documentation for our command line tools.

::: mkdocs-click
    :module: awstools
    :command: awstools
    :depth: 4
    :style: table

We can test it running mkdocs serve, it will listen to 127.0.0.1:8000 so we can see how it will look like:

$ PYTHONPATH=$PWD mkdocs serve
INFO     -  Building documentation...
INFO     -  Cleaning site directory
INFO     -  Documentation built in 0.53 seconds
INFO     -  [19:28:44] Watching paths for changes: 'docs', 'mkdocs.yml'
INFO     -  [19:28:44] Serving on http://127.0.0.1:8000/
(...)

Finally, we can create github action (/.github/workflows/docs.yaml)to automatically update the documentation on each push to master. We are going to use Github pages for this:

name: build
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v2
        with:
          python-version: 3.x
      - run: pip install mkdocs
      - run: pip install mkdocs-click
      - run: pip install -r requirements.txt
      - run: export PYTHONPATH=$(pwd)
      - run: bash -c "PYTHONPATH=$PWD mkdocs gh-deploy --force --clean --verbose"

As soon as this action completes, if we have the github pages enabled (check Settings, Pages) we will be able to reach the documentation using an URL based on:



https://username.github.io/reponame/



For example, for the awstools repo belonging to jordiprats it is going to be:

https://jordiprats.github.io/awstools/

You can use this commit belonging to the python-matecurses project as an example since it contains all the changes needed for this.


Posted on 14/06/2022