Skip to content

Port RAPIDS docs from Jekyll to NVIDIA Sphinx theme#807

Open
bdice wants to merge 30 commits into
rapidsai:mainfrom
bdice:sphinx-port
Open

Port RAPIDS docs from Jekyll to NVIDIA Sphinx theme#807
bdice wants to merge 30 commits into
rapidsai:mainfrom
bdice:sphinx-port

Conversation

@bdice

@bdice bdice commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • port the RAPIDS documentation portal from Jekyll to Sphinx, MyST, and the NVIDIA Sphinx theme
  • preserve the published routes, notices, release and platform data, installation selector, visualizations, redirects, RSS feed, and production telemetry
  • adapt the S3 assembly and post-processing pipeline to the locked uv environment and add Netlify previews for copied pull request branches

Validation

  • pre-commit run --all-files
  • pytest (3 tests passed)
  • strict Sphinx dirhtml build with warnings treated as errors (129 sources)
  • rendered-site validation (132 HTML files and 94 notices)
  • route and heading comparison against the Jekyll baseline (128 routes)

The S3-backed full-site assembly and Netlify preview run in the upstream deploy workflow after the copy-PR bot creates the pull-request/<number> branch.

Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice bdice changed the title Port RAPIDS docs from Jekyll to Sphinx [Proof of Concept] Port RAPIDS docs from Jekyll to Sphinx Jul 6, 2026
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@netlify

netlify Bot commented Jul 6, 2026

Copy link
Copy Markdown

Deploy Preview for docs-rapids-ai ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit c03a97a
🔍 Latest deploy log https://app.netlify.com/projects/docs-rapids-ai/deploys/6a5515ce7f624b0008cf5f65
😎 Deploy Preview https://deploy-preview-807--docs-rapids-ai.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Signed-off-by: Bradley Dice <bdice@bradleydice.com>
bdice added 3 commits July 6, 2026 20:25
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Restore development support and minimize migration diff
@copy-pr-bot

copy-pr-bot Bot commented Jul 7, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice

bdice commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test 0531a34

bdice added 2 commits July 7, 2026 01:44
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice

bdice commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test ad33396

Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice

bdice commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test 61cb205

bdice added 2 commits July 7, 2026 01:48
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice

bdice commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test 32fa1c9

bdice added 3 commits July 7, 2026 01:53
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Keep portal content at repository root
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice

bdice commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test 6166ae2

Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice

bdice commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test c1e649e

bdice added 6 commits July 7, 2026 02:14
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@bdice bdice changed the title [Proof of Concept] Port RAPIDS docs from Jekyll to Sphinx Port RAPIDS docs from Jekyll to NVIDIA Sphinx theme Jul 12, 2026
@bdice bdice marked this pull request as ready for review July 12, 2026 15:20
@bdice bdice requested a review from a team as a code owner July 12, 2026 15:20
jameslamb and others added 4 commits July 12, 2026 10:25
https://github.com/rapidsai/cuxfilter is now archived and the 26.06 release is done. The RSN about archiving `cuxfilter` can be marked complete.

Authors:
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Bradley Dice (https://github.com/bdice)

URL: rapidsai#808
(cherry picked from commit ff3968c)
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Contributes to rapidsai/build-planning#291

* moves `cuxfilter` to the "inactive projects' section of the API docs
* removes references encouraging its use

Authors:
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Bradley Dice (https://github.com/bdice)

URL: rapidsai#809
(cherry picked from commit 922b693)
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
## Summary

- Removes TensorFlow from the install selector's **Additional Packages** options and deletes obsolete compatibility notes.
- Allows PyTorch to be selected with CUDA 13. I validated that current official PyTorch wheels and conda-forge packages support CUDA 13.

Authors:
  - Bradley Dice (https://github.com/bdice)

Approvers:
  - James Lamb (https://github.com/jameslamb)

URL: rapidsai#811
(cherry picked from commit 792777e)
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
Sync changes from the Jekyll site
Signed-off-by: Bradley Dice <bdice@bradleydice.com>
@mmccarty

Copy link
Copy Markdown
Contributor

Thanks for putting this migration together. I checked out the branch and ran the local validation successfully:

  • make check
  • Ruff lint and formatting
  • 10 pytest tests
  • strict Sphinx build across 129 sources
  • site validation across 132 HTML files and 94 notices

I found two link regressions that the current validator does not catch:

  1. The release links on the Platform Support page point to nonexistent anchors.

    extensions/rapids_docs/platform_support.py generates targets such as #rapids-2606, but MyST generates IDs such as #rapids-26-06 and #rapids-26-08-nightly. As a result, all eight release jump links at the top of the page are broken.

  2. Three relative Markdown links are emitted as .md URLs.

    With myst_all_links_external = True, these links are preserved verbatim instead of being converted to their published routes:

    • resources/merge-barriers.md./recently-updated.md
    • resources/recently-updated.md./merge-barriers.md
    • resources/reproducing-ci.md./github-actions.md

    In the generated site, these resolve below the current pretty-URL directory and return 404s. Using root-relative published URLs such as /resources/recently-updated/ would fix them.

One CI follow-up: the current head (6d8ffae) has not run the S3-backed copied-branch workflow. The latest run I found was against c1e649e, where full-site assembly failed because Liquid syntax remained in three imported files. The current validator may address that, but it would be good to trigger /ok to test 6d8ffae so the latest full-site assembly is verified before merging.

Signed-off-by: Mike McCarty <mmccarty@nvidia.com>
@mmccarty

Copy link
Copy Markdown
Contributor

The TOC on the page and in the right nav menu seems redundant with the new theme. If others agree, I can remove the hard coded TOC in install/index.md

Screenshot 2026-07-13 at 12 44 43 PM

@jameslamb jameslamb left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This PR is way too large to review thoroughly and I know it was mostly AI-generated, so I'm treating the PR as a request like "trust me". I do trust you and that you've done some local testing, so I'm clicking "Approve" so you have what you minimally need to merge this. I support the overall intent (switching from a Jekyll site to a Sphinx one to make using the NVIDIA Sphinx theme easier).

More notes below.


Reviewing the intent

If I understand it, the reason for this goes like this:

  1. we want to (have to?) move to the NVIDIA theme
  2. that is published as a Sphinx theme via a Python package, so it's convenient (required?) to switch from a Jekyll site to one built with Sphinx

If I'm right about that, then totally supportive of making the switch in general. It'd help maintainability too... there are many more folks in RAPIDS who are knowledgeable about Python / Sphinx than there are who can help with Ruby / Jekyll.

Reviewing the code

I did a review pass and noted some things that I think should be addressed before merging, but based on clicking around the preview it does look like the site content and look and feel are working. API docs still do not work in the preview (#680) so we'll have to merge this and do a real deployment to be sure the changes to the post-processing are working, but your local testing makes me confident that this is at least close.

IMO this diff didn't have to be this large.

Any of these would have been quick approvals, could have been merged independently, and would have shrunk the diff here:

  • deleting unused files like _drafts and _includes/gpu-labels-table*
  • moving _notices/* to notices/
  • adding pyproject.toml with ruff rules and reformatting existing files based on those rules
  • updates to copyright dates on otherwise-unchanged files
  • minor formatting changes like removing the unnecessary ** in section headers in install/index.md

But we're here now and I've reviewed them, so fine to just leave them all in.

Comment thread pyproject.toml
name = "rapids-docs"
version = "0.1.0"
description = "NVIDIA RAPIDS documentation portal"
requires-python = ">=3.12"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
requires-python = ">=3.12"
requires-python = ">=3.14"

Since .python-version points to 3.14 and other files like the uv.lock match that, let's just make this >=3.14. This is an application, not a library, it only needs to support a single Python version at a time and we might as well make it a new one.

Comment thread pyproject.toml
"pre-commit>=4.2.0",
"pytest>=8.4.0",
"ruff>=0.12.0",
]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
]

As far as I can tell, this dev group has no purpose. I don't see it used anywhere. Let's remove it and the need to ever think about updating it.

Comment thread pyproject.toml

[tool.ruff]
line-length = 100
target-version = "py312"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
target-version = "py312"
target-version = "py314"

Comment thread README.md
Comment on lines +49 to +50
- Portal content, data, includes, and assets retain their established paths at
the repository root.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
- Portal content, data, includes, and assets retain their established paths at
the repository root.

This is the type of thing an LLM likes to write at the end of making a change for you but has no place in these docs. If I just git clone'd this repo to work on it, what does it even mean to me that these directories "retain their established paths"?

Remove this, and please do a pass of review yourself for similar LLM artifacts, if you haven't already.

Comment thread README.md
- Portal content, data, includes, and assets retain their established paths at
the repository root.
- `sphinx/` contains the Sphinx configuration, templates, and theme overrides.
- `extensions/` contains the portal's data-rendering and publication extension.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
- `extensions/` contains the portal's data-rendering and publication extension.
- `extensions/` contain custom code extending Sphinx in this-project-specific ways

This statement as written doesn't really make sense to me (e.g. what is the "publication" extension? We're using the third-party Netlify service to publish.) and anyway is likely to become outdated as code in extensions/ changes. Recommending a more future-proof description here.


def customize_manifest_file(filepath: str) -> None:
"""Customizes one HTML file from the generated manifest."""
if Path(filepath).parts[-2:] == ("api", "index.html"):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
if Path(filepath).parts[-2:] == ("api", "index.html"):
# the top-level file for the entire API docs page is known not to be one-library-specific,
# can skip processing it
if Path(filepath).parts[-2:] == ("api", "index.html"):

Is this comment accurate? If so can you please add it?

This addition looked pretty strange to me and it took me a bit to figure out why it was added.

Comment thread ci/post-process.sh

CURRENT_DIR=$(dirname $(realpath $0))

pip install -r "${CURRENT_DIR}/customization/requirements.txt"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If we're not going to need this requirements.txt file any more then this PR should delete it, please.

# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES.
# SPDX-License-Identifier: Apache-2.0

"""One-time content migration from the pinned RAPIDS Jekyll snapshot."""

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does this really need to live in the repo? It looks to me like maybe it was an artifact of the development process you used to create this branch.

Comment thread sphinx/conf.py
project = "NVIDIA RAPIDS Documentation"
html_title = project
author = "NVIDIA"
copyright = f"{datetime.date.today().year}, NVIDIA"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
copyright = f"{datetime.date.today().year}, NVIDIA"
copyright = f"2019-{datetime.date.today().year}, NVIDIA"

This is the copyright date for the entire docs site, not just the conf.py file, isn't it? Some of the files date back to 2019, so I think we should have a a range beginning in 2019 here.

Comment thread .gitignore
Comment on lines -1 to -11
_site/
_sass/
.sass-cache/
-P/
.vscode
lib_map.json
.DS_Store
files-to-customize.txt
.jekyll-cache
.jekyll-metadata
.netlify

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Why are all of these entries being deleted?

I strongly suspect you didn't do this part manually, because I doubt we now suddenly do want to check into source control things like .DS_Store files created by someone opening the project on a Mac.

Can you please do a manual pass review pass over these?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking feature request New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants