Public documentation for the IPRO SDK, published on GitHub Pages: https://intelpro-inc.github.io/ipro-sdk-docs/
The site is bilingual: Traditional Chinese at the site root, English under
/en/. Pages are Markdown, built with Zensical;
Material for MkDocs builds the
same sources in CI as a fallback.
Redesign in progress (branch
redesign). The previous hand-written Jekyll site lives inlegacy/until every page has been migrated. Runtools/stub_report.pyto see what is left.
mkdocs.base.yml shared settings: theme, Markdown extensions, release version (extra.release)
mkdocs.zh.yml zh-TW site: nav, language, banner text → site/
mkdocs.en.yml English site: same nav order and files → site/en/
docs/zh/, docs/en/ page sources; every page exists in both languages under the same path
overrides/ theme overrides: home page, release banner, brand CSS, language switch
tools/ build, preview and CI checks (see below)
legacy/ old Jekyll site, kept as migration source until cutover
The release version and date shown in the banner and on the home page come
from extra.release in mkdocs.base.yml. Change them there only.
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
./tools/preview.sh # build, then serve http://localhost:8000/ipro-sdk-docs/
ENGINE=material ./tools/build.sh # fallback builderBuilds run in strict mode: a broken link, a missing anchor or a page left out of the nav fails the build.
| Tool | Checks |
|---|---|
tools/parity_check.py |
every language (en, zh-cn, ja) has the same pages, nav order, level-2 heading count and explicit heading ids as zh-TW |
tools/redline_check.py |
public-content rules (below) and Taiwan terminology on zh-TW pages (tools/zh_tw_terms.yml) |
tools/stub_report.py |
pages still marked status: stub, and legacy sections no page claims |
python -m pytest tools/tests |
unit tests for the tools above |
The red-line check also loads a private rule set (internal project,
customer and vendor names). It is never committed here: CI reads it from the
REDLINE_RULES repository secret, and maintainers keep a local copy in the SDK
repository (path in tools/redline_check.py). Findings from private rules
never print the matched text.
Some pages are generated from data and committed like the rest; their front
matter says generated: tools/<generator>.py. Edit the source, not the page.
| Generator | Source | Writes |
|---|---|---|
tools/gen_documents.py |
data/documents.yml |
documents/index.md |
tools/gen_examples.py --sdk <release> |
data/examples.yml + each app's README in the SDK release |
examples/<app>.md, the catalog tables in examples/index.md, the examples nav |
tools/gen_api.py --xml <dir> |
data/api.yml + Doxygen XML of the SDK's public headers |
reference/api/<group>.md, the group table in reference/api/index.md, the API nav |
- A document becomes downloadable by setting
access: publicand adding one URL per language underfilesindata/documents.yml. data/examples.ymlholds the catalog text and per-app README curation:replacerules (regex; a rule that no longer matches fails the run),redline_ignorefor reviewed matches, andexclude.- Doxygen XML: in an SDK checkout with the documented headers run
(cat docs/api/Doxyfile; echo "OUTPUT_DIRECTORY = /tmp/ipro-api") | doxygen -, thentools/gen_api.py --xml /tmp/ipro-api/xml. Every header must be listed indata/api.yml(a group orexclude). - The examples and API generators refuse to write pages that fail the red-line check.
The Jekyll site served /<page> and /en/<page> (for example /getting-started
or /en/faq). tools/build.sh ends with tools/gen_redirects.py, which writes a
redirect page for each of them into site/ and site/en/ from data/redirects.yml.
GitHub Pages serves /<page> from <page>.html, so both URL forms keep working.
tois the page that replaced the old one; old section anchors (#flashing) follow theanchorsmap, or keep their id when the target has a heading with it.- Pages of this site that are removed go under
removed:(<old page>.md: <target>); their URL (<old page>/) then redirects to the target in both languages. - The run fails, and writes nothing, if an old page in
legacy/has no entry, an anchor names a section the old page never had, a target page or heading does not exist in the build, or a redirect would replace a real page (including aremoved:page that is still built). - When a page moves, is deleted or a heading id changes, update
data/redirects.ymlin the same commit; the build tells you which entry broke.
- Add the page under the same path in
docs/zh/anddocs/en/. - Register it in the
navof bothmkdocs.zh.ymlandmkdocs.en.yml, at the same position. - Give section headings explicit ids so links and the language switch keep working:
## 控制器配置 { #controller-variants }↔## Controller Configuration { #controller-variants }. - Record where migrated content came from in front matter (
migrate_from:), and removestatus: stubonce the page is written. - Run
./tools/preview.shand the checks above before committing.
- Networking on IPRO7: describe how it connects — Ethernet (RMII), or Wi-Fi through an IPRO6S companion over SDIO. Never present Wi-Fi as an IPRO7 feature, but do not headline its absence either (no banners or lead sentences about it).
- One board. Step-by-step instructions target the IPRO7AI Reef EVK V4.0 only; other boards (IPRO7 EVB, IPRO7AI EVK, IPRO6S EVB, IPRO7 Arduino board) get a one-line mention ("needs the IPRO7AI EVK"), never their own steps or pages.
- Hands-on task pages. Every step is action → exact command or code → what the user sees; every task page ends with Verify and Troubleshooting.
- IPRO6S is part of SDK V2.2.0 with Wi-Fi applications only (
ipro6_demo,ipro6_if_wifi,ipro6_fmac; no IPRO6S Bluetooth). On the Reef it appears as the FIN Wi-Fi card in the microSD slot, runningipro6_if_wifiwithdefconfig_ipro6_sdio. Its chip page holds the details; other pages link to it. - No internal or customer names. Reference designs are described generically ("contact INTELPRO for availability").
- Document the released SDK, not the development tree. Anything not in the release is marked as such or as a roadmap item.
- No internal infrastructure: CI pipelines, issue trackers, internal hosts,
local paths. Serial ports on macOS are written
/dev/cu.usbserial-XXXX.
.github/workflows/docs.yml runs the checks and both builds on every push and
pull request. Pushes to main deploy the Zensical build to GitHub Pages, which
requires Settings → Pages → Source = GitHub Actions (switched at cutover).