Update documentation build process for multiversion support

This commit is contained in:
Alexander Minges 2025-07-10 10:47:46 +02:00
parent 720ae4a93e
commit 951be79e1f
Signed by: Athemis
SSH key fingerprint: SHA256:TUXshgulbwL+FRYvBNo54pCsI0auROsSEgSvueKbkZ4
8 changed files with 173 additions and 10 deletions

View file

@ -55,7 +55,7 @@ build-docs:
- make multiversion - make multiversion
artifacts: artifacts:
paths: paths:
- docs/build/html/ - docs/build/multiversion/html/
expire_in: 1 week expire_in: 1 week
only: only:
- branches - branches
@ -68,7 +68,7 @@ pages:
- build-docs - build-docs
script: script:
- mkdir -p public - mkdir -p public
- cp -r docs/build/html/* public/ - cp -r docs/build/multiversion/html/* public/
# Create a redirect from root to latest version # Create a redirect from root to latest version
- echo '<meta http-equiv="refresh" content="0; url=./main/">' > public/index.html - echo '<meta http-equiv="refresh" content="0; url=./main/">' > public/index.html
artifacts: artifacts:

View file

@ -7,20 +7,38 @@ SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build SPHINXBUILD ?= sphinx-build
SOURCEDIR = source SOURCEDIR = source
BUILDDIR = build BUILDDIR = build
MULTIVERSIONDIR = build/multiversion
# Put it first so that "make" without argument is like "make help". # Put it first so that "make" without argument is like "make help".
help: help:
@echo "Sphinx documentation build commands:"
@echo ""
@echo "Single-version builds (output: build/html/):"
@echo " html Build HTML documentation for current version"
@echo " clean Clean single-version build directory"
@echo ""
@echo "Multiversion builds (output: build/multiversion/html/):"
@echo " multiversion Build multiversion HTML documentation"
@echo " multiversion-clean Clean and rebuild multiversion documentation"
@echo ""
@echo "Utility commands:"
@echo " clean-all Clean both single and multiversion build directories"
@echo ""
@echo "Standard Sphinx help:"
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
# Multiversion build targets # Multiversion build targets
multiversion: multiversion:
sphinx-multiversion "$(SOURCEDIR)" "$(BUILDDIR)/html" $(SPHINXOPTS) $(O) sphinx-multiversion "$(SOURCEDIR)" "$(MULTIVERSIONDIR)/html" $(SPHINXOPTS) $(O)
multiversion-clean: multiversion-clean:
rm -rf "$(BUILDDIR)/html" rm -rf "$(MULTIVERSIONDIR)/html"
sphinx-multiversion "$(SOURCEDIR)" "$(BUILDDIR)/html" $(SPHINXOPTS) $(O) sphinx-multiversion "$(SOURCEDIR)" "$(MULTIVERSIONDIR)/html" $(SPHINXOPTS) $(O)
.PHONY: help Makefile multiversion multiversion-clean clean-all:
rm -rf "$(BUILDDIR)" "$(MULTIVERSIONDIR)"
.PHONY: help Makefile multiversion multiversion-clean clean-all
# Catch-all target: route all unknown targets to Sphinx using the new # Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).

View file

@ -32,12 +32,12 @@ if "%1" == "multiversion-clean" goto multiversion-clean
goto end goto end
:multiversion :multiversion
sphinx-multiversion %SOURCEDIR% %BUILDDIR%\html %SPHINXOPTS% %O% sphinx-multiversion %SOURCEDIR% %BUILDDIR%\multiversion\html %SPHINXOPTS% %O%
goto end goto end
:multiversion-clean :multiversion-clean
rmdir /s /q %BUILDDIR%\html 2>nul rmdir /s /q %BUILDDIR%\html 2>nul
sphinx-multiversion %SOURCEDIR% %BUILDDIR%\html %SPHINXOPTS% %O% sphinx-multiversion %SOURCEDIR% %BUILDDIR%\multiversion\html %SPHINXOPTS% %O%
goto end goto end
:help :help

View file

@ -2,7 +2,7 @@
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions"> <div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version"> <span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> Read the Docs</span> <span class="fa fa-book"> Read the Docs</span>
v: {{ current_version }} v: {{ current_version.name.lstrip('v') }}
<span class="fa fa-caret-down"></span> <span class="fa fa-caret-down"></span>
</span> </span>
<div class="rst-other-versions"> <div class="rst-other-versions">

View file

@ -61,6 +61,9 @@ smv_released_pattern = r'^refs/tags/v\d+\.\d+(\.\d+)?$'
# Output directory for multiversion builds # Output directory for multiversion builds
smv_outputdir_format = '{ref.name}' smv_outputdir_format = '{ref.name}'
# Root output directory for multiversion (will be build/multiversion/html)
smv_root_path = '../build/multiversion/html'
# Latest version - check if main exists, fallback to master # Latest version - check if main exists, fallback to master
smv_latest_version = 'main' smv_latest_version = 'main'

View file

@ -0,0 +1,141 @@
Contributing
============
We welcome contributions to **doi2dataset**! This guide provides information for developers who want to contribute to the project or build the documentation locally.
Building Documentation
----------------------
The documentation is built using Sphinx with multiversion support, allowing for documentation of multiple versions (branches and tags) simultaneously.
Prerequisites
~~~~~~~~~~~~~
Before building the documentation, install the documentation dependencies:
.. code-block:: bash
pip install -r requirements-doc.txt
Local Building
~~~~~~~~~~~~~~
Single Version (Current Branch)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To build documentation for the current branch only:
.. code-block:: bash
cd docs
make html
The generated documentation will be available in ``docs/build/html/``.
Multiversion Documentation
^^^^^^^^^^^^^^^^^^^^^^^^^^
To build documentation for all versions (branches and tags):
.. code-block:: bash
cd docs
make multiversion
This will build documentation for:
- Main development branches (``main``, ``master``, ``develop``)
- Version tags matching the pattern ``v*.*.*``
Multiversion Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~
The multiversion setup can be customized in ``docs/source/conf.py``:
- ``smv_branch_whitelist``: Pattern for included branches
- ``smv_tag_whitelist``: Pattern for included tags
- ``smv_latest_version``: Default version to display
The generated documentation will be available in ``docs/build/multiversion/html/``.
Deployment
~~~~~~~~~~
Documentation is automatically built and deployed via GitLab CI/CD:
- Triggered on pushes to main branches and version tags
- Deployed to GitLab Pages
- Accessible at your project's Pages URL
Testing
-------
Tests are implemented with pytest and provide comprehensive coverage of core functionalities.
Running Tests
~~~~~~~~~~~~~
To run the test suite:
.. code-block:: bash
pytest
Or using the Python module syntax:
.. code-block:: bash
python -m pytest
Code Coverage
~~~~~~~~~~~~~
The project includes code coverage analysis using pytest-cov. To run tests with coverage:
.. code-block:: bash
pytest --cov=.
Generate a detailed HTML coverage report:
.. code-block:: bash
pytest --cov=. --cov-report=html
This creates a ``htmlcov`` directory. Open ``htmlcov/index.html`` in a browser to view the detailed coverage report.
Development Setup
-----------------
1. Fork the repository
2. Clone your fork locally
3. Install development dependencies:
.. code-block:: bash
pip install -r requirements-dev.txt
4. Make your changes
5. Run tests to ensure everything works
6. Submit a pull request
Code Style
----------
Please follow the existing code style and conventions used in the project. Make sure to:
- Write clear, descriptive commit messages
- Add tests for new functionality
- Update documentation as needed
- Follow Python best practices
Submitting Changes
------------------
1. Create a new branch for your feature or bug fix
2. Make your changes with appropriate tests
3. Ensure all tests pass
4. Update documentation if needed
5. Submit a pull request with a clear description of your changes
Thank you for contributing to **doi2dataset**!

View file

@ -38,4 +38,5 @@ Key Features:
installation installation
usage usage
modules modules
contributing
faq faq

View file

@ -9,7 +9,7 @@ Clone the repository from GitHub by running the following commands in your termi
.. code-block:: bash .. code-block:: bash
git clone https://github.com/your_username/doi2dataset.git git clone https://git.uni-due.de/cbm343e/doi2dataset.git
cd doi2dataset cd doi2dataset
Using pip (if available) Using pip (if available)