Merge branch 'main' of https://github.com/petercorke/machinevision-to… #30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |