Skip to content

Migrate Docs to VitePress#293

Open
hardikdr wants to merge 1 commit intomainfrom
enh/migrate-vitepress
Open

Migrate Docs to VitePress#293
hardikdr wants to merge 1 commit intomainfrom
enh/migrate-vitepress

Conversation

@hardikdr
Copy link
Member

@hardikdr hardikdr commented Mar 20, 2026

Summary by CodeRabbit

Release Notes

  • Chores

    • Migrated documentation site to VitePress and added a GitHub Pages publishing workflow
    • Updated docs build tooling, Docker/setup for local preview, and Node-based dev scripts; ignored VitePress build artifacts
  • Documentation

    • New home page with feature highlights and navigation
    • Added Quickstart, Helm, and Kustomize pages
    • Updated API reference links to Kubernetes v1.35 and refreshed site theme/footer/styles

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 20, 2026

Warning

Rate limit exceeded

@hardikdr has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 3 minutes and 34 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ec7443cd-96fc-4e55-b077-93469a3c65ac

📥 Commits

Reviewing files that changed from the base of the PR and between c2b1ac7 and 8d1bbf7.

⛔ Files ignored due to path filters (2)
  • docs/public/bmwe.png is excluded by !**/*.png
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (22)
  • .github/workflows/publish-docs.yml
  • .github/workflows/publish_docs.yaml
  • .gitignore
  • Makefile
  • REUSE.toml
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/VPFooter.vue
  • docs/.vitepress/theme/custom.css
  • docs/.vitepress/theme/index.js
  • docs/Dockerfile
  • docs/api-reference/api.md
  • docs/architecture.md
  • docs/development/dev_docs.md
  • docs/index.md
  • docs/installation/helm.md
  • docs/installation/kustomize.md
  • docs/quickstart.md
  • docs/requirements.txt
  • hack/api-reference/config.yaml
  • hack/start-docs.sh
  • mkdocs.yml
  • package.json

Walkthrough

Docs build migrated from MkDocs to VitePress: new VitePress config, theme and content; Node-based Docker image and local start script; npm package and scripts; updated CI workflow to build and deploy to GitHub Pages; removed MkDocs config and requirements; miscellaneous path/version updates.

Changes

Cohort / File(s) Summary
CI Workflows
.github/workflows/publish-docs.yml, .github/workflows/publish_docs.yaml
Added new VitePress Pages workflow and removed old MkDocs deploy workflow; build uses Node.js, uploads Pages artifact, deploys only on non-PR events.
VitePress config & theme
docs/.vitepress/config.mts, docs/.vitepress/theme/index.js, docs/.vitepress/theme/components/VPFooter.vue, docs/.vitepress/theme/custom.css
New VitePress site config, theme entry, custom footer component, and CSS for hero/branding and responsive styles.
Docs site content
docs/index.md, docs/quickstart.md, docs/installation/helm.md, docs/installation/kustomize.md, docs/architecture.md, docs/development/dev_docs.md, docs/api-reference/api.md
Added VitePress home and several docs pages; updated image paths and Kubernetes API version links; adjusted development docs wording.
Build tooling & scripts
package.json, docs/Dockerfile, hack/start-docs.sh, Makefile
Introduced package.json with VitePress deps and scripts; replaced mkdocs Dockerfile with node:24 image; added local start script; Makefile updated for configurable DOCS_IMAGE/PORT and run semantics.
Repo metadata & ignore rules
.gitignore, REUSE.toml, hack/api-reference/config.yaml
Ignored node_modules and VitePress build artifacts; REUSE.toml annotation list adjusted (removed mkdocs.yml, added package files); Kubernetes render version bumped to 1.35.
Removed / cleaned MkDocs
mkdocs.yml, docs/requirements.txt
Removed MkDocs site config and emptied Python requirements; MkDocs-specific CI removed.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev
  participant GitHub
  participant Runner
  participant Pages as "GitHub Pages"
  participant ArtifactStorage as "Actions Artifact"

  Dev->>GitHub: push to main / workflow_dispatch
  GitHub->>Runner: start build job (node:24)
  Runner->>Runner: npm ci && npm run docs:build
  Runner->>ArtifactStorage: upload docs/.vitepress/dist (non-PR)
  GitHub->>Runner: start deploy job (requires build)
  Runner->>ArtifactStorage: download artifact
  Runner->>Pages: actions/deploy-pages@v4 deploy artifact
  Pages-->>GitHub: page_url published
  GitHub-->>Dev: workflow status / environment URL
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Suggested labels

documentation

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request lacks any description; the author provided none, but the repository template requires at least 'Proposed Changes' with bullet points and optionally links to related issues. Add a pull request description following the template: include bullet points under 'Proposed Changes' summarizing key changes (e.g., workflow migration, dependency updates, documentation structure) and reference any related issues with 'Fixes #' if applicable.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Migrate Docs to VitePress' clearly and accurately summarizes the main change across the changeset—replacing the MkDocs documentation system with VitePress.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch enh/migrate-vitepress
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (2)
docs/.vitepress/theme/components/VPFooter.vue (1)

101-236: Consider trimming duplicate/unused footer styles.

There are overlapping .container declarations and multiple .footer* selector blocks not used by this template, which adds avoidable CSS maintenance overhead.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/.vitepress/theme/components/VPFooter.vue` around lines 101 - 236, Trim
duplicate and unused footer CSS by keeping one .container rule (merge properties
from both declarations), consolidating the two .footer blocks into a single
.footer declaration, and removing any .footer* selectors not referenced in this
component (e.g., drop unused rules for .footer-column, .footer-legal-links,
.footer-legal-sep if they aren’t used). Locate and update the rules for
.container, .footer, .footer-columns, .funding-notice and .funding-text in
VPFooter.vue: merge/clean duplicated properties, ensure only the selectors
actually used in the template remain, and keep responsive styles that apply to
those used selectors. Ensure no functional behavior is changed while removing
duplicates.
Makefile (1)

250-250: Consider using $(CURDIR) instead of $(shell pwd) for portability.

$(CURDIR) is Make's built-in variable for the current directory, which is slightly more portable and avoids spawning a subshell.

Suggested change
-	$(CONTAINER_TOOL) run --rm -p $(DOCS_PORT):5173 -v "$(shell pwd)":/app $(DOCS_IMAGE)
+	$(CONTAINER_TOOL) run --rm -p $(DOCS_PORT):5173 -v "$(CURDIR)":/app $(DOCS_IMAGE)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` at line 250, Replace the subshell invocation in the Makefile
command that runs the docs container: change the volume path that uses "$(shell
pwd)" to Make's built-in "$(CURDIR)" in the recipe that invokes
$(CONTAINER_TOOL) run --rm -p $(DOCS_PORT):5173 -v ... $(DOCS_IMAGE), so the
volume mounts the current directory via $(CURDIR) for better portability and to
avoid spawning a subshell.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/.vitepress/theme/custom.css`:
- Around line 3-7: Replace the vendor-prefixed gradient value used in the CSS
variable --vp-home-hero-name-background with the standard syntax: change the
value from -webkit-linear-gradient(...) to linear-gradient(120deg, `#3456fe` 30%,
`#41d1ff`) so the stylelint rule passes; update the assignment of
--vp-home-hero-name-background to use linear-gradient and remove the -webkit-
prefix.

In `@docs/Dockerfile`:
- Around line 1-11: The Dockerfile runs the container as root; create a non-root
user (e.g., UID 1000) and switch to it after setting ownership of /app and the
entrypoint script so the process started by ENTRYPOINT ["./hack/start-docs.sh"]
runs unprivileged. Update the Dockerfile to add a user and group
(adduser/addgroup or add with adduser -D), chown /app and ./hack/start-docs.sh
to that user, ensure the script is executable, and add a USER directive before
the final image stage so the container does not run as root.

In `@hack/start-docs.sh`:
- Around line 3-17: The script currently continues after a failed install and
only traps SIGINT; change it to fail fast if "npm ci" returns non-zero (exit
immediately on error) and add a SIGTERM handler alongside SIGINT so the
VitePress process is terminated when Docker sends SIGTERM; update the existing
handle_sigint function name (or add a new handler like handle_termination) to
trap both SIGINT and SIGTERM, ensure it uses the VITEPRESS_PID variable to send
TERM and wait for the child, and make the main flow exit on npm ci failure
instead of proceeding to start VitePress.

---

Nitpick comments:
In `@docs/.vitepress/theme/components/VPFooter.vue`:
- Around line 101-236: Trim duplicate and unused footer CSS by keeping one
.container rule (merge properties from both declarations), consolidating the two
.footer blocks into a single .footer declaration, and removing any .footer*
selectors not referenced in this component (e.g., drop unused rules for
.footer-column, .footer-legal-links, .footer-legal-sep if they aren’t used).
Locate and update the rules for .container, .footer, .footer-columns,
.funding-notice and .funding-text in VPFooter.vue: merge/clean duplicated
properties, ensure only the selectors actually used in the template remain, and
keep responsive styles that apply to those used selectors. Ensure no functional
behavior is changed while removing duplicates.

In `@Makefile`:
- Line 250: Replace the subshell invocation in the Makefile command that runs
the docs container: change the volume path that uses "$(shell pwd)" to Make's
built-in "$(CURDIR)" in the recipe that invokes $(CONTAINER_TOOL) run --rm -p
$(DOCS_PORT):5173 -v ... $(DOCS_IMAGE), so the volume mounts the current
directory via $(CURDIR) for better portability and to avoid spawning a subshell.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b9e84a1d-0ecf-403f-bf13-5e5f837926a4

📥 Commits

Reviewing files that changed from the base of the PR and between f5bd6b8 and c7dcf4c.

⛔ Files ignored due to path filters (2)
  • docs/public/bmwe.png is excluded by !**/*.png
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (21)
  • .github/workflows/publish-docs.yml
  • .github/workflows/publish_docs.yaml
  • .gitignore
  • Makefile
  • REUSE.toml
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/VPFooter.vue
  • docs/.vitepress/theme/custom.css
  • docs/.vitepress/theme/index.js
  • docs/Dockerfile
  • docs/architecture.md
  • docs/development/dev_docs.md
  • docs/index.md
  • docs/installation/helm.md
  • docs/installation/kustomize.md
  • docs/quickstart.md
  • docs/requirements.txt
  • hack/api-reference/config.yaml
  • hack/start-docs.sh
  • mkdocs.yml
  • package.json
💤 Files with no reviewable changes (4)
  • docs/requirements.txt
  • REUSE.toml
  • .github/workflows/publish_docs.yaml
  • mkdocs.yml

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
docs/.vitepress/theme/custom.css (1)

3-7: ⚠️ Potential issue | 🟡 Minor

Use standard gradient syntax to satisfy linting.

The vendor-prefixed -webkit-linear-gradient violates the stylelint rule and is unnecessary for modern browsers. Line 8 demonstrates the correct approach using the standard linear-gradient syntax.

🎨 Proposed fix
-    --vp-home-hero-name-background: -webkit-linear-gradient(
+    --vp-home-hero-name-background: linear-gradient(
             120deg,
             `#3456fe` 30%,
             `#41d1ff`
     );
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/.vitepress/theme/custom.css` around lines 3 - 7, Replace the
vendor-prefixed gradient with the standard syntax: update the CSS custom
property --vp-home-hero-name-background to use linear-gradient(120deg, `#3456fe`
30%, `#41d1ff`) instead of -webkit-linear-gradient so it passes stylelint and
works in modern browsers.
🧹 Nitpick comments (1)
docs/.vitepress/theme/components/VPFooter.vue (1)

101-126: Trim duplicate and unused footer CSS blocks.

There are two .container blocks (Lines 101-105 and 123-126), and several .footer* selectors that are not used by this template. Consolidating these styles will reduce accidental overrides and make future footer edits safer.

Also applies to: 129-236

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/.vitepress/theme/components/VPFooter.vue` around lines 101 - 126, Remove
the duplicate .container block and prune unused footer selectors: consolidate
the two .container definitions into one (keep the intended max-width and
centering), remove any .footer* rules not referenced by the VPFooter.vue
template, and ensure the remaining styles (.footer, .message, .copyright)
reflect the final values you want to keep; update VPFooter.vue's stylesheet so
only the single consolidated .container and the actually used
.footer/.message/.copyright rules remain.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/.vitepress/config.mts`:
- Around line 8-15: The config's head array currently hotlinks the favicon/logo
via the external href string used in the "link" element (rel: "icon" and its
href) — copy the logo and favicon into the repo's static/docs public assets and
update the head entries in config (the "link" elements that reference the remote
hrefs and the other occurrence around the second block at lines noted) to point
to the local asset paths (e.g., "/assets/logo_borderless.svg" and local favicon
path) so branding no longer depends on an external main branch.

In `@docs/.vitepress/theme/components/VPFooter.vue`:
- Line 37: The footer is being hidden whenever the component adds the
has-sidebar class via :class="{ 'has-sidebar': hasSidebar }" in VPFooter,
because the stylesheet defines .VPFooter.has-sidebar { display: none; }; to fix,
remove or change that CSS rule so the funding/legal markup remains visible
(either delete the .VPFooter.has-sidebar { display: none; } rule or narrow it to
target a specific non-legal element), or alternatively stop applying the
has-sidebar class to the root footer by changing :class binding if that class is
only used to trigger the hide—ensure VPFooter (and its funding/legal block) is
not globally hidden by the has-sidebar selector.

---

Duplicate comments:
In `@docs/.vitepress/theme/custom.css`:
- Around line 3-7: Replace the vendor-prefixed gradient with the standard
syntax: update the CSS custom property --vp-home-hero-name-background to use
linear-gradient(120deg, `#3456fe` 30%, `#41d1ff`) instead of -webkit-linear-gradient
so it passes stylelint and works in modern browsers.

---

Nitpick comments:
In `@docs/.vitepress/theme/components/VPFooter.vue`:
- Around line 101-126: Remove the duplicate .container block and prune unused
footer selectors: consolidate the two .container definitions into one (keep the
intended max-width and centering), remove any .footer* rules not referenced by
the VPFooter.vue template, and ensure the remaining styles (.footer, .message,
.copyright) reflect the final values you want to keep; update VPFooter.vue's
stylesheet so only the single consolidated .container and the actually used
.footer/.message/.copyright rules remain.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 992654e0-7c7d-427d-a3b7-cda535fbd755

📥 Commits

Reviewing files that changed from the base of the PR and between c7dcf4c and c2b1ac7.

⛔ Files ignored due to path filters (2)
  • docs/public/bmwe.png is excluded by !**/*.png
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (22)
  • .github/workflows/publish-docs.yml
  • .github/workflows/publish_docs.yaml
  • .gitignore
  • Makefile
  • REUSE.toml
  • docs/.vitepress/config.mts
  • docs/.vitepress/theme/components/VPFooter.vue
  • docs/.vitepress/theme/custom.css
  • docs/.vitepress/theme/index.js
  • docs/Dockerfile
  • docs/api-reference/api.md
  • docs/architecture.md
  • docs/development/dev_docs.md
  • docs/index.md
  • docs/installation/helm.md
  • docs/installation/kustomize.md
  • docs/quickstart.md
  • docs/requirements.txt
  • hack/api-reference/config.yaml
  • hack/start-docs.sh
  • mkdocs.yml
  • package.json
💤 Files with no reviewable changes (3)
  • docs/requirements.txt
  • mkdocs.yml
  • .github/workflows/publish_docs.yaml
✅ Files skipped from review due to trivial changes (13)
  • docs/development/dev_docs.md
  • docs/architecture.md
  • docs/.vitepress/theme/index.js
  • docs/index.md
  • docs/installation/helm.md
  • docs/quickstart.md
  • docs/installation/kustomize.md
  • package.json
  • docs/api-reference/api.md
  • hack/api-reference/config.yaml
  • .gitignore
  • .github/workflows/publish-docs.yml
  • hack/start-docs.sh
🚧 Files skipped from review as they are similar to previous changes (1)
  • REUSE.toml

@hardikdr hardikdr force-pushed the enh/migrate-vitepress branch from c2b1ac7 to c304a90 Compare March 20, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant