docs: add Fern scaffolding and publish agent docs to docs.nvidia.com/… - #238
docs: add Fern scaffolding and publish agent docs to docs.nvidia.com/…#238ebalduf wants to merge 7 commits into
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (24)
🚧 Files skipped from review as they are similar to previous changes (6)
📝 WalkthroughWalkthroughAdds Fern site configuration, versioned 1.2 and 1.3 documentation, CI validation, release publishing, and pull-request preview workflows that upload artifacts and maintain preview comments. ChangesFern documentation platform
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant PullRequest
participant PreviewBuild
participant PreviewArtifact
participant PreviewComment
participant FernCLI
participant FernAPI
PullRequest->>PreviewBuild: trigger on documentation changes
PreviewBuild->>PreviewArtifact: upload preview sources and metadata
PreviewComment->>PreviewArtifact: download fern-preview
PreviewComment->>FernCLI: generate documentation preview
FernCLI-->>PreviewComment: return preview URL
PreviewComment->>FernAPI: resolve changed files to page slugs
PreviewComment-->>PullRequest: create or update preview comment
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
e802207 to
ff14edb
Compare
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/fern-docs-preview-comment.yml:
- Around line 46-84: The preview job currently runs fork-controlled Fern sources
with DOCS_FERN_TOKEN. Update the workflow condition governing the preview steps,
including the `Generate preview URL` path, to require that the workflow run
originates from a same-repository pull request before downloading artifacts,
installing the CLI, or invoking Fern; otherwise skip the job. Do not expose the
token to fork-provided inputs.
In @.github/workflows/publish-fern-docs.yml:
- Around line 62-65: Update the URL parsing block in the publish workflow to
fail explicitly when the published URL cannot be extracted from
/tmp/fern-output.log, instead of suppressing the grep failure or silently
skipping the summary. Preserve the existing GITHUB_STEP_SUMMARY output when a
URL is found.
- Around line 27-30: Update the release-triggered publish job to check out only
the canonical docs branch, or gate execution so non-current-version releases
cannot publish. In the Fern URL parsing step, validate that a published link was
emitted and explicitly fail the step when none is found, rather than allowing
the publish job to succeed silently.
In `@docs/1.2/usage.md`:
- Around line 140-142: Add the text language identifier to the fenced output
block containing “Enrollment succeeded” in docs/1.2/usage.md (lines 140-142),
and to the project-structure fenced block in docs/1.3/development.md (lines
33-52).
- Line 111: Correct the fleetint enroll command in the usage documentation by
inserting a space between the endpoint URL and the --token option, so they are
passed as separate arguments.
- Line 272: Update the metrics curl example in the usage documentation to
request the documented component name accelerator-nvidia-dcgm-thermal instead of
accelerator-nvidia-temperature.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: e520f767-6bb3-4b53-83cf-d197bb61bfaf
📒 Files selected for processing (24)
.github/workflows/fern-docs-ci.yml.github/workflows/fern-docs-preview-build.yml.github/workflows/fern-docs-preview-comment.yml.github/workflows/publish-fern-docs.ymlREADME.mddocs/1.2/architecture.mddocs/1.2/configuration.mddocs/1.2/development.mddocs/1.2/install-deb.mddocs/1.2/install-helm.mddocs/1.2/install-rpm.mddocs/1.2/usage.mddocs/1.3/architecture.mddocs/1.3/configuration.mddocs/1.3/development.mddocs/1.3/install-deb.mddocs/1.3/install-helm.mddocs/1.3/install-rpm.mddocs/1.3/usage.mddocs/index-1.2.ymldocs/index-1.3.ymlfern/.gitignorefern/docs.ymlfern/fern.config.json
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/publish-fern-docs.yml:
- Around line 63-66: Update the shell setup in the workflow step that runs Fern
generation to use `set -euo pipefail` instead of only enabling pipefail,
ensuring a nonzero `fern generate` failure terminates the step before the URL
validation and success summary.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 54343506-ef9f-4909-bf9c-64a3108b3357
📒 Files selected for processing (3)
.github/workflows/fern-docs-preview-comment.yml.github/workflows/publish-fern-docs.ymldocs/1.2/usage.md
🚧 Files skipped from review as they are similar to previous changes (1)
- docs/1.2/usage.md
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/publish-fern-docs.yml:
- Around line 44-47: Update the Checkout repository step in the release-publish
workflow to explicitly check out the canonical documentation branch or commit
instead of the release event ref. Preserve workflow_dispatch behavior as
appropriate, ensuring publishes always use the current fern/docs.yml rather than
potentially stale release-tag contents.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: ea9f3097-7cd5-42d7-952a-8f05de749f8d
📒 Files selected for processing (1)
.github/workflows/publish-fern-docs.yml
6f6fc3f to
691f00b
Compare
…fleet-intel/agent - Restructure docs/ into versioned subdirectories (1.2/, 1.3/) sourced from the v1.2.1 and v1.3.1 release tags respectively, making the repo the single source of truth for agent documentation - Add fern/ scaffold (docs.yml, fern.config.json) targeting docs.nvidia.com/fleet-intel/agent with a 1.2/1.3 version selector; version management is manual per minor release, not per patch tag - Add docs/index-1.2.yml and docs/index-1.3.yml navigation files - Add GitHub Actions workflows for Fern CI (check + lychee link check), PR preview (build + comment), and publish on release - Fix MDX safety issues in both doc versions (bare angle brackets, autolink syntax) and replace cross-directory ../CONTRIBUTING.md link with a GitHub blob URL - Update README to direct users to docs.nvidia.com/fleet-intel/agent rather than the in-repo docs/ files Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Ed Balduf <ebalduf@nvidia.com>
Signed-off-by: Ed Balduf <ebalduf@nvidia.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Ed Balduf <ebalduf@users.noreply.github.com> Signed-off-by: Ed Balduf <ebalduf@nvidia.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Ed Balduf <ebalduf@users.noreply.github.com> Signed-off-by: Ed Balduf <ebalduf@nvidia.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Ed Balduf <ebalduf@users.noreply.github.com> Signed-off-by: Ed Balduf <ebalduf@nvidia.com>
- Skip publish job for pre-release tags (e.g. v1.3.2-rc.1); only stable releases and manual workflow_dispatch trigger production publish - Explicitly fail the publish step when fern generate --docs does not emit a published URL, preventing silent success on output format changes Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Ed Balduf <ebalduf@nvidia.com>
Without -e, a fern generate failure would not terminate the step immediately — execution would continue to the URL grep and fail with a misleading error. -u catches unset variable references as an added guard. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Ed Balduf <ebalduf@nvidia.com>
691f00b to
f155707
Compare
There was a problem hiding this comment.
Actionable comments posted: 9
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/fern-docs-ci.yml:
- Around line 105-106: Validate the .version value with the existing preview
workflow’s semver validation before installation, assign it to VERSION, and
install the exact package using the VERSION variable. Apply this change at
.github/workflows/fern-docs-ci.yml lines 105-106 and
.github/workflows/publish-fern-docs.yml lines 54-55.
In `@docs/1.2/configuration.md`:
- Around line 196-201: Update the Kubernetes verification commands in
docs/1.2/configuration.md lines 196-201 and docs/1.3/configuration.md lines
203-206 to use helm get values --all, ensuring both examples display chart
defaults and user overrides.
- Around line 104-107: Pin the Helm chart version in both installation examples:
update docs/1.2/configuration.md lines 104-107 to use --version 1.2.1, and
docs/1.3/configuration.md lines 109-114 to use --version 1.3.0, preserving the
existing command structure.
In `@docs/1.2/install-helm.md`:
- Around line 172-178: Update the DCGM troubleshooting commands near the
DCGM_URL environment check to use the configured $DCGM_URL for connectivity
testing instead of the hardcoded nvidia-dcgm.gpu-operator.svc:5555 endpoint.
Make the kubectl service lookup explicitly default-only or otherwise
configurable, preserving the documented custom env.DCGM_URL override behavior.
In `@docs/1.2/install-rpm.md`:
- Around line 80-84: Update the release link and package version placeholders in
the installation and update sections to target the documented 1.2 release line:
link to the v1.2.1 release and require a compatible 1.2.x RPM instead of using
the latest release or unconstrained VERSION.
In `@docs/1.2/usage.md`:
- Around line 304-313: The “Exposing the Agent for External Monitoring”
documentation uses an unsafe all-interfaces listener as the primary example.
Make 127.0.0.1:15133 the default example, retain a specific remote address only
with guidance to restrict access through a firewall or private network, and
document that remote scraping should use a TLS-authenticated reverse proxy
because the TCP API is unauthenticated plaintext HTTP.
In `@docs/1.3/configuration.md`:
- Around line 63-65: Update the configuration documentation around the
duration-valued environment variable descriptions to state that the table covers
both Fleet Intelligence settings and process-level environment tuning. Remove
MALLOC_ARENA_MAX from the telemetry exporter and runtime interval description,
and describe its glibc allocator behavior separately.
In `@docs/1.3/development.md`:
- Around line 33-52: Update the project-structure code fence in the
documentation to include the `text` language identifier after the opening
backticks, preserving the diagram contents unchanged.
In `@docs/1.3/install-helm.md`:
- Around line 36-44: Update the enrollment Secret creation instructions under
“Create enrollment secret” to avoid passing ENROLL_TOKEN via the kubectl command
line. Use a safer input mechanism that does not expose the token in process
arguments, while preserving the existing secret name, namespace, and token key
behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: d4c79c0e-08d1-415f-88ee-2db8b2831965
📒 Files selected for processing (24)
.github/workflows/fern-docs-ci.yml.github/workflows/fern-docs-preview-build.yml.github/workflows/fern-docs-preview-comment.yml.github/workflows/publish-fern-docs.ymlREADME.mddocs/1.2/architecture.mddocs/1.2/configuration.mddocs/1.2/development.mddocs/1.2/install-deb.mddocs/1.2/install-helm.mddocs/1.2/install-rpm.mddocs/1.2/usage.mddocs/1.3/architecture.mddocs/1.3/configuration.mddocs/1.3/development.mddocs/1.3/install-deb.mddocs/1.3/install-helm.mddocs/1.3/install-rpm.mddocs/1.3/usage.mddocs/index-1.2.ymldocs/index-1.3.ymlfern/.gitignorefern/docs.ymlfern/fern.config.json
🚧 Files skipped from review as they are similar to previous changes (6)
- README.md
- docs/1.3/install-deb.md
- fern/.gitignore
- docs/1.2/install-deb.md
- docs/1.2/development.md
- docs/1.3/install-rpm.md
| - name: Install Fern CLI | ||
| run: npm install -g fern-api@$(jq -r .version fern/fern.config.json) |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- target workflow excerpts ---'
for f in .github/workflows/fern-docs-ci.yml .github/workflows/publish-fern-docs.yml; do
echo "### $f"
sed -n '85,120p' "$f" 2>/dev/null || sed -n '35,70p' "$f"
done
printf '%s\n' '--- all fern CLI installation and VERSION validation sites ---'
rg -n -C 5 'Install Fern CLI|npm install -g fern-api|VERSION=.*fern|valid semver|semver' .github/workflows
printf '%s\n' '--- referenced config files and version values ---'
for f in fern/fern.config.json; do
if [ -f "$f" ]; then
jq -c '{version: .version}' "$f"
else
echo "$f: missing"
fi
done
printf '%s\n' '--- workflow file list ---'
git ls-files '.github/workflows/*'Repository: NVIDIA/fleet-intelligence-agent
Length of output: 5161
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- workflow triggers, checkout, and permissions ---'
for f in .github/workflows/fern-docs-ci.yml .github/workflows/publish-fern-docs.yml .github/workflows/fern-docs-preview-comment.yml; do
echo "### $f"
sed -n '1,95p' "$f"
done
printf '%s\n' '--- all references to fern.config.json and workflow-controlled inputs ---'
rg -n -C 4 'fern\.config\.json|pull_request|workflow_dispatch|repository_dispatch|ref:|checkout|paths:|permissions:' .github/workflows
printf '%s\n' '--- package-manager availability and npm spec parser metadata (read-only) ---'
command -v npm || true
npm --version 2>/dev/null || true
node --version 2>/dev/null || true
npm view npm version 2>/dev/null || trueRepository: NVIDIA/fleet-intelligence-agent
Length of output: 29230
🏁 Script executed:
#!/bin/bash
set -e
node - <<'JS'
const candidates = [
'fern-api@5.67.1',
'fern-api@latest',
'fern-api@^5.67.1',
'fern-api@~5.67.1',
'fern-api@npm:some-other-package@1.0.0',
'fern-api@file:../local-package',
'fern-api@https://example.invalid/pkg.tgz',
];
let parse;
try {
parse = require('npm-package-arg');
} catch (e) {
console.error(`npm-package-arg unavailable: ${e.message}`);
process.exit(2);
}
for (const spec of candidates) {
try {
const p = parse(spec);
console.log(JSON.stringify({spec, type: p.type, rawSpec: p.rawSpec, fetchSpec: p.fetchSpec, name: p.name}));
} catch (e) {
console.log(JSON.stringify({spec, error: e.message}));
}
}
JS
printf '%s\n' '--- preview regex acceptance ---'
node - <<'JS'
const re = /^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9.]+)?$/;
for (const v of ['5.67.1', '5.67.1-beta.1', 'latest', '^5.67.1', '~5.67.1', 'npm:other@1.0.0', 'file:../x', '5.67.1+build.1', '5.67.1-a..b', '5.67.1-01']) {
console.log(`${v}\t${re.test(v)}`);
}
JSRepository: NVIDIA/fleet-intelligence-agent
Length of output: 279
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- locate npm package-spec parser bundled with npm ---'
npm_root="$(npm root -g)"
echo "global root: $npm_root"
find /usr/local /usr/lib "$npm_root" -type f -path '*/npm-package-arg/*' 2>/dev/null | head -20
printf '%s\n' '--- evaluate the validation pattern independently ---'
node - <<'JS'
const re = /^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9.]+)?$/;
for (const v of ['5.67.1', '5.67.1-beta.1', 'latest', '^5.67.1', '~5.67.1', 'npm:other@1.0.0', 'file:../x', '5.67.1+build.1', '5.67.1-a..b', '5.67.1-01']) {
console.log(`${v}\t${re.test(v)}`);
}
JSRepository: NVIDIA/fleet-intelligence-agent
Length of output: 1062
🌐 Web query:
npm package spec documentation aliases tags ranges exact version package@spec
💡 Result:
In the npm ecosystem, a package specifier (or package-spec) is a string used to identify a package in commands like npm install or within a package.json file [1][2][3]. These specifiers allow you to request specific packages using different methods, including by name, version, range, tag, or alias [1][2]. Package Name and Versions A basic package specifier typically follows the format [<@scope>/] [1][3]. To specify a version, you use the @ symbol followed by the desired version, tag, or range [1][2][3]. - Exact Version: To install a specific version, use package@version (e.g., npm@6.13.1) [1][2][3]. - Version Ranges: You can specify a version range to allow for flexible updates, following semantic versioning (SemVer) rules, such as ^1.2.3 or ~1.2.3 (e.g., npm@^4.0.0) [1][3][4]. - Tags (Dist-tags): Distribution tags are human-readable labels that point to specific versions [5]. You can install a package by tag using package@tag (e.g., npm@latest or npm@beta) [6][7][8]. If no tag or version is specified, npm defaults to the latest tag [6][8][9]. Tags must not be interpretable as valid SemVer ranges (e.g., avoid tags starting with a number or the letter v) [6][8][9]. Aliases Package aliases allow you to install a package under a custom name, which is useful for resolving naming conflicts or using multiple versions of the same package simultaneously [7]. The syntax is @npm: [1][2]. For example, running npm install my-alias@npm:original-package installs original-package into your project but renames it to my-alias within your node_modules folder [7]. General Syntax The overarching format for a named package specifier is [1][3]: - [<@scope>/] - [<@scope>/]@ - [<@scope>/]@ - [<@scope>/]@ Other types of specifiers, such as local folders (prefixed with./ or /), tarballs, and git URLs, also exist within the broader definition of a package-spec [1][3].
Citations:
- 1: https://docs.npmjs.com/cli/v9/using-npm/package-spec/
- 2: https://cdn.jsdelivr.net/npm/npm@10.8.2/docs/output/using-npm/package-spec.html
- 3: https://docs.npmjs.com/cli/v11/using-npm/package-spec/
- 4: https://docs.npmjs.com/cli/v6/using-npm/semver/
- 5: https://docs.npmjs.com/adding-dist-tags-to-packages/
- 6: https://docs.npmjs.com/cli/v10/commands/npm-dist-tag/
- 7: https://docs.npmjs.com/cli/v10/commands/npm-install/
- 8: https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/
- 9: https://docs.npmjs.com/cli/v9/commands/npm-dist-tag
🏁 Script executed:
#!/bin/bash
set -e
node - <<'JS'
const parse = require('/usr/local/lib/node_modules/npm/node_modules/npm-package-arg');
const candidates = [
'fern-api@5.67.1',
'fern-api@latest',
'fern-api@^5.67.1',
'fern-api@~5.67.1',
'fern-api@npm:some-other-package@1.0.0',
'fern-api@file:../local-package',
'fern-api@https://example.invalid/pkg.tgz',
];
for (const spec of candidates) {
try {
const p = parse(spec);
console.log(JSON.stringify({spec, type: p.type, rawSpec: p.rawSpec, fetchSpec: p.fetchSpec, name: p.name, alias: p.subSpec && p.subSpec.name}));
} catch (e) {
console.log(JSON.stringify({spec, error: e.message}));
}
}
JSRepository: NVIDIA/fleet-intelligence-agent
Length of output: 1076
Validate .version before installing Fern CLI.
Both workflows pass the unvalidated value to npm, which accepts ranges, tags, aliases, and other package specs. Apply the preview workflow’s semver validation and install "fern-api@${VERSION}" in both locations.
🧰 Tools
🪛 zizmor (1.28.0)
[warning] 106-106: ad-hoc installation of packages (adhoc-packages): installs a package outside of a lockfile
(adhoc-packages)
📍 Affects 2 files
.github/workflows/fern-docs-ci.yml#L105-L106(this comment).github/workflows/publish-fern-docs.yml#L54-L55
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/fern-docs-ci.yml around lines 105 - 106, Validate the
.version value with the existing preview workflow’s semver validation before
installation, assign it to VERSION, and install the exact package using the
VERSION variable. Apply this change at .github/workflows/fern-docs-ci.yml lines
105-106 and .github/workflows/publish-fern-docs.yml lines 54-55.
Source: Linters/SAST tools
| helm upgrade --install fleet-intelligence-agent \ | ||
| oci://ghcr.io/nvidia/charts/fleet-intelligence-agent \ | ||
| -n <namespace> \ | ||
| -f values.yaml |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- targeted documentation excerpts ---'
for f in docs/1.2/configuration.md docs/1.3/configuration.md; do
echo "### $f"
if [ -f "$f" ]; then
nl -ba "$f" | sed -n '90,125p;180,215p'
else
echo "missing"
fi
done
printf '%s\n' '--- chart/version references ---'
rg -n -i --glob '!node_modules' \
'fleet-intelligence-agent|helm (upgrade|install|get values)|appVersion|version:' \
docs charts .github 2>/dev/null | head -300Repository: NVIDIA/fleet-intelligence-agent
Length of output: 10868
🏁 Script executed:
#!/bin/bash
set -e
for f in docs/1.2/configuration.md docs/1.3/configuration.md \
docs/1.2/install-helm.md docs/1.3/install-helm.md \
deployments/helm/fleet-intelligence-agent/Chart.yaml \
.github/workflows/release.yml; do
echo "### $f"
if [ -f "$f" ]; then
awk 'NR>=1 && NR<=240 {printf "%6d %s\n", NR, $0}' "$f" |
grep -E -C 4 \
'helm (upgrade|install)|fleet-intelligence-agent|version:|appVersion|CHART_VERSION|VERSION=' |
head -240
else
echo "missing"
fi
done
printf '%s\n' '--- repository tags and release references ---'
git tag --list | tail -30
git branch --show-current
git status --shortRepository: NVIDIA/fleet-intelligence-agent
Length of output: 16280
🌐 Web query:
NVIDIA fleet-intelligence-agent GitHub releases tags Fleet Intelligence Agent 1.2 1.3 Helm chart
💡 Result:
The NVIDIA Fleet Intelligence Agent is a host agent designed for GPU telemetry collection and attestation [1][2]. As of July 30, 2026, the project is hosted on GitHub [2]. Releases and Tags The official GitHub repository for the project manages versioned releases [3]. Recent stable versions include: - v1.3.0 (published June 4, 2026) [1] - v1.2.1 (published May 5, 2026) [4] These releases provide binary assets, including DEB and RPM packages for various architectures [1][4]. Helm Chart The Fleet Intelligence Agent supports installation via a Helm chart [5][6]. The chart is hosted in the GitHub Container Registry (ghcr.io) [5]. Installation and upgrades are performed using the following OCI-compliant command: helm install fleet-intelligence-agent oci://ghcr.io/nvidia/charts/fleet-intelligence-agent --version "$CHART_VERSION" --namespace "$NS" [5] When installing or upgrading, it is recommended to switch to the specific release tag in the repository documentation to ensure compatibility, as the main branch may contain unreleased changes [2][6]. Comprehensive documentation, including architectural details and installation guides, is available in the GitHub repository [6].
Citations:
- 1: https://github.com/NVIDIA/fleet-intelligence-agent/releases/tag/v1.3.0
- 2: https://github.com/nvidia/fleet-intelligence-agent
- 3: https://github.com/NVIDIA/fleet-intelligence-agent/releases
- 4: https://github.com/NVIDIA/fleet-intelligence-agent/releases/tag/v1.2.1
- 5: https://github.com/NVIDIA/fleet-intelligence-agent/blob/main/docs/install-helm.md
- 6: https://github.com/NVIDIA/fleet-intelligence-agent/
Pin the chart version in both installation examples.
Use --version 1.2.1 in docs/1.2/configuration.md and --version 1.3.0 in docs/1.3/configuration.md; otherwise these commands install whichever chart is latest rather than the documented release.
📍 Affects 2 files
docs/1.2/configuration.md#L104-L107(this comment)docs/1.3/configuration.md#L109-L114
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/1.2/configuration.md` around lines 104 - 107, Pin the Helm chart version
in both installation examples: update docs/1.2/configuration.md lines 104-107 to
use --version 1.2.1, and docs/1.3/configuration.md lines 109-114 to use
--version 1.3.0, preserving the existing command structure.
| ### Kubernetes | ||
|
|
||
| ```bash | ||
| helm get values fleet-intelligence-agent -n <namespace> | ||
| kubectl get daemonset fleet-intelligence-agent -n <namespace> -o yaml | ||
| kubectl logs -n <namespace> -l app.kubernetes.io/name=fleet-intelligence-agent --tail=100 |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -eu
for f in docs/1.2/configuration.md docs/1.3/configuration.md; do
echo "=== $f ==="
sed -n '180,215p' "$f"
done
printf '\n=== Helm value-inspection references ===\n'
rg -n -C 3 'helm get values|--all|effective configuration|merged values' docs README.md .github 2>/dev/null || trueRepository: NVIDIA/fleet-intelligence-agent
Length of output: 2676
🌐 Web query:
Helm 3 helm get values --all documentation computed values user-supplied values
💡 Result:
In Helm 3, the helm get values command retrieves the configuration values used for a specific release [1][2]. The behavior of this command depends on whether the --all (or -a) flag is used: 1. Default Behavior (Without --all): When run without the --all flag, helm get values returns only the user-supplied values [2]. These are the specific overrides provided during the installation or upgrade of the chart (e.g., via -f values.yaml or --set flags) [2][3]. If no specific overrides were provided for a release, the output may appear empty [2]. 2. With --all Flag: When the --all (or -a) flag is used, helm get values returns the full set of computed values [1][2]. This includes the merged result of both the user-supplied overrides and the chart's default values defined in its internal values.yaml file [2][3]. This distinction is important because the user-supplied values represent only the modifications made to the chart's base configuration, whereas the computed values represent the final, effective configuration that was actually rendered during deployment [2][3]. Using helm get values --all is the recommended approach for auditing the exact configuration of a running release or for reproducing it [2].
Citations:
- 1: https://helm.sh/docs/helm/helm_get_values/
- 2: https://latchkey.dev/learn/command-reference/helm-get-command
- 3: https://helm.sh/docs/chart_template_guide/values_files
Use helm get values --all in both Kubernetes verification examples so the command includes chart defaults and user overrides, rather than only user-supplied values.
📍 Affects 2 files
docs/1.2/configuration.md#L196-L201(this comment)docs/1.3/configuration.md#L203-L206
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/1.2/configuration.md` around lines 196 - 201, Update the Kubernetes
verification commands in docs/1.2/configuration.md lines 196-201 and
docs/1.3/configuration.md lines 203-206 to use helm get values --all, ensuring
both examples display chart defaults and user overrides.
| kubectl get svc -n gpu-operator nvidia-dcgm | ||
|
|
||
| # Test DCGM connectivity from a pod | ||
| kubectl exec -n "$NS" "$POD_NAME" -- curl -v telnet://nvidia-dcgm.gpu-operator.svc:5555 | ||
|
|
||
| # Check DCGM URL environment variable | ||
| kubectl get pods -n "$NS" "$POD_NAME" -o jsonpath='{.spec.containers[0].env[?(@.name=="DCGM_URL")].value}' |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use the configured DCGM endpoint in troubleshooting.
The installation instructions allow overriding env.DCGM_URL in Lines 104-108, but these checks always query nvidia-dcgm.gpu-operator.svc:5555. With a custom service or port, troubleshooting tests the default endpoint instead of the configured one. Use $DCGM_URL for the connectivity check and make the service lookup explicitly default-only or configurable.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/1.2/install-helm.md` around lines 172 - 178, Update the DCGM
troubleshooting commands near the DCGM_URL environment check to use the
configured $DCGM_URL for connectivity testing instead of the hardcoded
nvidia-dcgm.gpu-operator.svc:5555 endpoint. Make the kubectl service lookup
explicitly default-only or otherwise configurable, preserving the documented
custom env.DCGM_URL override behavior.
| Download the package from [Latest stable release](https://github.com/NVIDIA/fleet-intelligence-agent/releases/latest), then install: | ||
|
|
||
| ```bash | ||
| # RHEL/Rocky/AlmaLinux/Amazon Linux (x86_64) | ||
| sudo dnf install ./fleetint-VERSION-1.x86_64.rpm |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Pin the package instructions to the documented 1.2 release line.
Because this page is under docs/1.2/, linking to /releases/latest and leaving VERSION unconstrained can direct users to a newer release than the documentation describes. Link to the v1.2.1 release (or explicitly require a compatible 1.2.x package) in both the installation and update sections.
Also applies to: 97-106
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/1.2/install-rpm.md` around lines 80 - 84, Update the release link and
package version placeholders in the installation and update sections to target
the documented 1.2 release line: link to the v1.2.1 release and require a
compatible 1.2.x RPM instead of using the latest release or unconstrained
VERSION.
| ## Exposing the Agent for External Monitoring | ||
|
|
||
| By default, fleetint uses a Unix socket for security. To allow external monitoring tools like Prometheus to scrape metrics over the network, switch to a TCP listener with the `--listen-address` flag: | ||
|
|
||
| ```bash | ||
| # Expose on all interfaces | ||
| sudo fleetint run --listen-address=0.0.0.0:15133 | ||
|
|
||
| # Or expose on a specific IP address | ||
| sudo fleetint run --listen-address=192.168.1.100:15133 |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
rg -n -C 8 -- '--listen-address|listen.address|listen_address|Unix socket|TCP listener|TLS|authentication|metrics' docs src .github 2>/dev/null | head -n 240Repository: NVIDIA/fleet-intelligence-agent
Length of output: 18064
🏁 Script executed:
printf '%s\n' '--- docs/1.2/usage.md ---'
sed -n '288,322p' docs/1.2/usage.md
printf '%s\n' '--- candidate files ---'
git ls-files | rg '(^|/)(cmd|internal|pkg|server|api|.*http.*|.*listen.*|.*metric.*)' | head -n 200
printf '%s\n' '--- relevant declarations and routes ---'
rg -n -C 6 --glob '!vendor/**' --glob '!node_modules/**' \
'listen-address|ListenAndServe|ListenAndServeTLS|http\.Server|Serve\(|HandleFunc|/metrics|BasicAuth|Authorization|TLSConfig|certificate|bearer|auth' . | head -n 320Repository: NVIDIA/fleet-intelligence-agent
Length of output: 30357
🏁 Script executed:
printf '%s\n' '--- internal/server outline ---'
ast-grep outline internal/server/server.go internal/server/handlers.go
printf '%s\n' '--- server implementation ---'
cat -n internal/server/server.go
cat -n internal/server/handlers.go
printf '%s\n' '--- run command and config ---'
cat -n cmd/fleetint/run.go
rg -n -C 8 -- 'ListenAddress|listen-address|NewServer|server\.Start|http\.NewServeMux|ServeMux|middleware|Authorization|TLS|BasicAuth' \
cmd/fleetint internal/config internal/serverRepository: NVIDIA/fleet-intelligence-agent
Length of output: 50387
Use a loopback listener as the primary example and document network controls. The TCP server exposes the unauthenticated API over plaintext HTTP, so 0.0.0.0:15133 makes telemetry and host information reachable on every interface. Show 127.0.0.1 by default and require a firewall/private network or TLS-authenticated reverse proxy for remote scraping.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/1.2/usage.md` around lines 304 - 313, The “Exposing the Agent for
External Monitoring” documentation uses an unsafe all-interfaces listener as the
primary example. Make 127.0.0.1:15133 the default example, retain a specific
remote address only with guidance to restrict access through a firewall or
private network, and document that remote scraping should use a
TLS-authenticated reverse proxy because the TCP API is unauthenticated plaintext
HTTP.
| ``` | ||
| fleetint/ | ||
| ├── cmd/ | ||
| │ └── fleetint/ # Main CLI application | ||
| ├── internal/ | ||
| │ ├── cmdutil/ # Command utilities | ||
| │ ├── config/ # Configuration management | ||
| │ ├── exporter/ # Data export functionality | ||
| │ │ ├── collector/ # Data collection | ||
| │ │ ├── converter/ # Format conversion (CSV, OTLP) | ||
| │ │ └── writer/ # Output writers (file, HTTP) | ||
| │ ├── machineinfo/ # Machine information gathering | ||
| │ ├── server/ # HTTP API server | ||
| │ └── version/ # Version information | ||
| ├── deployments/ | ||
| │ └── packages/ # Package build configurations | ||
| │ ├── scripts/ # Install/uninstall scripts | ||
| │ └── systemd/ # Systemd service files | ||
| └── docs/ # Documentation | ||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add a language identifier to the project-structure code fence.
The unlabeled fence triggers Markdownlint MD040; use text (or another appropriate language) after the opening backticks.
🧰 Tools
🪛 markdownlint-cli2 (0.23.1)
[warning] 33-33: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/1.3/development.md` around lines 33 - 52, Update the project-structure
code fence in the documentation to include the `text` language identifier after
the opening backticks, preserving the diagram contents unchanged.
Source: Linters/SAST tools
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 9
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/fern-docs-ci.yml:
- Around line 105-106: Validate the .version value with the existing preview
workflow’s semver validation before installation, assign it to VERSION, and
install the exact package using the VERSION variable. Apply this change at
.github/workflows/fern-docs-ci.yml lines 105-106 and
.github/workflows/publish-fern-docs.yml lines 54-55.
In `@docs/1.2/configuration.md`:
- Around line 196-201: Update the Kubernetes verification commands in
docs/1.2/configuration.md lines 196-201 and docs/1.3/configuration.md lines
203-206 to use helm get values --all, ensuring both examples display chart
defaults and user overrides.
- Around line 104-107: Pin the Helm chart version in both installation examples:
update docs/1.2/configuration.md lines 104-107 to use --version 1.2.1, and
docs/1.3/configuration.md lines 109-114 to use --version 1.3.0, preserving the
existing command structure.
In `@docs/1.2/install-helm.md`:
- Around line 172-178: Update the DCGM troubleshooting commands near the
DCGM_URL environment check to use the configured $DCGM_URL for connectivity
testing instead of the hardcoded nvidia-dcgm.gpu-operator.svc:5555 endpoint.
Make the kubectl service lookup explicitly default-only or otherwise
configurable, preserving the documented custom env.DCGM_URL override behavior.
In `@docs/1.2/install-rpm.md`:
- Around line 80-84: Update the release link and package version placeholders in
the installation and update sections to target the documented 1.2 release line:
link to the v1.2.1 release and require a compatible 1.2.x RPM instead of using
the latest release or unconstrained VERSION.
In `@docs/1.2/usage.md`:
- Around line 304-313: The “Exposing the Agent for External Monitoring”
documentation uses an unsafe all-interfaces listener as the primary example.
Make 127.0.0.1:15133 the default example, retain a specific remote address only
with guidance to restrict access through a firewall or private network, and
document that remote scraping should use a TLS-authenticated reverse proxy
because the TCP API is unauthenticated plaintext HTTP.
In `@docs/1.3/configuration.md`:
- Around line 63-65: Update the configuration documentation around the
duration-valued environment variable descriptions to state that the table covers
both Fleet Intelligence settings and process-level environment tuning. Remove
MALLOC_ARENA_MAX from the telemetry exporter and runtime interval description,
and describe its glibc allocator behavior separately.
In `@docs/1.3/development.md`:
- Around line 33-52: Update the project-structure code fence in the
documentation to include the `text` language identifier after the opening
backticks, preserving the diagram contents unchanged.
In `@docs/1.3/install-helm.md`:
- Around line 36-44: Update the enrollment Secret creation instructions under
“Create enrollment secret” to avoid passing ENROLL_TOKEN via the kubectl command
line. Use a safer input mechanism that does not expose the token in process
arguments, while preserving the existing secret name, namespace, and token key
behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: d4c79c0e-08d1-415f-88ee-2db8b2831965
📒 Files selected for processing (24)
.github/workflows/fern-docs-ci.yml.github/workflows/fern-docs-preview-build.yml.github/workflows/fern-docs-preview-comment.yml.github/workflows/publish-fern-docs.ymlREADME.mddocs/1.2/architecture.mddocs/1.2/configuration.mddocs/1.2/development.mddocs/1.2/install-deb.mddocs/1.2/install-helm.mddocs/1.2/install-rpm.mddocs/1.2/usage.mddocs/1.3/architecture.mddocs/1.3/configuration.mddocs/1.3/development.mddocs/1.3/install-deb.mddocs/1.3/install-helm.mddocs/1.3/install-rpm.mddocs/1.3/usage.mddocs/index-1.2.ymldocs/index-1.3.ymlfern/.gitignorefern/docs.ymlfern/fern.config.json
🚧 Files skipped from review as they are similar to previous changes (6)
- README.md
- docs/1.3/install-deb.md
- fern/.gitignore
- docs/1.2/install-deb.md
- docs/1.2/development.md
- docs/1.3/install-rpm.md
🛑 Comments failed to post (2)
docs/1.3/configuration.md (1)
63-65: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Separate allocator tuning from Fleet Intelligence settings.
MALLOC_ARENA_MAXcontrols glibc allocator behavior; it does not modify telemetry exporter configuration or runtime loop intervals. Clarify that this table includes process-level environment tuning in addition to Fleet Intelligence settings.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/1.3/configuration.md` around lines 63 - 65, Update the configuration documentation around the duration-valued environment variable descriptions to state that the table covers both Fleet Intelligence settings and process-level environment tuning. Remove MALLOC_ARENA_MAX from the telemetry exporter and runtime interval description, and describe its glibc allocator behavior separately.docs/1.3/install-helm.md (1)
36-44: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Avoid exposing the enrollment token through the kubectl command line.
--from-literal=token="$ENROLL_TOKEN"expands the secret into kubectl’s process arguments, allowing exposure through/proc/<pid>/cmdlineor process listings. This conflicts withdocs/1.3/usage.md’s recommendation to avoid command-line token exposure.Proposed fix
-kubectl create secret generic "$ENROLL_TOKEN_SECRET_NAME" \ - --namespace "$NS" \ - --from-literal=token="$ENROLL_TOKEN" +printf '%s' "$ENROLL_TOKEN" | + kubectl create secret generic "$ENROLL_TOKEN_SECRET_NAME" \ + --namespace "$NS" \ + --from-file=token=/dev/stdin📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.## Create enrollment secret If you need to enroll nodes, create the token Secret. The secret name should match the `ENROLL_TOKEN_SECRET_NAME` variable set above:🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/1.3/install-helm.md` around lines 36 - 44, Update the enrollment Secret creation instructions under “Create enrollment secret” to avoid passing ENROLL_TOKEN via the kubectl command line. Use a safer input mechanism that does not expose the token in process arguments, while preserving the existing secret name, namespace, and token key behavior.
|
Thanks for this PR! Maintaining separate directories such as docs/1.2 and docs/1.3 on main feels unintuitive and could allow release documentation to drift. Also, patch releases can differ—for example, 1.2.1 may have different behavior, configuration, or installation instructions from 1.2.0—so versioning only by major/minor may not be precise enough. I'm proposing this change:
This would give each released artifact an exact matching documentation snapshot without maintaining multiple copies on main. |
|
I will work on making the CI pull the latest two major versions into what Fern needs. We'll only keep 2 major versions since we don't support being further behind than that.. in fact right now we don't support being behind 1.3, based on the service requiring 1.3. We also shouldn't need different documents for minor version (ie. Z), if we need to change the documents for minor versions, it actually a major version release ... Z should only be patches, not functionality changes. |
…fleet-intel/agent
Description
This will move the docs into docs.nvidia.com/fleet-intel/agent for publishing, but leave the sources here in this repo. Contributors can continue to work with the docs here, but we'll cut specific releases for the docs.nvidia.com site when we make a major release (i.e. 1.2, 1.3 and 1.4). This will give us a more coheasive document set at docs.nvidia.com
Summary by CodeRabbit
New Features
Documentation
Automation / Release