Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate API documentation using Sphinx. #59

Merged
merged 10 commits into from
Mar 29, 2024
1 change: 1 addition & 0 deletions .github/workflows/analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches:
- 'main'
- 'analysis/**'
- 'test-docs'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't you want wildcards here? Or is there some specific branch called test-docs you have in mind?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh sorry, this was a branch that I was debugging in. Removed.


jobs:
algorithms:
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/sphinx.yml
AhmedBasem20 marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just now realized it's called sphinx.yml. Probably more descriptive would be documentation.yml or something.

Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Build & Deploy Documentation

on:
workflow_run:
workflows: [Algorithm Analysis]
types:
- completed
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Set up Python
id: setup_python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Cache pip
uses: actions/cache@v3
id: pip-cache
with:
key: ${{ runner.os }}-${{ env.pythonLocation }}-pip-${{ hashFiles('**/requirements.txt') }}
path: ${{ env.pythonLocation }}
if: steps.pip-cache.outputs.cache-hit != 'true'

- name: Install dependencies
run: |
pip install -r requirements.txt

# Action to download artifacts from a different workflow (analysis.yml)
- name: 'Download artifact'
uses: actions/github-script@v6
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.payload.workflow_run.id,
});
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == "Figures"
})[0];
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
let fs = require('fs');
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/Figures.zip`, Buffer.from(download.data));

- name: 'Unzip artifact'
run: unzip Figures.zip

- name: Build html
run: |
mkdir docs/_static
ls
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just for debugging?

mv *.pdf docs/_static/
sphinx-apidoc -o docs src
cd docs/
make html

- name: Upload docs artifact
uses: actions/upload-pages-artifact@v3
with:
path: 'docs/_build/html'

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
20 changes: 20 additions & 0 deletions docs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build

# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
36 changes: 36 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information

import os
import sys

sys.path.insert(0, os.path.abspath(".."))

project = 'TF2.4 IVIM MRI Code Collection'
copyright = '2024, OSIPI'
author = 'OSIPI team'

# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration

extensions = ["sphinx.ext.todo", "sphinx.ext.viewcode", "sphinx.ext.autodoc"]

templates_path = ['_templates']
exclude_patterns = ['Thumbs.db', '.DS_Store']

# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False

# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
html_show_copyright = False

# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output

html_theme = 'sphinx_rtd_theme'
html_static_path = ['_static']
45 changes: 45 additions & 0 deletions docs/figures.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
Algorithm Analysis Figures
===========

.. raw:: html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Algorithm Analysis Figures</title>
<style>

embed {
width: 90%;
margin-bottom: 4rem;
height: 100vh;
}
</style>
</head>
<body>
<h4>Diffusion grid for limited algorithms:</h4>
<embed src="_static/D_limited.pdf" type="application/pdf" frameborder="0" scrolling="auto">
<h4>Diffusion grid for all algorithms:</h4>
<embed src="_static/D.pdf" type="application/pdf" frameborder="0" scrolling="auto">

<h4>Perfusion grid for limited algorithms:</h4>
<embed src="_static/Dp_limited.pdf" type="application/pdf" frameborder="0" scrolling="auto">
<h4>Perfusion grid for all algorithms:</h4>
<embed src="_static/Dp.pdf" type="application/pdf" frameborder="0" scrolling="auto">

<h4>Perfusion fraction grid for limited algorithms:</h4>
<embed src="_static/f_limited.pdf" type="application/pdf" frameborder="0" scrolling="auto">
<h4>Perfusion fraction grid for all algorithms:</h4>
<embed src="_static/f.pdf" type="application/pdf" frameborder="0" scrolling="auto">

<h4>Fitted curves:</h4>
<embed src="_static/fitted_curves.pdf" type="application/pdf" frameborder="0" scrolling="auto">
<h4>Curve plot:</h4>
<embed src="_static/curve_plot.pdf" type="application/pdf" frameborder="0" scrolling="auto">
<h4>Algorithm Fitting duration:</h4>
<embed src="_static/durations.pdf" type="application/pdf" frameborder="0" scrolling="auto">

</body>
</html>
19 changes: 19 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
.. TF2.4 IVIM MRI Code Collection documentation master file, created by
sphinx-quickstart on Wed Mar 6 00:06:13 2024.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.

Welcome to TF2.4 IVIM MRI Code Collection's documentation!
==========================================================

.. toctree::
:maxdepth: 4
:caption: Contents:

figures
modules

Indices and tables
==================

* :ref:`modindex`
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ scienceplots
cvxpy
zenodo-get
pytest
tqdm
tqdm
sphinx
sphinx_rtd_theme