Skip to main content

The core MkDocs plugin used by Backstage's TechDocs as a wrapper around multiple MkDocs plugins and Python Markdown extensions

Project description

mkdocs-techdocs-core

This is the base Mkdocs plugin used when using Mkdocs with Spotify's TechDocs. It is written in Python and packages all of our Mkdocs defaults, such as theming, plugins, etc in a single plugin.

Package on PyPI

Usage

Requires Python version >= 3.7

$ pip install mkdocs-techdocs-core

Once you have installed the mkdocs-techdocs-core plugin, you'll need to add it to your mkdocs.yml.

site_name: Backstage Docs

nav:
  - Home: index.md
  - Developing a Plugin: developing-a-plugin.md

plugins:
  - techdocs-core

Development

Running Locally

You can install this package locally using pip and the --editable flag used for making developing Python packages.

pip install --editable .

You'll then have the techdocs-core package available to use in Mkdocs and pip will point the dependency to this folder.

Linting

We use black as our linter. Please run it against your code before submitting a pull request.

pip install black
black .

Note: This will write to all Python files in src/ with the formatted code. If you would like to only check to see if it passes, simply append the --check flag.

Testing Depedencies End-to-End

Much of the value of this plugin lies in its dependencies, on which there are implicit dependencies upstream in the Backstage TechDocs frontend plugin. Each time you update a pinned dependency, it's important to test that generated documentation can be loaded and parsed as expected in the Backstage frontend. The recommended way to do so is the following:

  1. Make the expected dependency change locally in requirements.txt.
  2. Clone the techdocs-container image and, within the cloned directory, copy the entire contents of your local version of mkdocs-techdocs-core, e.g. named local-mkdocs-techdocs-core.
  3. Just before the RUN pip install command in techdocs-container's Dockerfile, add a COPY command that copies the contents of your modified mkdocs-techdocs-core directory into the container's file system. Something like: COPY ./local-mkdocs-techdocs-core/ /local-mkdocs-techdocs-core/
  4. Modify the RUN pip install... command to install an editable version of the copied local plugin, rather than the specific version. Something like... RUN pip install --upgrade pip && pip install -e /local-mkdocs-techdocs-core
  5. Build the modified image: docker build -t mkdocs:local-dev .
  6. Modify your local Backstage instance to use your locally built techdocs-container instead of using the published image by setting the following configuration:
techdocs:
  generator:
    runIn: "docker"
    dockerImage: "mkdocs:local-dev"

Release

  1. Update the Changelog.
  2. Bump up the version number in setup.py which triggers the release workflow on GitHub Actions to publish a new version in PyPI.

MkDocs plugins and extensions

The TechDocs Core MkDocs plugin comes with a set of extensions and plugins that mkdocs supports. Below you can find a list of all extensions and plugins that are included in the TechDocs Core plugin:

Plugins:

  • search: A search plugin is provided by default with MkDocs which uses lunr.js as a search engine.
  • mkdocs-monorepo-plugin: This plugin enables you to build multiple sets of documentation in a single MkDocs project. It is designed to address writing documentation in Spotify's largest and most business-critical codebases (typically monoliths or monorepos).

Extensions:

  • admonition: Admonitions, also known as call-outs, are an excellent choice for including side content without significantly interrupting the document flow. Material for MkDocs provides several different types of admonitions and allows for the inclusion and nesting of arbitrary content.

  • toc: The Table of Contents extension generates a Table of Contents from a Markdown document and adds it into the resulting HTML document. This extension is included in the standard Markdown library.

  • pymdown: PyMdown Extensions is a collection of extensions for Python Markdown. All extensions are found under the module namespace of pymdownx.

    • caret: Caret is an extension that is syntactically built around the ^ character. It adds support for inserting superscripts and adds an easy way to place text in an <ins> tag.
    • critic: Critic adds handling and support of Critic Markup.
    • details: Details creates collapsible elements with <details> and <summary> tags.
    • emoji: Emoji makes adding emoji via Markdown easy 😄.
    • superfences: SuperFences is like Python Markdown's fences, but better. Nest fences under lists, admonitions, and other syntaxes. You can even create special custom fences for content like UML.
    • inlinehilite: InlineHilite highlights inline code: from module import function as func.
    • magiclink: MagicLink linkafies URL and email links without having to wrap them in Markdown syntax. Also, shortens repository issue, pull request, and commit links automatically for popular code hosting providers. You can even use special shorthand syntax to link to issues, diffs, and even mention people
    • mark: Mark allows you to mark words easily.
    • smartsymbols: SmartSymbols inserts commonly used Unicode characters via simple ASCII representations: =/= → ≠.
    • highlight: Highlight allows you to configure the syntax highlighting of SuperFences and InlineHilite. Also passes standard Markdown indented code blocks through the syntax highlighter.
    • extra: Extra is just like Python Markdown's Extra package except it uses PyMdown Extensions to substitute similar extensions.
    • tabbed: Tabbed allows for tabbed Markdown content.
    • tasklist: Tasklist allows inserting lists with check boxes.
    • tilde: Tilde is syntactically built around the ~ character. It adds support for inserting subscripts and adds an easy way to place text in a <del> tag.
  • markdown_inline_graphviz: A Python Markdown extension replaces inline Graphviz definitions with inline SVGs or PNGs. Activate the inline_graphviz extension using the usage instructions.

  • plantuml_markdown: This plugin implements a block extension which can be used to specify a PlantUML diagram which will be converted into an image and inserted in the document.

    • Note that the format svg_object is not supported for rendering diagrams. Read more in the TechDocs troubleshooting section.
  • mdx_truly_sane_lists: An extension for Python-Markdown that makes lists truly sane. Features custom indents for nested lists and fix for messy linebreaks and paragraphs between lists.

Changelog

0.2.3

  • Upgrade mkdocs-material and its dependencies

0.2.2

  • Update plantuml-markdown version to 3.5.0 for image maps support

0.2.1

  • Fix run-time module 'pyparsing' has no attribute 'downcaseTokens' error as a result of shifting python dependencies.
  • Update to latest mkdocs-monorepo-plugin, which allows use of .yaml file extensions and non-slug-like site_names in monorepos.

0.2.0

0.1.2

  • Fix the dependency version of Markdown to ensure GraphViz SVG rendering works.

0.1.1

  • Ensure required mkdocs-monorepo-plugin is compatible with Mkdocs 1.2.x.

0.1.0

  • Improved dependency compatibility with other mkdocs plugins.
  • Upgraded mkdocs minimum to 1.2.2

0.0.16

  • Reused data from requirements.txt file in install_requires of setup.py. #24

0.0.15

  • Upgrade monorepo to track latest patch, includes various bug fixes. #22

0.0.14

  • Upgrade plantuml-markdown to 3.4.2 with support for external file sources. #18

0.0.13

  • Fixed issue where the whole temp directory could be included in the built site output. #7

0.0.12

0.0.11

0.0.10

  • Pin Markdown version to fix issue with Graphviz

0.0.9

  • Change development status to 3 - Alpha

0.0.8

  • Superfences and Codehilite doesn't work very well together (squidfunk/mkdocs-material#1604) so therefore the codehilite extension is replaced by pymdownx.highlight
  • Uses pymdownx extensions v.7.1 instead of 8.0.0 to allow legacy_tab_classes config. This makes the techdocs core plugin compatible with the usage of tabs for grouping markdown with the following syntax:
    ```java tab="java 2"
        public void function() {
            ....
        }
    ```

as well as the new

    === "Java"

    ```java
    public void function() {
        ....
    }
    ```

The pymdownx extension will be bumped too 8.0.0 in the near future.

  • pymdownx.tabbed is added to support tabs to group markdown content, such as codeblocks.

  • "PyMdown Extensions includes three extensions that are meant to replace their counterpart in the default Python Markdown extensions." Therefore some extensions has been taken away in this version that comes by default from pymdownx.extra which is added now (https://facelessuser.github.io/pymdown-extensions/usage_notes/#incompatible-extensions)

0.0.7

  • Fix an issue with configuration of emoji support

0.0.6

  • Further adjustments to versions to find ones that are compatible

0.0.5

  • Downgrade some versions of markdown extensions to versions that are more stable

0.0.4

  • Added support for more mkdocs extensions
    • mkdocs-material
    • mkdocs-monorepo-plugin
    • plantuml-markdown
    • markdown_inline_graphviz_extension
    • pygments
    • pymdown-extensions

License

Copyright 2020-2021 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mkdocs-techdocs-core-0.2.3.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mkdocs_techdocs_core-0.2.3-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file mkdocs-techdocs-core-0.2.3.tar.gz.

File metadata

  • Download URL: mkdocs-techdocs-core-0.2.3.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for mkdocs-techdocs-core-0.2.3.tar.gz
Algorithm Hash digest
SHA256 c26432bca33a76b073a0dd5e26565fa6fdccf8002787049f79ce1e52bd299205
MD5 8441863245a6a09425cd691d1aba529c
BLAKE2b-256 57a82f4808baaecc6c30481ac29abccdb03b66df9335c5ca2d6f41208973444b

See more details on using hashes here.

File details

Details for the file mkdocs_techdocs_core-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: mkdocs_techdocs_core-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for mkdocs_techdocs_core-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9f53691c6847de270e6ca7a3ce613e118f0b40e00431d0fc2effe2cc16f48eaa
MD5 e3616750ebfebdc2a8e4c16501a91d2a
BLAKE2b-256 a8d9910edd5fa6ad821d6ce280faaa0f529c9edf8a500e3b23c98bbbc45a3cdc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page