Skip to content

docs: vendor OpenROAD sources instead of fetching master - #4414

Open
vvbandeira wants to merge 4 commits into
The-OpenROAD-Project:masterfrom
vvbandeira:docs-vendor-openroad-sources
Open

docs: vendor OpenROAD sources instead of fetching master#4414
vvbandeira wants to merge 4 commits into
The-OpenROAD-Project:masterfrom
vvbandeira:docs-vendor-openroad-sources

Conversation

@vvbandeira

Copy link
Copy Markdown
Member

Old docs/conf.py fetched 3 files from OpenROAD's master at build time, spliced via regex behind bare assert — broke on upstream heading rename, assert stripped under python -O, and docs tracked master not pinned submodule SHA.

Fix: vendor files at submodule SHA under docs/_vendor/openroad/ (GitGuide.md, README.md, utl-README.md, narrowed index-SupportedOS.md — only Supported OS section, rest trips blocked-content check). Add refresh_openroad_docs.py (regen) + check_vendored_docs.py (CI fail on drift from submodule pin). Wire refresh into cron update-OR workflow so bump + docs refresh land same commit. conf.py reads vendor dir, no network calls. .gitattributes exempts vendor dir from whitespace check (keep upstream trailing whitespace, idempotent refresh). Drop docs/SupportedOS orphan page.

Also bundled: RTD Python bump 3.10→3.12 (pydata-sphinx-theme's Sphinx pin breaks on 3.13+), lock tool switch pip-compileuv pip compile (pip-compile bug w/ recent pip), unpin sphinx-external-toc, regen lock, add make venv target, .gitignore .venv/, README update.

Net: no network calls at build, docs track pinned submodule not upstream master, submodule bump w/o docs refresh fails CI loud instead of breaking build later.

conf.py fetched three files from OpenROAD master at build time and
spliced them with regex guarded by bare assert. A heading rename
upstream broke the build with a message naming neither file nor fix,
python -O stripped the guard entirely, and the docs tracked master
rather than the pinned tools/OpenROAD submodule.

Sources are vendored at the submodule SHA under docs/_vendor and
refreshed by the existing update-OR cron job, so the build makes no
network calls and check_vendored_docs.py fails the submodule bump
instead of the docs build.

Only the Supported Operating Systems section of index.md is vendored,
not the whole landing page: conf.py consumes nothing else, and the
surrounding prose trips this repo's blocked-content check.

Vendored copies keep upstream trailing whitespace so the refresh stays
idempotent, so .gitattributes exempts them from whitespace checking.

Drops docs/SupportedOS, which Sphinx published as an orphan copy of
OpenROAD's landing page.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
Read the Docs default runtime moved past 3.10; pydata-sphinx-theme's
pinned Sphinx no longer builds under 3.13+, so pin RTD to 3.12
explicitly instead of trusting the default.

pip-compile has a compatibility bug with recent pip, so lock
regeneration now uses `uv pip compile`. Unpin sphinx-external-toc
in requirements.in so uv can resolve a compatible version, and
regenerate requirements_lock.txt accordingly.

Add `make venv` (docs/Makefile) to encapsulate venv creation +
locked-deps install, since the interpreter and lock tool are no
longer implied by a bare `pip install`. Exclude `build`, `.venv*`,
and `venv` in conf.py so a local virtualenv or prior build output
isn't picked up as source on a second run. Add `.venv/` to
.gitignore.

Update docs/README.md to match the new venv/lock workflow.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
@vvbandeira
vvbandeira force-pushed the docs-vendor-openroad-sources branch from d21d55d to 62bb5b0 Compare August 12, 2026 11:38

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request vendors OpenROAD documentation files locally under docs/_vendor/openroad/ instead of fetching them over the network at build time. This ensures reproducible, offline-friendly documentation builds that are synchronized with the pinned tools/OpenROAD submodule. It also introduces scripts to refresh and verify these vendored files, updates Python to 3.12, and refreshes dependencies. The review feedback suggests explicitly specifying encoding="utf-8" across multiple file read/write operations in docs/conf.py to prevent platform-dependent encoding issues.

Comment thread docs/conf.py Outdated
Comment thread docs/conf.py Outdated
Comment thread docs/conf.py Outdated
Comment thread docs/conf.py Outdated
Comment thread docs/conf.py Outdated
Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
@openroad-ci

openroad-ci commented Aug 12, 2026

Copy link
Copy Markdown
Member

🔍 QoR check

Metrics reflect the PR merge build — i.e. what will land on the target branch. Advisory — results are log-only and do not affect build status. The authoritative QoR gate remains the local rules-file check.

Commit ca88aab · Jenkins build #4 · Baseline: build

61 design(s) checked — 0 with regression(s), 0 without a comparable baseline.
Design Variant Verdict local vs inline passed / failed / missing
asap7/aes base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/aes-block base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/aes-mbff base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/aes_lvt base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/cva6 base ✅ pass ✅ MATCH 12 / 0 / 0
asap7/ethmac base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/ethmac_lvt base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/gcd-ccs base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/jpeg_lvt base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/mock-alu base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/mock-cpu base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/riscv32i-mock-sram base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/swerv_wrapper base ✅ pass ✅ MATCH 25 / 0 / 0
asap7/uart base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/aes base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/aes-hybrid base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
gf180/uart-blocks base ✅ pass ✅ MATCH 25 / 0 / 0
gt2n/aes base ✅ pass ✅ MATCH 25 / 0 / 0
gt2n/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
gt2n/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/aes base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/i2c-gpio-expander base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
ihp-sg13g2/spi base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/aes base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/ariane133 base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/ariane136 base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/black_parrot base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/bp_be_top base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/bp_fe_top base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/bp_multi_top base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/dynamic_node base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/mempool_group base ✅ pass ✅ MATCH 12 / 0 / 0
nangate45/swerv base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/swerv_wrapper base ✅ pass ✅ MATCH 25 / 0 / 0
nangate45/tinyRocket base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/aes base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/chameleon base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/microwatt base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hd/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/aes base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/gcd base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/ibex base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/jpeg base ✅ pass ✅ MATCH 25 / 0 / 0
sky130hs/riscv32i base ✅ pass ✅ MATCH 25 / 0 / 0

Comment thread docs/contrib/DeveloperGuide.md Outdated
Signed-off-by: Vitor Bandeira <vvbandeira@users.noreply.github.com>
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.

2 participants