Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 150 additions & 0 deletions .github/workflows/docs-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
name: Docs

on:
pull_request:
branches: [main]
types: [opened, synchronize]
paths:
- "docs/**"
push:
branches: [main]
workflow_dispatch:

defaults:
run:
shell: bash

env:
MISE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
build:
runs-on: build-arm64
container:
image: ghcr.io/nvidia/nv-agent-env/ci:latest
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install tools
run: mise install

- name: Build documentation
run: mise run docs:build:strict

- name: Delete unnecessary files
run: |
find _build -name .doctrees -prune -exec rm -rf {} \;
find _build -name .buildinfo -exec rm {} \;

- name: Upload HTML
uses: actions/upload-artifact@v4
with:
name: html-build-artifact
path: _build/docs
if-no-files-found: error
retention-days: 1
- name: Store PR information
if: github.event_name == 'pull_request'
run: |
mkdir ./pr
echo ${{ github.event.number }} > ./pr/pr.txt
echo ${{ github.event.pull_request.merged }} > ./pr/merged.txt
echo ${{ github.event.action }} > ./pr/action.txt

- name: Upload PR information
if: github.event_name == 'pull_request'
uses: actions/upload-artifact@v4
with:
name: pr
path: pr/

publish:
if: github.event_name == 'push' && github.repository_owner == 'NVIDIA'
needs: [build]
runs-on: build-arm64
container:
image: ghcr.io/nvidia/nv-agent-env/ci:latest
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
with:
ref: "gh-pages"

- name: Initialize Git configuration
run: |
git config user.name docs-build
git config user.email do-not-send@github.com

- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: html-build-artifact
path: ${{ github.ref_name }}

- name: Copy HTML directories
run: |
ls -asl
for i in `ls -d *`
do
echo "Git adding ${i}"
git add "${i}"
done
- name: Check or create dot-no-jekyll file

run: |
if [ -f ".nojekyll" ]; then
echo "The dot-no-jekyll file already exists."
exit 0
fi
touch .nojekyll
git add .nojekyll

- name: Check or create redirect page
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
resp=$(grep 'http-equiv="refresh"' index.html 2>/dev/null) || true
if [ -n "${resp}" ]; then
echo "The redirect file already exists."
exit 0
fi
def_branch=$(gh api "repos/${GITHUB_REPOSITORY}" --jq ".default_branch")
html_url=$(gh api "repos/${GITHUB_REPOSITORY}/pages" --jq ".html_url")
echo '<!DOCTYPE html>' > index.html
echo '<html>' >> index.html
echo ' <head>' >> index.html
echo ' <title>Redirect to documentation</title>' >> index.html
echo ' <meta charset="utf-8">' >> index.html
echo ' <meta http-equiv="refresh" content="3; URL='${html_url}${def_branch}'/index.html">' >> index.html
echo ' <link rel="canonical" href="'${html_url}${def_branch}'/index.html">' >> index.html
echo ' <script language="javascript">' >> index.html
echo ' function redirect() {' >> index.html
echo ' window.location.assign("'${html_url}${def_branch}'/index.html")' >> index.html
echo ' }' >> index.html
echo ' </script>' >> index.html
echo ' </head>' >> index.html
echo ' <body onload="redirect()">' >> index.html
echo ' <p>Please follow the link to the <a href="'${html_url}${def_branch}'/index.html">' >> index.html
echo ${def_branch}'</a> branch documentation.</p>' >> index.html
echo ' </body>' >> index.html
echo '</html>' >> index.html
git add index.html

- name: Commit changes to the GitHub Pages branch
run: |
git status
if git commit -m 'Pushing changes to GitHub Pages.'; then
git push -f
else
echo "Nothing changed."
fi
18 changes: 18 additions & 0 deletions .github/workflows/docs-preview-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: docs-preview-pr

on:
workflow_run:
workflows: [Docs]
types: [completed]
branches-ignore: [main]

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
WF_ID: ${{ github.event.workflow_run.id }}

jobs:
preview:
uses: nvidia-merlin/.github/.github/workflows/docs-preview-pr-common.yaml@main
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,9 @@ credentials/

kubeconfig

# Documentation build output
_build/

# Docker build artifacts (image tarballs, packaged helm charts)
deploy/docker/.build/

Expand Down
6 changes: 6 additions & 0 deletions docs/about/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# About NemoClaw
79 changes: 79 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

import sys
from datetime import date
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent.parent))

project = "NVIDIA NemoClaw Developer Guide"
this_year = date.today().year
copyright = f"2025-{this_year}, NVIDIA Corporation"
author = "NVIDIA Corporation"
release = "0.1.0"

extensions = [
"myst_parser",
"sphinx.ext.autodoc",
"sphinx.ext.autosummary",
"sphinx.ext.napoleon",
"sphinx.ext.viewcode",
"sphinx.ext.intersphinx",
"sphinx_copybutton",
"sphinx_design",
"sphinxcontrib.mermaid",
]

autodoc_default_options = {
"members": True,
"undoc-members": False,
"show-inheritance": True,
"member-order": "bysource",
}
autodoc_typehints = "description"
autodoc_class_signature = "separated"

copybutton_exclude = ".linenos, .gp, .go"

exclude_patterns = [
"README.md",
"_build/**",
]

myst_linkify_fuzzy_links = False
myst_heading_anchors = 4
myst_enable_extensions = [
"colon_fence",
"deflist",
"dollarmath",
"fieldlist",
"substitution",
]
myst_links_external_new_tab = True

myst_substitutions = {
"version": release,
}

templates_path = ["_templates"]

html_theme = "nvidia_sphinx_theme"
html_copy_source = False
html_show_sourcelink = False
html_show_sphinx = False

html_domain_indices = False
html_use_index = False
highlight_language = "console"

html_theme_options = {
"icon_links": [
{
"name": "GitHub",
"url": "https://github.com/NVIDIA/NemoClaw",
"icon": "fa-brands fa-github",
"type": "fontawesome",
},
],
}
6 changes: 6 additions & 0 deletions docs/feature1/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# Feature 1
6 changes: 6 additions & 0 deletions docs/feature2/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# Feature 2
6 changes: 6 additions & 0 deletions docs/get-started/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# Get Started
64 changes: 64 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# NVIDIA NemoClaw Developer Guide

NemoClaw is the runtime environment for autonomous agents. It provides secure sandboxed execution, cluster management, and infrastructure for running AI agent workloads.

```{toctree}
:caption: About
:hidden:

about/index
```

```{toctree}
:caption: Get Started
:hidden:

get-started/index
```

```{toctree}
:caption: Feature 1
:hidden:

feature1/index
```

```{toctree}
:caption: Feature 2
:hidden:

feature2/index
```

```{toctree}
:caption: Observability
:hidden:

observability/index
```

```{toctree}
:caption: Reference
:hidden:

reference/index
```

```{toctree}
:caption: Troubleshooting
:hidden:

troubleshooting/index
```

```{toctree}
:caption: Resources
:hidden:

resources/index
```
6 changes: 6 additions & 0 deletions docs/observability/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# Observability
6 changes: 6 additions & 0 deletions docs/reference/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# Reference
6 changes: 6 additions & 0 deletions docs/resources/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# Resources
6 changes: 6 additions & 0 deletions docs/troubleshooting/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->

# Troubleshooting
9 changes: 9 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@ dev = [
"setuptools-scm>=8",
"grpcio-tools>=1.60",
]
docs = [
"sphinx<=7.5",
"myst-parser<=5",
"sphinx-copybutton<=0.6",
"sphinx-design",
"sphinx-autobuild",
"sphinxcontrib-mermaid",
"nvidia-sphinx-theme",
]

[tool.uv]
# Don't try to install the root package with uv sync - use uv pip install . instead
Expand Down
Loading
Loading