mkdocs-material/docs/setup/setting-up-versioning.md

176 lines
5.5 KiB
Markdown
Raw Normal View History

# Setting up versioning
Material for MkDocs makes it easy to deploy multiple versions of your project
documentation by integrating with external utilities that add those capabilities
2021-10-10 20:22:13 +03:00
to MkDocs, i.e. [mike]. When deploying a new version, older versions of your
documentation remain untouched.
2021-10-10 20:22:13 +03:00
[mike]: https://github.com/jimporter/mike
## Configuration
### Versioning
2023-09-14 20:09:18 +03:00
<!-- md:version 7.0.0 -->
<!-- md:utility [mike] -->
2021-10-10 20:22:13 +03:00
[mike] makes it easy to deploy multiple versions of your project documentation.
It integrates natively with Material for MkDocs and can be enabled via
`mkdocs.yml`:
``` yaml
extra:
version:
2021-02-22 23:01:04 +03:00
provider: mike
```
2021-10-10 20:22:13 +03:00
This renders a version selector in the header:
2021-10-05 00:36:31 +03:00
<figure markdown>
2021-10-10 20:22:13 +03:00
[![Version selector preview]][Version selector preview]
2021-10-05 00:36:31 +03:00
<figcaption markdown>
2021-10-10 20:22:13 +03:00
Check out the versioning example to see it in action
[squidfunk.github.io/mkdocs-material-example-versioning][version example]
2020-12-21 19:38:58 +03:00
</figcaption>
</figure>
2021-10-10 20:22:13 +03:00
!!! quote "[Why use mike?]"
mike is built around the idea that once you've generated your docs for a
particular version, you should never need to touch that version again. This
means you never have to worry about breaking changes in MkDocs, since your
old docs (built with an old version of MkDocs) are already generated and
sitting in your `gh-pages` branch.
While mike is flexible, it's optimized around putting your docs in a
`<major>.<minor>` directory, with optional aliases (e.g. `latest` or `dev`)
to particularly notable versions. This makes it easy to make permalinks to
whatever version of the documentation you want to direct people to.
2021-10-10 20:22:13 +03:00
[Version selector preview]: ../assets/screenshots/versioning.png
[version example]: https://squidfunk.github.io/mkdocs-material-example-versioning/
[Why use mike?]: https://github.com/jimporter/mike#why-use-mike
### Stay on the same page when switching versions
When the user chooses a version in the version selector, they usually want to go
to the page corresponding to the page they were previously viewing. Material for
MkDocs implements this behavior by default, but there are a few caveats:
- the [`site_url`] must be set correctly in `mkdocs.yml`. See the ["Publishing a
new version"](#publishing-a-new-version) section for an example.
- you must be viewing the site at that URL (and not locally, for example).
- the redirect happens via JavaScript and there is no way to know which page you
will be redirected to ahead of time.
[`site_url`]: https://www.mkdocs.org/user-guide/configuration/#site_url
### Version warning
2023-09-14 20:09:18 +03:00
<!-- md:version 8.0.0 -->
<!-- md:flag customization -->
If you're using versioning, you might want to display a warning when the user
2021-10-10 22:04:22 +03:00
visits any other version than the latest version. Using [theme extension],
you can [override the `outdated` block][overriding blocks]:
2021-07-18 18:57:45 +03:00
``` html
{% extends "base.html" %}
{% block outdated %}
You're not viewing the latest version.
2021-12-11 16:30:07 +03:00
<a href="{{ '../' ~ base_url }}"> <!-- (1)! -->
2021-05-30 13:39:20 +03:00
<strong>Click here to go to latest.</strong>
</a>
{% endblock %}
```
2023-09-14 20:09:18 +03:00
1. Given this value for the `href` attribute, the link will always redirect to
2021-10-10 13:19:14 +03:00
the root of your site, which will then redirect to the latest version. This
ensures that older versions of your site do not depend on a specific alias,
e.g. `latest`, to allow for changing the alias later on without breaking
earlier versions.
2021-06-17 09:51:16 +03:00
This will render a version warning above the header:
2021-10-10 22:04:22 +03:00
[![Version warning preview]][Version warning preview]
2021-10-10 22:04:22 +03:00
The default version is identified by the `latest` alias. If you wish to set
another alias as the latest version, e.g. `stable`, add the following lines
to `mkdocs.yml`:
``` yaml
extra:
version:
default: stable # (1)!
```
1. You can also define multiple aliases as the default version, e.g. `stable`
and `development`.
``` yaml
extra:
version:
default:
- stable
- development
```
Now every version that has the `stable` and `development` aliases will not
display the version warning.
Make sure one alias matches the [default version], as this is where users are
redirected to.
2021-10-10 22:04:22 +03:00
[theme extension]: ../customization.md#extending-the-theme
[overriding blocks]: ../customization.md#overriding-blocks
[Version warning preview]: ../assets/screenshots/version-warning.png
[default version]: #setting-a-default-version
## Usage
2023-09-14 20:09:18 +03:00
While this section outlines the basic workflow for publishing new versions,
it's best to check out [mike's documentation][mike] to make yourself familiar
2021-10-10 22:04:22 +03:00
with its mechanics.
### Publishing a new version
2020-10-25 19:03:19 +03:00
If you want to publish a new version of your project documentation, choose a
version identifier and update the alias set as the default version with:
```
2020-10-25 19:03:19 +03:00
mike deploy --push --update-aliases 0.1 latest
```
Note that every version will be deployed as a subdirectory of your `site_url`,
which you should set explicitly. For example, if your `mkdocs.yml` contains:
``` yaml
site_url: 'https://docs.example.com/' # Trailing slash is recommended
```
the documentation will be published to URLs such as:
2021-04-11 19:09:04 +03:00
- _docs.example.com/0.1/_
- _docs.example.com/0.2/_
- ...
2020-10-25 19:03:19 +03:00
### Setting a default version
2021-10-10 22:04:22 +03:00
When starting with [mike], a good idea is to set an alias as a default version,
e.g. `latest`, and when publishing a new version, always update the alias to
point to the latest version:
2020-10-25 19:03:19 +03:00
```
mike set-default --push latest
```
2021-10-10 22:04:22 +03:00
When publishing a new version, [mike] will create a redirect in the root of
2020-10-25 19:03:19 +03:00
your project documentation to the version associated with the alias:
_docs.example.com_ :octicons-arrow-right-24: _docs.example.com/0.1_