Skip to content

feat(docs): versioned Sphinx docs with sphinx-multiversion#89

Open
rederik76 wants to merge 5 commits into
mainfrom
docs/sphinx-versioning
Open

feat(docs): versioned Sphinx docs with sphinx-multiversion#89
rederik76 wants to merge 5 commits into
mainfrom
docs/sphinx-versioning

Conversation

@rederik76

@rederik76 rederik76 commented May 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR introduces a new script-driven versioned docs build path after we found that a direct sphinx-multiversion approach did not work reliably in our environment.

Rather than depending on sphinx-multiversion, this change provides an explicit local/CI flow that preserves the versioning behavior we wanted (version selector, curated release set, preview support, GitHub Pages publish shape).

What changed

  • Added a shared versioned docs build pipeline:
    • docs/build_versioned_docs.sh
    • docs/build_versioned_docs.py
  • Added deterministic version selection logic in docs/select_versions.py:
    • latest patch for last 5 minor series in current major
    • latest release for last 3 major versions
    • sorted descending
  • Updated docs rendering/version switcher:
    • main is published as current
    • generated versions.json drives sidebar options
    • version links target index.html directly (avoids directory listing behavior in local file browsing)
  • Updated CI workflow (.github/workflows/main-docs.yml) to use the script-based version build path.
  • Updated docs/Makefile with:
    • html-multiversion
    • html-multiversion-preview
  • Added docs/README.md documenting docs commands, local workflow, and versioning behavior.
  • Updated .gitignore for local docs virtualenv patterns.

Context

We attempted a sphinx-multiversion implementation first, but it proved brittle for our setup (compatibility/path behavior issues). This PR captures the stable alternative and keeps the intended docs-versioning UX.

Test plan

  • make -C docs html
  • make -C docs html-multiversion
  • Verify docs/build/html/index.html redirects to current/index.html
  • Verify version switcher:
    • shows current first
    • shows releases in descending order
    • links resolve to <version>/index.html without directory listing behavior
  • Validate workflow updates reference bash docs/build_versioned_docs.sh

- Add sphinx-multiversion to requirements-docs.txt; fix sphinx-autoapi
  package name (was gitsphinx-autoapi — typo)
- docs/conf.py: read release from VERSION file instead of hard-coded string;
  add sphinx_multiversion extension with SMV_TAG_WHITELIST env-var-driven
  tag filter; inject versions.html into RTD sidebar via html_sidebars
- docs/select_versions.py: CI helper that selects tags to build —
  latest patch of each major version + last 5 minor series; writes
  SMV_TAG_WHITELIST to $GITHUB_ENV
- docs/_templates/versions.html: RTD-styled version dropdown template
  using sphinx-multiversion's versions / current_version context
- main-docs.yml: trigger on tag pushes; fetch full history and tags;
  run select_versions.py before build; replace make html with
  sphinx-multiversion; add root index.html redirect to main/
@rederik76 rederik76 requested a review from haillew as a code owner May 23, 2026 06:09
@rederik76 rederik76 self-assigned this May 23, 2026
@rederik76 rederik76 linked an issue May 23, 2026 that may be closed by this pull request
1 task
- drop sphinx-multiversion integration and Sphinx extension wiring
- add shared local/CI versioned docs builder (build_versioned_docs.sh + build_versioned_docs.py) with clean rebuild + worktree pruning
- keep version selection rules via select_versions.py and output descending releases
- publish main as current, generate versions.json, and update sidebar switcher/template to use explicit index.html links
- update docs workflow to use the new script path and remove SMV-specific dependencies/patching
- add docs README guidance for make targets and local build/testing workflow
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE]: Versioned Sphinx documentation with sphinx-multiversion

1 participant