Skip to content

docs: add README, Sphinx docs site, and Pages + docs-branch publish#91

Merged
lacraig2 merged 1 commit into
mainfrom
workspace/driverdocs
Jul 17, 2026
Merged

docs: add README, Sphinx docs site, and Pages + docs-branch publish#91
lacraig2 merged 1 commit into
mainfrom
workspace/driverdocs

Conversation

@lacraig2

Copy link
Copy Markdown
Contributor

What

igloo_driver had no documentation — no README, no docs site. This adds all three, mirroring how Penguin publishes its docs.

1. README.md

What igloo_driver is — an in-guest programmable kernel debugger for IGLOO/Penguin rehosting (read/write kernel & user memory, OS introspection, kprobe/uprobe/syscall/signal hooks, kernel-function FFI, and synthesized /proc·/sys·/dev·sysctl·MTD pseudo-files, all over the Portal shared-memory protocol on a per-arch hypercall). Includes the build.sh quickstart, repo layout, and links into the deeper docs and into Penguin's host-side API docs.

2. docs/ — Sphinx + MyST site (furo)

Hand-authored conceptual pages:

  • architecture — module layout, init order, analysis scoping
  • portal — the full 49-op catalog grouped into 8 families + the shared-region protocol + response codes
  • hypercall_abi — the per-architecture trap-instruction table + hypercall-number families
  • hooks — syscall filtering, signal drop, ioctl/uname/mount/open
  • hyperfs, pseudofiles, building

Plus a C API reference auto-extracted from src/ by Doxygen and rendered through Breathe. conf.py runs Doxygen itself, so a bare sphinx-build docs/ _build/html is fully self-contained. The build is warning-clean under -W.

3. .github/workflows/docs.yaml — build + dual publish

Builds the HTML (plain sphinx-build; Doxygen via apt) and publishes it to both:

  • GitHub Pages (configure-pagesupload-pages-artifactdeploy-pages@v4)
  • a generated-only docs branch (peaceiris/actions-gh-pages@v4, force_orphan, .nojekyll) — the git clone --branch docs served-directly path

The deploy_static job is lifted near-verbatim from Penguin's docs.yaml, including the stale-artifact cleanup.

Key design choices

  • Plain sphinx-build, not a containerized build. Penguin builds docs from its live runtime image to introspect Python plugins; a C kernel module has no such path, so a static build is correct and simpler.
  • Trigger = push-to-main (paths: docs/**, src/**, README.md, workflow) + workflow_dispatchnot workflow_run-after-release. Docs depend only on docs/+src/, not on the heavy multi-arch module build, so they stay decoupled (Penguin's intent, adapted).
  • HTML only, no PDF. Penguin's PDF is a release asset; igloo_driver's releases come from the separate module-build workflow this trigger is decoupled from, so a PDF has no natural home. LaTeX config remains in conf.py for local make latexpdf.

Verification

  • sphinx-build -b html -W --keep-going docs docs/_build/html → exit 0, zero warnings (the exact CI command). Breathe-extracted symbols confirmed rendering (igloo_in_scope, get_target_task_mm, HYPER_OP, igloo_hypercall4, OSI structs).
  • Workflow YAML validated.

One-time repo setup needed for the deploy to work

  • Settings → Pages → Source = "GitHub Actions" (required by deploy-pages).
  • The docs branch is auto-created by peaceiris on first run — do not hand-edit/push it.

The workflow is exercisable via workflow_dispatch once merged.

@lacraig2
lacraig2 force-pushed the workspace/driverdocs branch from 754a7a1 to 55f472b Compare July 16, 2026 21:36
igloo_driver had no documentation. This adds:

- README.md: what igloo_driver is (an in-guest programmable kernel
  debugger for IGLOO/Penguin rehosting), build quickstart via build.sh,
  repo layout, and links into the deeper docs.
- docs/: a Sphinx + MyST site (furo theme) covering the architecture,
  the Portal operation catalog, the per-arch hypercall ABI, runtime
  hooks, hyperfs, pseudo-file/device synthesis, and building. The C API
  reference is auto-extracted from src/ by Doxygen and rendered through
  Breathe (conf.py runs Doxygen, so a bare 'sphinx-build docs/ _build/'
  is self-contained). Builds warning-clean under -W.
- .github/workflows/docs.yaml: builds the HTML and dual-publishes it to
  GitHub Pages and a generated-only 'docs' branch, adapting Penguin's
  deploy_static job. Triggered on pushes to main touching docs/src plus
  workflow_dispatch (decoupled from the module release build).
@lacraig2
lacraig2 force-pushed the workspace/driverdocs branch from 55f472b to 101b991 Compare July 16, 2026 21:37
@lacraig2
lacraig2 merged commit 2e387b4 into main Jul 17, 2026
1 check passed
@lacraig2
lacraig2 deleted the workspace/driverdocs branch July 17, 2026 21:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant