blob: de9b9ae9c08404c27fb5045d7062ad875710ccc8 [file] [view] [edit]
# psutil documentation
This directory is a self-contained Sphinx project that builds the psutil docs
published at https://psutil.io/. It has grown well past a plain API reference
(custom theme, a blog, social cards, its own test suite and deploy pipeline),
so this file is the map.
## Build & preview
make html # one-off build into _build/html
make autoreload # live-reload server at 127.0.0.1:8000
`make html` turns warnings into errors, same as CI.
## Layout
- `*.rst`: the doc sources. `api.rst` is the hand-written API reference;
`index.rst` is the home page.
- `blog/`: blog posts, managed by the ablog extension + comments provided via
giscus.
- `conf.py`: Sphinx config: extensions, the theme, `html_baseurl`, OpenGraph /
sitemap / feed settings.
- `_templates/`: the custom theme, built on Sphinx's `basic` theme (topbar,
sidebar, footer, layout).
- `_static/css/`, `_static/js/`: styles and vanilla JS (no framework).
- `_ext/`: small local Sphinx extensions.
- `_extra/robots.txt`: copied verbatim to the site root.
## Notable choices
- Single version, served at the site root (no `/en/`, no `/latest/`).
- Built with the `dirhtml` builder, so URLs are extensionless directories
(`psutil.io/faq/`, no `.html`).
- Self-hosted on GitHub Pages under the custom domain psutil.io.
- Fonts, CSS and JS are all self-hosted; no external assets.
- Social cards, sitemap and Atom feed are generated at build time and rooted at
`html_baseurl`.
## Tests
- `test_docs.py`: offline checks on the built HTML (canonical / OG tags,
sitemap, feed, blog metadata, no external assets, ...). Run with `make test`.
- `test_docs_online.py`: smoke tests against the live site (reachability,
http->https, 404 page, metadata). Run with `make test-online-doc` (sets
`PSUTIL_DOCS_ONLINE=1`).
## Deploy
`.github/workflows/docs.yml` runs on pushes / PRs that touch `docs/`: lint
(`make lint-rst`) -> offline tests -> build -> deploy to GitHub Pages ->
live-site tests. Deploy and the live tests run only on push to master, never on
PRs.