Automating versioning#
We are now ready to integrate sphinx-multiversion
into our automated deployment workflow. You
probably want to release a new version of your documentation when you’ve released a new version of
your API.
We’ll modify our existing workflow so that it runs on a release, and uses sphinx-multiversion
to
generate and publish your latest release’s documentation (find the completed file
here):.
Open up .github/workflows/docs.yaml
. First, modify the workflow trigger so that it runs on a new
release:
on:
release:
types: [published]
Since we need to display the content of other git branches and tags, we need to have all history
available. On the step of checking-out our repo, configure the Checkout V3
action to fetch all
history for all branches and tags:
- uses: actions/checkout@v3
with:
fetch-depth: 0
As expected, you need to install sphinx_multiversion
in Install dependencies
step:
- name: Install dependencies
run: |
pip install -e .
pip install sphinx furo sphinx_multiversion
Next, modify the step Sphinx build
to use the sphinx_multiversion
command to build your
documentation:
- name: Sphinx build
run: |
sphinx-multiversion docs docs/_build/html
In the previous chapter, we saw how we need to
have a landing index.html
page to redirect visitors of our website to the main
branch. We need to include this logic in our workflow.
Copy the logic of index.html
to a file called gh-pages-redirect.html
under docs/_templates/
and commit it to your main
branch. This way we ensure we have a template ready to be copied every
time we regenerate our docs with the action.
# from the project root
cp ./docs/_build/html/index.html docs/_templates/gh-pages-redirect.html
git add docs/_templates/gh-pages-redirect.html
git commit -m "Add a template for gh-pages-redirect"
git push origin main
Then add another step to your action to create an index.html
:
- name: Create index.html
run: |
cp docs/_templates/gh-pages-redirect.html docs/_build/html/index.html
The updated “Publish Sphinx Documentation” GitHub Action using sphinx-multiversion#
Your file .github/workflows/docs.yaml
should now look like this:
name: Publish Sphinx Documentation
on:
release:
types: [published]
jobs:
publish_sphinx_docs:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Install dependencies
run: |
pip install -e .
pip install sphinx furo sphinx_multiversion
- name: Sphinx build
run: |
sphinx-multiversion docs docs/_build/html
- name: Create index.html
run: |
cp docs/_templates/gh-pages-redirect.html docs/_build/html/index.html
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
publish_branch: gh-pages
github_token: {% raw %}${{ secrets.GITHUB_TOKEN }}{% endraw %}
publish_dir: docs/_build/html
force_orphan: true
Now, commit your updated workflow to main
:
# from the project root
git add .github/workflows/docs.yaml
git commit -m "Use sphinx-multiversion in docs action"
git push origin main
To test this, make a small change to docs/index.rst
, commit and push it to main
.
Welcome to Sphinxy's documentation!
===================================
Explore Sphinxy's documentation by browsing the different modules.
git add docs/index.rst
git commit -m "Update index doc"
git push origin main
From your repo’s GitHub page, hit the link “Create a new release”. From the tags dropdown menu,
write down the next tag version to create v0.0.2
. Write a brief description and hit
Publish Release
.
From the Actions
tab on your repo’s GitHub URL, you should see that the
Publish Sphinx Documentation
workflow has kicked off. Inspect the job details to verify that
sphinx-multiversion
has run.
When the pages-build-deployment
is done, refresh your GitHub Pages URL. You should see your
update has taken place on the main
version as well as v0.0.2
of your docs.
{: .hint }
🙌 You have now reached the
10-automate-versioning
part of the tutorial. If not, check out that branch and
gh-pages-10
branch for gh-pages
and
continue from there.
🎉 Congratulations! 🎉
We are done! We recommend you take a look at the Further reading section if you want to learn more about documentation generation.
[Previous: Versioning](./9-versioning.md){: .btn .float-left} [Next: Glossary](./11-glossary.md){: .btn .btn-purple .float-right}