Skip to content

Merge branch 'main' of https://github.com/petercorke/machinevision-to… #30

Merge branch 'main' of https://github.com/petercorke/machinevision-to…

Merge branch 'main' of https://github.com/petercorke/machinevision-to… #30

Workflow file for this run

name: Docs
on:
push:
branches: [main]
paths:
- docs/**
- src/**
- packages/mvtb-data/**
- pyproject.toml
- .github/workflows/docs.yml
pull_request:
branches: [main]
paths:
- docs/**
- src/**
- packages/mvtb-data/**
- pyproject.toml
- .github/workflows/docs.yml
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
# Only one deployment at a time; don't cancel an in-progress deploy
concurrency:
group: pages
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install system dependencies
run: sudo apt-get install -y graphviz
- name: Install Python dependencies
run: |
pip install --upgrade pip
pip install git+https://github.com/petercorke/sphinx-autorun.git
pip install sphinx-codeautolink
pip install .[docs]
cd packages/mvtb-data && pip install .
- name: Build docs
run: sphinx-build -b html docs/source docs/build/html
- name: Build wheel for JupyterLite
run: |
pip install build
python -m build --wheel --outdir docs/lite/pypi
- name: Sync notebooks into JupyterLite content
run: |
mkdir -p docs/lite/files
rsync -av --delete \
--include='*/' \
--include='*.ipynb' \
--exclude='old/***' \
--exclude='*' \
docs/notebooks/ docs/lite/files/
- name: Adapt staged notebooks for JupyterLite
run: |
python - <<'PY'
import json
from pathlib import Path
root = Path("docs/lite/files")
for nb_path in root.rglob("*.ipynb"):
with nb_path.open("r", encoding="utf-8") as f:
nb = json.load(f)
meta = nb.setdefault("metadata", {})
meta["kernelspec"] = {
"name": "python",
"display_name": "Python (Pyodide)",
"language": "python",
}
meta.setdefault("language_info", {})
meta["language_info"]["name"] = "python"
for cell in nb.get("cells", []):
if cell.get("cell_type") != "code":
continue
source = cell.get("source", [])
if isinstance(source, str):
lines = source.splitlines(keepends=True)
else:
lines = source
new_lines = []
changed = False
for line in lines:
if line.strip() == "%matplotlib ipympl":
newline = "\n" if line.endswith("\n") else ""
new_lines.append(f"%matplotlib inline{newline}")
changed = True
else:
new_lines.append(line)
if changed:
cell["source"] = (
new_lines
if not isinstance(source, str)
else "".join(new_lines)
)
with nb_path.open("w", encoding="utf-8") as f:
json.dump(nb, f, indent=1)
f.write("\n")
PY
- name: Build JupyterLite site
run: |
pip install jupyterlite-core jupyterlite-pyodide-kernel jupyter-server
cd docs/lite && jupyter lite build --output-dir ../build/html/lite
- name: Package notebooks zip
run: |
rm -f docs/build/html/mvtb_notebooks.zip
zip -r docs/build/html/mvtb_notebooks.zip docs/notebooks
- name: Upload notebooks zip artifact
uses: actions/upload-artifact@v4
with:
name: mvtb_notebooks
path: docs/build/html/mvtb_notebooks.zip
if-no-files-found: error
- uses: actions/upload-pages-artifact@v3
if: github.event_name == 'push'
with:
path: docs/build/html
deploy:
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'push'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4