From a07c5672b4fd13c70d97aed1a8973d4b907c4a2f Mon Sep 17 00:00:00 2001
From: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
Date: Wed, 13 May 2026 10:05:43 -0400
Subject: [PATCH 1/4] Add hugo and docsy site
Signed-off-by: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
---
mkdocs.yml | 2 -
netlify.toml | 17 +-
site/.gitignore | 10 +
site/assets/icons/logo.svg | 1 +
site/assets/scss/_variables_project.scss | 23 +
site/content/_index.md | 14 +
site/content/contribute/_index.md | 21 +
site/content/contribute/development.md | 44 +
.../contribute/proposals/NNNN-template.md | 225 +++++
site/content/contribute/proposals/_index.md | 89 ++
site/content/contribute/site.md | 107 +++
site/content/docs/_index.md | 51 ++
site/content/docs/concepts/_index.md | 10 +
site/content/docs/concepts/architecture.md | 101 ++
site/content/docs/concepts/compute-domains.md | 34 +
site/content/docs/concepts/gpu-allocation.md | 145 +++
site/content/docs/guides/_index.md | 11 +
.../docs/guides/compute-domain-workloads.md | 105 +++
site/content/docs/guides/gpu-sharing.md | 18 +
site/content/docs/guides/observability.md | 11 +
site/content/docs/guides/vfio-passthrough.md | 11 +
site/content/docs/guides/webhook.md | 11 +
site/content/docs/install.md | 12 +
site/content/docs/prerequisites.md | 12 +
site/content/docs/reference/_index.md | 9 +
site/content/docs/reference/api.md | 12 +
site/content/docs/reference/feature-gates.md | 13 +
site/content/docs/reference/helm-values.md | 11 +
site/content/docs/troubleshooting.md | 12 +
site/content/docs/uninstall.md | 11 +
site/content/docs/upgrade.md | 11 +
site/go.mod | 8 +
site/go.sum | 11 +
site/hugo.toml | 116 +++
site/package-lock.json | 864 ++++++++++++++++++
site/package.json | 20 +
36 files changed, 2179 insertions(+), 4 deletions(-)
delete mode 100644 mkdocs.yml
create mode 100644 site/.gitignore
create mode 100644 site/assets/icons/logo.svg
create mode 100644 site/assets/scss/_variables_project.scss
create mode 100644 site/content/_index.md
create mode 100644 site/content/contribute/_index.md
create mode 100644 site/content/contribute/development.md
create mode 100644 site/content/contribute/proposals/NNNN-template.md
create mode 100644 site/content/contribute/proposals/_index.md
create mode 100644 site/content/contribute/site.md
create mode 100644 site/content/docs/_index.md
create mode 100644 site/content/docs/concepts/_index.md
create mode 100644 site/content/docs/concepts/architecture.md
create mode 100644 site/content/docs/concepts/compute-domains.md
create mode 100644 site/content/docs/concepts/gpu-allocation.md
create mode 100644 site/content/docs/guides/_index.md
create mode 100644 site/content/docs/guides/compute-domain-workloads.md
create mode 100644 site/content/docs/guides/gpu-sharing.md
create mode 100644 site/content/docs/guides/observability.md
create mode 100644 site/content/docs/guides/vfio-passthrough.md
create mode 100644 site/content/docs/guides/webhook.md
create mode 100644 site/content/docs/install.md
create mode 100644 site/content/docs/prerequisites.md
create mode 100644 site/content/docs/reference/_index.md
create mode 100644 site/content/docs/reference/api.md
create mode 100644 site/content/docs/reference/feature-gates.md
create mode 100644 site/content/docs/reference/helm-values.md
create mode 100644 site/content/docs/troubleshooting.md
create mode 100644 site/content/docs/uninstall.md
create mode 100644 site/content/docs/upgrade.md
create mode 100644 site/go.mod
create mode 100644 site/go.sum
create mode 100644 site/hugo.toml
create mode 100644 site/package-lock.json
create mode 100644 site/package.json
diff --git a/mkdocs.yml b/mkdocs.yml
deleted file mode 100644
index 006510db0..000000000
--- a/mkdocs.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-site_name: DRA Driver for NVIDIA GPUs
-docs_dir: docs
diff --git a/netlify.toml b/netlify.toml
index 58677c274..baf6a28da 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -1,3 +1,16 @@
[build]
-publish = "site"
-command = "pip install mkdocs && mkdocs build"
+ base = "site"
+ publish = "site/public"
+ command = "npm ci && hugo --gc --minify"
+
+[build.environment]
+ HUGO_VERSION = "0.139.0"
+ GO_VERSION = "1.25.0"
+ NODE_VERSION = "20"
+ GIT_DEPTH = "0"
+
+[context.deploy-preview]
+ command = "npm ci && hugo --gc --minify --buildDrafts --buildFuture --baseURL $DEPLOY_PRIME_URL"
+
+[context.branch-deploy]
+ command = "npm ci && hugo --gc --minify --buildDrafts --buildFuture --baseURL $DEPLOY_PRIME_URL"
diff --git a/site/.gitignore b/site/.gitignore
new file mode 100644
index 000000000..c9e5220d6
--- /dev/null
+++ b/site/.gitignore
@@ -0,0 +1,10 @@
+# Hugo build output
+public/
+resources/
+.hugo_build.lock
+
+# npm
+node_modules/
+
+# Local Netlify CLI state
+.netlify/
\ No newline at end of file
diff --git a/site/assets/icons/logo.svg b/site/assets/icons/logo.svg
new file mode 100644
index 000000000..fbe1edeb0
--- /dev/null
+++ b/site/assets/icons/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/site/assets/scss/_variables_project.scss b/site/assets/scss/_variables_project.scss
new file mode 100644
index 000000000..bade60bbf
--- /dev/null
+++ b/site/assets/scss/_variables_project.scss
@@ -0,0 +1,23 @@
+// Kubernetes brand palette overrides for Docsy.
+// SIG-affiliated project — no NVIDIA branding.
+// See https://kubernetes.io/community/ for visual identity references.
+
+$primary: #326ce5; // Kubernetes blue
+$secondary: #6c757d;
+$info: #1d63ed;
+$success: #2ecc71;
+$warning: #f1c40f;
+$danger: #e74c3c;
+$dark: #2c3e50;
+$light: #ecf0f1;
+
+$enable-gradients: false;
+$enable-shadows: true;
+
+// Tweak Docsy defaults toward a flatter, k8s-style look
+$navbar-bg-color: $primary;
+$footer-bg-color: $dark;
+
+$td-enable-google-fonts: true;
+$google_font_name: "Open Sans";
+$google_font_family: "Open+Sans:300,300i,400,400i,700,700i";
\ No newline at end of file
diff --git a/site/content/_index.md b/site/content/_index.md
new file mode 100644
index 000000000..1f6df2c32
--- /dev/null
+++ b/site/content/_index.md
@@ -0,0 +1,14 @@
+---
+title: DRA Driver for NVIDIA GPUs
+description: A Kubernetes DRA driver for NVIDIA GPUs, MIG, VFIO, and Multi-Node NVLink.
+aliases:
+ - /home/
+sitemap:
+ disable: true
+outputs:
+ - HTML
+---
+
+
+
+Redirecting to [Docs](/docs/)…
\ No newline at end of file
diff --git a/site/content/contribute/_index.md b/site/content/contribute/_index.md
new file mode 100644
index 000000000..7d13e2ff2
--- /dev/null
+++ b/site/content/contribute/_index.md
@@ -0,0 +1,21 @@
+---
+title: Contribute
+linkTitle: Contribute
+weight: 60
+description: Build, test, and propose changes to the driver.
+cascade:
+ type: docs
+---
+
+The DRA driver is a Kubernetes SIG Node project. Contributions go through
+GitHub PRs and follow the upstream Kubernetes contribution model.
+
+- [Development](/contribute/development/) — local build, test, and cluster
+ loop.
+- [Documentation site](/contribute/site/) — build and preview this site
+ locally; how it gets deployed.
+- [Proposals](/contribute/proposals/) — when and how to file a design
+ proposal before writing code.
+
+For repo-level contribution rules, see
+[CONTRIBUTING.md](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/CONTRIBUTING.md).
\ No newline at end of file
diff --git a/site/content/contribute/development.md b/site/content/contribute/development.md
new file mode 100644
index 000000000..ac074137e
--- /dev/null
+++ b/site/content/contribute/development.md
@@ -0,0 +1,44 @@
+---
+title: Development
+linkTitle: Development
+weight: 10
+description: Build, test, and the local-cluster iteration loop.
+---
+
+**Tooling:** Go (version per [`go.mod`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/go.mod)), Docker + Buildx, Helm v3, kind, golangci-lint. Codegen tools are installed by `make -C deployments/devel install-tools`.
+
+## Make targets
+
+```
+make build # go build ./...
+make cmds # build the five binaries in cmd/
+make test # race-enabled unit tests
+make generate # CRDs, deepcopy, clientset, listers, informers
+make check # golangci-lint + check-generate (the CI gate)
+make helm-lint # lint the Helm chart
+make bats # BATS integration tests (needs a live cluster)
+```
+
+Prefix any target with `docker-` to run it in the devel container (requires `BUILD_DEVEL_IMAGE=yes`).
+
+## Local cluster
+
+```sh
+export KIND_CLUSTER_NAME=kind-dra-1
+./demo/clusters/kind/build-dra-driver-gpu.sh # build & load driver image
+./demo/clusters/kind/create-cluster.sh # create the cluster
+./demo/clusters/kind/install-dra-driver-gpu.sh # helm install
+```
+
+Iterate: edit → rerun the build script → rerun the install script.
+
+GPU-aware variant: [`demo/clusters/nvkind/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/demo/clusters/nvkind). GKE recipes: [`demo/clusters/gke/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/demo/clusters/gke).
+
+## Tests
+
+- **Unit**: `make test`.
+- **BATS**: [`tests/bats/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/tests/bats) — invasive, runs against a real cluster. Read [`tests/bats/README.md`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/tests/bats/README.md) first.
+
+## CI
+
+GitHub Actions in [`.github/workflows/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/.github/workflows) run lint, codegen check, unit tests, build, chart lint, and CodeQL. End-to-end GPU tests run on Prow / Lambda Cloud — see [`hack/ci/lambda/e2e-test.sh`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/hack/ci/lambda/e2e-test.sh).
\ No newline at end of file
diff --git a/site/content/contribute/proposals/NNNN-template.md b/site/content/contribute/proposals/NNNN-template.md
new file mode 100644
index 000000000..aaee1d0d8
--- /dev/null
+++ b/site/content/contribute/proposals/NNNN-template.md
@@ -0,0 +1,225 @@
+---
+title: NNNN — Template
+linkTitle: Template
+weight: 1
+description: Copy this when writing a new proposal.
+---
+
+
+
+| Field | Value |
+|----------------|---------------|
+| Status | provisional |
+| Authors | @your-handle |
+| Created | YYYY-MM-DD |
+| Related issues | #… |
+
+## Summary
+
+
+
+## Motivation
+
+### Who is asking for this, and why?
+
+
+
+### Goals
+
+
+
+### Non-goals
+
+
+
+## Why this belongs in the NVIDIA DRA driver
+
+
+
+## Proposal
+
+### User-facing example
+
+
+
+```yaml
+# example
+```
+
+### Affected components
+
+
+
+- [ ] `api/` — CRDs, CRD fields, or ResourceClaim shape
+- [ ] `gpu-kubelet-plugin`
+- [ ] `compute-domain-kubelet-plugin`
+- [ ] `compute-domain-controller`
+- [ ] `compute-domain-daemon`
+- [ ] admission webhook
+- [ ] Helm chart (`deployments/helm`)
+- [ ] CDI spec generation
+- [ ] Metrics
+- [ ] Kubelet-plugin checkpoint schema
+- [ ] Documentation
+- [ ] CI / testing
+
+### Authoritative state owner
+
+
+
+### Smallest valuable slice
+
+
+
+## Design
+
+### API changes
+
+
+
+### Feature gate & graduation
+
+
+
+### Upgrade & downgrade
+
+
+
+### Environment floor
+
+
+
+### Test plan
+
+
+
+## Risks
+
+
+
+## Alternatives
+
+
+
+## Drawbacks
+
+
+
+## Open questions
+
+
\ No newline at end of file
diff --git a/site/content/contribute/proposals/_index.md b/site/content/contribute/proposals/_index.md
new file mode 100644
index 000000000..c83e6a985
--- /dev/null
+++ b/site/content/contribute/proposals/_index.md
@@ -0,0 +1,89 @@
+---
+title: Enhancement proposals
+linkTitle: Proposals
+weight: 20
+description: When to file a design proposal and how to do it.
+---
+
+This directory holds lightweight design proposals for the NVIDIA DRA driver.
+
+A proposal is a short markdown document that answers a few high-signal
+questions *before* code is written, so reviewers and authors are aligned
+on scope, user-facing surface, component ownership, upgrade impact, and
+test plan.
+
+## When to file a proposal
+
+**A proposal is required if the change:**
+
+- Introduces a new feature gate, or graduates an existing gate to a new
+ stability level.
+- Makes a significant behavioral change to an existing feature.
+- Adds or modifies a user-facing API: CRDs, CRD fields, CLI flags,
+ Helm chart values, ResourceSlice attributes, or the kubelet-plugin
+ checkpoint schema.
+- Adds or modifies an external dependency (DCGM, NVSentinel, virtualization
+ stack, etc.).
+- Depends on a change in upstream Kubernetes, or requires coordination with
+ work that is landing there.
+- Touches the ComputeDomain / IMEX coordination layer in a way that affects
+ multi-node behavior.
+
+**A proposal is NOT required for:**
+
+- Bug fixes to existing behavior.
+- Documentation-only changes.
+- Internal refactoring with no observable behavior change.
+- Dependency version bumps with no API impact.
+- Incremental additions under an existing feature gate that don't change
+ the design.
+
+If you're unsure, open an issue describing what you want to do and ask —
+it's cheap to find out early.
+
+## How to file one
+
+1. Look at existing files in this directory and pick the next unused
+ 4-digit number (e.g., if `0001-foo.md` exists, name your file
+ `0002-short-title.md`).
+2. Copy `NNNN-template.md`, rename it, and fill it in. Start with
+ `Status: provisional`.
+3. Open a PR with the new document. You do not need to open an issue
+ first, but feel free to if you want a quick gut-check on whether a
+ proposal is needed.
+4. Iterate on the PR with maintainers. A proposal is ready to merge when
+ OWNERS from this repo approve — the same review flow as any code PR.
+5. Once implementation lands, bump `Status` to `implemented` in a
+ follow-up PR.
+
+Proposals are typically a few hundred lines of markdown, not a novel.
+Optimize for the reviewer's time: write the summary first, show a
+concrete user-facing example, and don't dwell on sections that don't
+apply to your change.
+
+For questions or quick discussion, see the chat venues listed in
+[CONTRIBUTING.md](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/CONTRIBUTING.md).
+
+## Status lifecycle
+
+- `provisional` — under discussion; design not yet agreed.
+- `implementable` — design agreed; ready for implementation.
+- `implemented` — shipped. Note the release in the document's header table.
+- `withdrawn` — author or maintainers decided not to proceed. Leave the
+ document in place as a decision record.
+
+## Feature gate graduation
+
+If your proposal introduces a feature gate, graduation to the next
+stability level is evaluated against three criteria. Proposals that do
+not involve a feature gate can skip this section.
+
+- **Feature completeness** — the implementation aligns with the intended
+ design goals.
+- **Interoperability** — the feature works reliably alongside adjacent
+ features (name the ones you tested against).
+- **Stability and soak time** — the feature has been exercised in
+ production-like environments for long enough to surface issues.
+
+Constraints and caveats that accompany a feature gate should be captured
+in release notes, not just in the proposal document.
\ No newline at end of file
diff --git a/site/content/contribute/site.md b/site/content/contribute/site.md
new file mode 100644
index 000000000..fb3a14d06
--- /dev/null
+++ b/site/content/contribute/site.md
@@ -0,0 +1,107 @@
+---
+title: Contribute to Docs
+linkTitle: Docs site
+weight: 15
+description: Build and preview this site locally, and how it gets deployed.
+---
+
+The site you're reading lives in
+[`site/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/site)
+and is built with [Hugo](https://gohugo.io/) and the
+[Docsy](https://www.docsy.dev/) theme. This page covers what you need
+to make a docs change locally and what happens when your PR merges.
+
+## Prerequisites
+
+| Tool | Minimum version | Notes |
+| --- | --- | --- |
+| [Hugo Extended](https://github.com/gohugoio/hugo/releases) | `0.125.0` | The **extended** build is required because Docsy compiles SCSS with Dart Sass. The non-extended build (including the one shipped by `apt install hugo`) will not work. |
+| [Go](https://go.dev/dl/) | `1.25.0` | Hugo Modules uses `go` to fetch the Docsy theme declared in [`site/go.mod`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/site/go.mod). |
+| [Node.js](https://nodejs.org/) + npm | Node 18+ LTS | Installs the PostCSS toolchain (`autoprefixer`, `postcss`, `postcss-cli`) that Hugo invokes during the build. |
+| Git | any recent | Required by Hugo Modules and by `enableGitInfo = true` in [`site/hugo.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/site/hugo.toml). |
+
+The exact versions Netlify uses for the production build are pinned in
+[`netlify.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/netlify.toml)
+at the repo root. Match them locally if you want byte-identical output.
+
+## Local development
+
+From inside `site/`:
+
+```bash
+npm ci # one-time; installs the PostCSS deps locked in package-lock.json
+npm run serve # starts Hugo's live-reload dev server on http://localhost:1313
+```
+
+`npm run serve` runs `hugo server --bind 0.0.0.0 --buildDrafts --buildFuture`,
+so pages with `draft: true` or a future `date:` in their front matter are
+visible. Edit any file under `content/` and the browser reloads automatically.
+The `--bind 0.0.0.0` flag exposes the server on all interfaces, which is
+convenient under WSL or a remote dev container.
+
+To produce a production build identical to what Netlify runs:
+
+```bash
+npm run build # hugo --gc --minify; output written to ./public
+```
+
+## Where content lives
+
+- `site/content/_index.md` — landing page
+- `site/content/docs/` — the **Docs** top-nav section (concepts, guides,
+ install/upgrade/uninstall, troubleshooting, reference)
+- `site/content/contribute/` — the **Contribute** top-nav section (this page,
+ development, proposals)
+- `site/hugo.toml` — site configuration (top nav, params, markup, output formats)
+- `site/go.mod` — pins the Docsy theme version
+- `site/package.json` — npm scripts and PostCSS deps used at build time
+
+Each page uses Docsy front matter, for example:
+
+```markdown
+---
+title: My new page
+linkTitle: My page
+weight: 30
+description: One-sentence summary that shows up in section listings.
+---
+
+Body content in Markdown.
+```
+
+The left sidebar orders pages by `weight:` ascending — pages without a
+`weight` float to the top of their section.
+
+## Deployment
+
+The site is built and hosted by Netlify, configured by the repo-root
+[`netlify.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/netlify.toml):
+
+- **Production:** every push to `main` triggers a deploy of
+ `hugo --gc --minify`, published to
+ [dra-driver-nvidia-gpu.sigs.k8s.io](https://dra-driver-nvidia-gpu.sigs.k8s.io/).
+- **Deploy previews:** every pull request gets its own preview URL built with
+ `--buildDrafts --buildFuture`, so reviewers can see in-progress content.
+ Netlify posts the preview URL back to the PR as a GitHub commit check.
+
+DNS for the `sigs.k8s.io` subdomain is managed in the
+[`kubernetes/k8s.io`](https://github.com/kubernetes/k8s.io) repository, not
+in this repo.
+
+## Common gotchas
+
+- **Wrong Hugo build.** `apt install hugo` and the default Homebrew formula
+ install the *non-extended* Hugo and will fail inside Docsy's SCSS partial.
+ Install `hugo_extended` from the
+ [GitHub release page](https://github.com/gohugoio/hugo/releases).
+- **Skipping `npm ci`.** Without `node_modules/`, the build fails the moment
+ Hugo's PostCSS pipeline runs (`postcss: command not found`). The error
+ message does not make the connection to `package.json` obvious.
+- **Drafts disappear in production.** A page with `draft: true` shows up
+ under `npm run serve` but is stripped by `npm run build` and the Netlify
+ production deploy. Drop `draft:` (or set it to `false`) when the page is
+ ready to publish.
+- **Hugo Modules need network access on the first build.** If you're behind
+ a corporate proxy, set `HTTPS_PROXY` before running `hugo` so it can fetch
+ the Docsy theme from GitHub. The `[module] proxy = "direct"` setting in
+ `site/hugo.toml` deliberately bypasses the public Go module proxy.
diff --git a/site/content/docs/_index.md b/site/content/docs/_index.md
new file mode 100644
index 000000000..87e7a9694
--- /dev/null
+++ b/site/content/docs/_index.md
@@ -0,0 +1,51 @@
+---
+title: DRA Driver for NVIDIA GPUs Overview
+linkTitle: Docs
+weight: 10
+description: A Kubernetes DRA driver for NVIDIA GPUs, MIG, VFIO, and Multi-Node NVLink.
+type: docs
+cascade:
+ type: docs
+---
+
+The DRA Driver for NVIDIA GPUs is a Kubernetes [Dynamic Resource Allocation (DRA)](https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/) driver that enables flexible GPU allocation and provisioning of multi-node NVLink fabrics for Kubernetes workloads.
+It requires Kubernetes 1.32 or later. Starting in Kubernetes 1.34, DRA is enabled by default. On Kubernetes 1.32 and 1.33, the `DynamicResourceAllocation` feature gate must be enabled.
+
+The driver manages two types of resources:
+
+- **GPUs** (`gpu.nvidia.com`) — allocates full GPUs, Multi-Instance GPU (MIG) slices, and Virtual Function I/O (VFIO) passthrough devices with fine-grained sharing and configuration control.
+- **ComputeDomains** (`compute-domain.nvidia.com`) — provisions ephemeral multi-node NVLink fabrics using IMEX, enabling pods on different nodes to share GPU memory at full NVLink bandwidth.
+
+
+The [Kubernetes device plugin framework](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) treats hardware resources as opaque countable integers. A workload either gets a whole unit or it doesn't and there is no way to express sharing, per-workload configuration, capability constraints, or topology requirements within that model.
+
+DRA is a replacement for the device plugin architecture itself, not just a different driver for the same interface. It brings hardware resource management closer to the Persistent Volume model: a workload declares what it needs in a `ResourceClaim`, and the driver fulfills it. This separation of declaration from consumption enables capabilities that are fundamentally out of scope for the device plugin framework:
+
+- Share a single GPU across multiple containers or pods (time-slicing or MPS)
+- Request GPUs by capability — memory size, compute capacity, architecture — rather than just count
+- Attach per-workload configuration (sharing strategy, MIG profile, MPS thread limits) directly to the claim
+- Allocate MIG devices dynamically without pre-configuring profiles on the node
+- Provision scoped, ephemeral NVLink fabrics that exist only for the lifetime of the workload
+
+## Use cases
+
+### GPU allocation
+
+Request GPUs, MIG slices, or VFIO passthrough devices in a `ResourceClaim`, with an optional sharing strategy (time-slicing or Multi-Process Service (MPS)).
+Refer to [Architecture](concepts/architecture.md) for how requests are fulfilled.
+
+### Multi-node NVLink with ComputeDomains
+
+Create a `ComputeDomain` resource to provision an ephemeral NVLink fabric across nodes.
+Workload pods claim a channel from the domain and receive the IMEX device mounts needed for direct cross-node GPU memory access.
+The fabric is torn down automatically when the workload finishes.
+
+## Get started
+
+- [Install and validate](install.md)
+
+## Learn more
+
+- [Architecture](concepts/architecture.md) — components, request flows, and reference links.
+- [API reference](reference/api.md) — opaque config types for `ResourceClaim` specs.
+- [Feature gates](reference/feature-gates.md) — available feature flags and their defaults.
\ No newline at end of file
diff --git a/site/content/docs/concepts/_index.md b/site/content/docs/concepts/_index.md
new file mode 100644
index 000000000..2f8ab5f0f
--- /dev/null
+++ b/site/content/docs/concepts/_index.md
@@ -0,0 +1,10 @@
+---
+title: Concepts
+linkTitle: Concepts
+weight: 20
+description: How the driver is put together and the model it exposes to users.
+---
+
+These pages explain the architecture of the DRA driver and the resource
+model it presents to workloads. Read these before writing manifests if you
+want to understand *why* the API looks the way it does.
\ No newline at end of file
diff --git a/site/content/docs/concepts/architecture.md b/site/content/docs/concepts/architecture.md
new file mode 100644
index 000000000..a47ab4f3c
--- /dev/null
+++ b/site/content/docs/concepts/architecture.md
@@ -0,0 +1,101 @@
+---
+title: Architecture
+linkTitle: Architecture
+weight: 10
+description: DRA Driver components and request flows.
+---
+
+This repo ships two independent Kubernetes DRA drivers from one codebase:
+
+- **`gpu.nvidia.com`** — allocates GPUs, MIG slices, and VFIO passthrough.
+- **`compute-domain.nvidia.com`** — allocates IMEX daemons and channels for Multi-Node NVLink.
+
+Both are delivered by the Helm chart in [`deployments/helm/dra-driver-nvidia-gpu/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/deployments/helm/dra-driver-nvidia-gpu).
+
+## Components
+
+| Binary | Runs as | What it does |
+|---|---|---|
+| `gpu-kubelet-plugin` | DaemonSet, per node | Publishes GPU / MIG / VFIO `ResourceSlice`s and injects CDI on Prepare. |
+| `compute-domain-kubelet-plugin` | Same DaemonSet, per node | Publishes IMEX daemon + channel devices and injects the IMEX mount on Prepare. |
+| `compute-domain-controller` | Cluster Deployment | Watches `ComputeDomain` CRs; spawns a per-CD DaemonSet and the matching `ResourceClaimTemplate`s. |
+| `compute-domain-daemon` | Per-CD DaemonSet, per node | Wraps and supervises `nvidia-imex`; reports peers. |
+| `webhook` | Cluster Deployment | Validates opaque config on `ResourceClaim`s. |
+
+```mermaid
+graph TB
+ subgraph cluster["Cluster-scoped (Deployment)"]
+ controller["compute-domain-controller"]
+ webhook["webhook"]
+ end
+ subgraph node["Each GPU Node (DaemonSet)"]
+ gpu["gpu-kubelet-plugin"]
+ cdp["compute-domain-kubelet-plugin"]
+ end
+ subgraph percd["Per ComputeDomain (DaemonSet)"]
+ daemon["compute-domain-daemon"]
+ end
+ controller -->|spawns| percd
+ controller -->|creates ResourceClaimTemplates| cdp
+```
+
+## GPU request flow
+
+Pod → `ResourceClaim` with a `GpuConfig` / `MigDeviceConfig` / `VfioDeviceConfig` → webhook validates → scheduler binds a device advertised by the GPU plugin → kubelet calls Prepare → plugin writes a CDI spec → runtime injects the GPU into the container.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant API as Kubernetes API
+ participant Webhook
+ participant Scheduler
+ participant Kubelet
+ participant Plugin as gpu-kubelet-plugin
+ participant Runtime as Container Runtime
+
+ User->>API: Create Pod + ResourceClaim (GpuConfig)
+ API->>Webhook: Validate opaque config
+ Webhook-->>API: Approved
+ API->>Scheduler: Bind device from ResourceSlice
+ Scheduler-->>API: Node + device assigned
+ API->>Kubelet: Start Pod
+ Kubelet->>Plugin: Prepare(ResourceClaim)
+ Plugin-->>Kubelet: CDI spec written
+ Kubelet->>Runtime: Inject GPU via CDI
+ Runtime-->>User: Container running with GPU
+```
+
+## ComputeDomain flow
+
+User creates a `ComputeDomain` → controller creates a per-CD DaemonSet → each daemon pod runs `nvidia-imex` → daemons publish their IP and clique through `ComputeDomainClique` CRs → workload pods claim a channel from the `compute-domain-default-channel.nvidia.com` DeviceClass → the CD kubelet plugin asserts readiness and injects `/dev/nvidia-caps-imex-channels/chan*` plus `/imexd` into the container.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant API as Kubernetes API
+ participant Controller as compute-domain-controller
+ participant Daemon as compute-domain-daemon
+ participant Plugin as compute-domain-kubelet-plugin
+ participant Runtime as Container Runtime
+
+ User->>API: Create ComputeDomain
+ API->>Controller: Notify (watch)
+ Controller->>API: Spawn per-CD DaemonSet + ResourceClaimTemplates
+ API->>Daemon: Start on each GPU node
+ Daemon->>API: Publish IP + clique via ComputeDomainClique CR
+ User->>API: Create Pod claiming channel
+ API->>Plugin: Prepare(channel ResourceClaim)
+ Plugin-->>API: Assert readiness
+ Plugin->>Runtime: Inject /dev/nvidia-caps-imex-channels + /imexd
+ Runtime-->>User: Container running with NVLink fabric
+```
+
+## Reference
+
+For opaque config types and CRD definitions: [API reference](../reference/api.md)
+
+For available feature flags and their defaults: [Feature gates](../reference/feature-gates.md)
+
+For DeviceClasses shipped by the chart: [`deviceclass-*.yaml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/deployments/helm/dra-driver-nvidia-gpu/templates)
+
+For example workloads: [`demo/specs/quickstart/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/demo/specs/quickstart)
\ No newline at end of file
diff --git a/site/content/docs/concepts/compute-domains.md b/site/content/docs/concepts/compute-domains.md
new file mode 100644
index 000000000..5f9d2d8d4
--- /dev/null
+++ b/site/content/docs/concepts/compute-domains.md
@@ -0,0 +1,34 @@
+---
+title: ComputeDomains
+linkTitle: ComputeDomains
+weight: 30
+description: How compute-domain.nvidia.com provisions ephemeral Multi-Node NVLink fabrics via IMEX.
+---
+
+A `ComputeDomain` is a custom resource that sets up a group of nodes to run a multi-node workload using NVLink fabric. It is used to enable GPU memory sharing across nodes in hardware that supports Multi-Node NVLink (MNNVL), such as GB200 NVL72 or H100 NVLink configurations.
+
+---
+
+## How it works
+
+Creating a `ComputeDomain` triggers the following sequence:
+
+1. The `compute-domain-controller` watches for new `ComputeDomain` resources and creates a per-domain DaemonSet.
+2. Each daemon pod in that DaemonSet runs `nvidia-imex`, which manages the NVLink fabric connection on its node.
+3. Each daemon publishes its IP address, clique membership, and readiness via a `ComputeDomainClique` CR in the driver namespace.
+4. The `compute-domain-controller` also creates a `ResourceClaimTemplate` per channel, making IMEX channels available for workload pods to claim.
+5. When a workload pod claims a channel, the `compute-domain-kubelet-plugin` injects the IMEX channel device (`/dev/nvidia-caps-imex-channels/chan*`) and the IMEX socket mount (`/imexd`) into the container.
+
+For the full sequence diagram, see [Architecture › ComputeDomain flow](architecture.md#computedomain-flow).
+
+---
+
+## Prerequisites
+
+See [Prerequisites](../prerequisites.md) for hardware and software requirements, including the ComputeDomain-specific requirements for Multi-Node NVLink hardware, GPU Feature Discovery, and `nvidia-imex` service configuration.
+
+---
+
+## Get started
+
+To create a `ComputeDomain` and run a workload that claims an IMEX channel, see the [ComputeDomain workloads guide](../guides/compute-domain-workloads.md).
\ No newline at end of file
diff --git a/site/content/docs/concepts/gpu-allocation.md b/site/content/docs/concepts/gpu-allocation.md
new file mode 100644
index 000000000..13f19fb2d
--- /dev/null
+++ b/site/content/docs/concepts/gpu-allocation.md
@@ -0,0 +1,145 @@
+---
+title: GPU allocation
+linkTitle: GPU allocation
+weight: 20
+description: How the gpu.nvidia.com driver allocates whole GPUs, MIG slices, and VFIO passthrough.
+---
+
+The DRA Driver for NVIDIA GPUs exposes three types of GPU resources, each suited to different workload requirements. This page explains what they are, how they differ, and how Kubernetes schedules them.
+
+| DeviceClass | Resource type | Use case |
+|---|---|---|
+| `gpu.nvidia.com` | Full GPU | Exclusive or shared access to a single physical GPU |
+| `mig.nvidia.com` | MIG slice | Hardware-isolated partition of a supported GPU |
+| `vfio.gpu.nvidia.com` | VFIO passthrough | Raw GPU access for workloads that manage the driver themselves |
+
+---
+
+## Resource types
+
+### Full GPUs
+
+A full GPU gives a container exclusive access to a single physical GPU. This is the default allocation mode and requires no additional configuration.
+
+Full GPUs support two optional sharing strategies for cases where you want to divide the GPU across multiple containers:
+
+- **Time-slicing:** containers take turns on the GPU using CUDA preemption. Requires the `TimeSlicingSettings` feature gate.
+- **MPS (Multi-Process Service):** containers run concurrently with configurable thread percentage and memory limits. Requires the `MPSSupport` feature gate.
+
+Target DeviceClass: `gpu.nvidia.com`
+
+See [Configure GPU Sharing](configure-sharing.md) for configuration examples.
+
+---
+
+### MIG slices
+
+MIG (Multi-Instance GPU) partitions a supported GPU (H100, A100, and newer) into independent hardware slices. Each slice has its own dedicated compute engines, memory bandwidth, and L2 cache — workloads are fully isolated at the hardware level.
+
+Unlike time-slicing and MPS, MIG partitioning is enforced by the GPU hardware itself. A container claiming a MIG slice cannot be affected by activity on another slice of the same physical GPU.
+
+MIG slices are identified by profiles such as `1g.5gb` or `3g.20gb`, where the first number is the fraction of GPU compute and the second is the dedicated memory allocation. The available profiles depend on the physical GPU model.
+
+MIG slices support both time-slicing and MPS sharing, using the same strategies as full GPUs. Time-slicing on MIG slices does not support interval configuration.
+
+Target DeviceClass: `mig.nvidia.com`
+
+See [Configure MIG](configure-mig.md) for configuration examples.
+
+---
+
+### VFIO passthrough
+
+VFIO (Virtual Function I/O) passes a full physical GPU directly to a container, bypassing the NVIDIA driver stack in the host kernel. This gives the container raw hardware access and is intended for workloads that manage the GPU driver themselves, such as virtual machine managers or specialized research environments.
+
+VFIO passthrough has no sharing options, one container gets one GPU.
+
+Target DeviceClass: `vfio.gpu.nvidia.com`
+
+Requires the `PassthroughSupport` feature gate (Alpha, default: false). See [Feature gates](reference/feature-gates.md) to enable it.
+
+---
+
+## Choosing a resource type
+
+| | Full GPU | MIG slice | VFIO passthrough |
+|---|---|---|---|
+| Hardware isolation | No | Yes | Full device |
+| Sharing supported | Yes (time-slicing or MPS) | Yes (time-slicing or MPS) | No |
+| Supported hardware | All NVIDIA GPUs | H100, A100, and newer | All NVIDIA GPUs |
+| Feature gate required | No (sharing gates optional) | No | `PassthroughSupport` (Alpha) |
+| Typical use case | ML training, general workloads | Multi-tenant inference, strict isolation | VM passthrough, specialized environments |
+
+---
+
+## How scheduling works
+
+When a pod references a `ResourceClaim`, Kubernetes uses the following flow to allocate and inject the GPU:
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant API as Kubernetes API
+ participant Scheduler
+ participant Kubelet
+ participant Plugin as GPU Kubelet Plugin
+ participant Runtime as Container Runtime
+
+ User->>API: Create Pod + ResourceClaim
+ API->>Scheduler: Schedule pod
+ Scheduler->>Plugin: Query available ResourceSlices
+ Scheduler->>API: Bind ResourceClaim to device + node
+ API->>Kubelet: Start pod on bound node
+ Kubelet->>Plugin: NodePrepareResources (claim + device + config)
+ Plugin->>Plugin: Generate CDI spec
+ Plugin->>Kubelet: Return CDI device names
+ Kubelet->>Runtime: Start container with CDI devices
+ Runtime->>User: Container running with GPU
+```
+
+The key components in this flow:
+
+- **ResourceSlice:** the kubelet plugin publishes one ResourceSlice per node, advertising all available GPU devices and their attributes.
+- **ResourceClaim:** the user's request for a specific type of GPU device, optionally with a configuration (GpuConfig, MigDeviceConfig, or VfioDeviceConfig) embedded as opaque parameters.
+- **CDI (Container Device Interface):** the standard used to inject devices into containers. The kubelet plugin generates a CDI spec at prepare time; the container runtime reads it to set up the device files, environment variables, and mounts.
+
+---
+
+## Requesting a GPU
+
+All GPU requests follow the same pattern: a `ResourceClaimTemplate` referencing a DeviceClass, with an optional opaque configuration block.
+
+Basic request for a full GPU:
+
+```yaml
+apiVersion: resource.k8s.io/v1 # Kubernetes 1.34+
+# apiVersion: resource.k8s.io/v1beta2 # Kubernetes 1.32 and 1.33
+kind: ResourceClaimTemplate
+metadata:
+ name: single-gpu
+spec:
+ spec:
+ devices:
+ requests:
+ - name: gpu
+ exactly:
+ deviceClassName: gpu.nvidia.com
+```
+
+Reference it from a pod:
+
+```yaml
+spec:
+ containers:
+ - name: workload
+ resources:
+ claims:
+ - name: gpu
+ resourceClaims:
+ - name: gpu
+ resourceClaimTemplateName: single-gpu
+```
+
+The scheduler selects an available device from the node's ResourceSlice that matches the DeviceClass. If a CEL selector is included in the request, only devices matching the expression are eligible.
+
+For configuration examples covering sharing strategies, MIG profiles, and VFIO, see the how-to pages linked above.
\ No newline at end of file
diff --git a/site/content/docs/guides/_index.md b/site/content/docs/guides/_index.md
new file mode 100644
index 000000000..ef9139160
--- /dev/null
+++ b/site/content/docs/guides/_index.md
@@ -0,0 +1,11 @@
+---
+title: Guides
+linkTitle: Guides
+weight: 90
+description: Task-oriented walkthroughs for common workflows.
+---
+
+These guides walk through how to use specific features of the driver. For
+example manifests, see
+[`demo/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/demo)
+in the repository.
\ No newline at end of file
diff --git a/site/content/docs/guides/compute-domain-workloads.md b/site/content/docs/guides/compute-domain-workloads.md
new file mode 100644
index 000000000..fdd249cde
--- /dev/null
+++ b/site/content/docs/guides/compute-domain-workloads.md
@@ -0,0 +1,105 @@
+---
+title: ComputeDomain workloads
+linkTitle: ComputeDomain workloads
+weight: 30
+description: Create a ComputeDomain, claim a channel, and run a Multi-Node NVLink workload.
+---
+
+For background on what a `ComputeDomain` is and how it fits together, see
+[ComputeDomains](../../concepts/compute-domains.md).
+
+## Prerequisites
+
+See [Prerequisites](../../prerequisites.md) for hardware and software requirements, including the ComputeDomain-specific requirements for Multi-Node NVLink hardware, GPU Feature Discovery, and `nvidia-imex` service configuration.
+
+## Create a ComputeDomain
+
+The minimal `ComputeDomain` spec requires only the name of the `ResourceClaimTemplate` the controller will create for channel allocation:
+
+```yaml
+apiVersion: resource.nvidia.com/v1beta1
+kind: ComputeDomain
+metadata:
+ name: my-compute-domain
+spec:
+ numNodes: 0
+ channel:
+ resourceClaimTemplate:
+ name: imex-channel-0
+```
+
+`numNodes` is deprecated. Set it to `0` (the recommended value when `IMEXDaemonsWithDNSNames` is enabled — its default state).
+
+After applying this resource, the controller creates:
+
+- A per-domain `DaemonSet` of `compute-domain-daemon` pods, one per GPU node.
+- A `ResourceClaimTemplate` named `imex-channel-0` (or whatever name you gave it), which workload pods use to request a channel.
+
+## Use the channel in a workload
+
+Reference the `ResourceClaimTemplate` name you set in `spec.channel.resourceClaimTemplate.name` when writing your workload:
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: my-workload
+spec:
+ containers:
+ - name: app
+ image: my-image
+ command: ["bash", "-c"]
+ args: ["ls -la /dev/nvidia-caps-imex-channels; sleep 9999"]
+ resources:
+ claims:
+ - name: imex-channel-0
+ resourceClaims:
+ - name: imex-channel-0
+ resourceClaimTemplateName: imex-channel-0
+```
+
+The pod will not start until the local IMEX daemon is ready.
+
+### Channel allocation modes
+
+The `spec.channel.allocationMode` field controls how many IMEX channels are injected:
+
+| Mode | Value | Description |
+|---|---|---|
+| Single | `Single` (default) | Injects a single IMEX channel into the workload container |
+| All | `All` | Injects all available IMEX channels (up to the hardware maximum) |
+
+Use `All` for workloads that need access to every channel in the IMEX domain.
+
+## Check status
+
+```bash
+kubectl get computedomain my-compute-domain -o yaml
+```
+
+The `status.status` field reports `Ready` when all expected IMEX daemons have joined. The `status.nodes` list shows each node's IP, clique ID, and individual daemon status.
+
+To see the `ComputeDomainClique` objects created for this domain:
+
+```bash
+kubectl get computedomainclique -n nvidia-dra-driver-gpu
+```
+
+## Feature gates
+
+Both feature gates that affect ComputeDomains are Beta and enabled by default. You do not need to set them for standard operation.
+
+| Feature gate | Stage | Default | Effect |
+|---|---|---|---|
+| `IMEXDaemonsWithDNSNames` | Beta | `true` | Daemons communicate using DNS names instead of raw IP addresses. This is the recommended mode and required by `ComputeDomainCliques`. |
+| `ComputeDomainCliques` | Beta | `true` | Uses `ComputeDomainClique` CRD objects to track daemon membership per clique instead of storing that information in `ComputeDomain.status.nodes`. Requires `IMEXDaemonsWithDNSNames`. |
+
+To disable a Beta gate (for example, to test a downgrade path):
+
+```yaml
+featureGates:
+ ComputeDomainCliques: false
+ IMEXDaemonsWithDNSNames: false
+```
+
+See [Feature gates](../../reference/feature-gates.md) for all available gates.
\ No newline at end of file
diff --git a/site/content/docs/guides/gpu-sharing.md b/site/content/docs/guides/gpu-sharing.md
new file mode 100644
index 000000000..a4952f3a4
--- /dev/null
+++ b/site/content/docs/guides/gpu-sharing.md
@@ -0,0 +1,18 @@
+---
+title: GPU sharing
+linkTitle: GPU sharing
+weight: 10
+description: Sharing GPUs across pods with time-slicing, MPS, and MIG.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will cover the three GPU-sharing modes the driver
+supports:
+
+- **Time-slicing** — round-robin scheduling of full GPUs across pods.
+- **MPS** — NVIDIA Multi-Process Service for concurrent kernel execution.
+- **MIG** — hardware-partitioned Multi-Instance GPU slices.
+
+It will explain when to pick each, the trade-offs, and how to request them
+through `ResourceClaim`s.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/guides/observability.md b/site/content/docs/guides/observability.md
new file mode 100644
index 000000000..68b3b9294
--- /dev/null
+++ b/site/content/docs/guides/observability.md
@@ -0,0 +1,11 @@
+---
+title: Observability
+linkTitle: Observability
+weight: 40
+description: Logs, metrics, and events emitted by the driver.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will list driver metrics, log fields, and the
+events you can rely on for monitoring.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/guides/vfio-passthrough.md b/site/content/docs/guides/vfio-passthrough.md
new file mode 100644
index 000000000..a641bd494
--- /dev/null
+++ b/site/content/docs/guides/vfio-passthrough.md
@@ -0,0 +1,11 @@
+---
+title: VFIO passthrough
+linkTitle: VFIO passthrough
+weight: 20
+description: Allocating GPUs as VFIO passthrough devices.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will document the VFIO passthrough path for VM
+workloads.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/guides/webhook.md b/site/content/docs/guides/webhook.md
new file mode 100644
index 000000000..edcff7bd2
--- /dev/null
+++ b/site/content/docs/guides/webhook.md
@@ -0,0 +1,11 @@
+---
+title: Admission webhook
+linkTitle: Webhook
+weight: 60
+description: What the admission webhook validates and how to debug rejections.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will cover the webhook's validation rules for
+opaque ResourceClaim config and how to interpret rejection messages.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/install.md b/site/content/docs/install.md
new file mode 100644
index 000000000..f0b50516b
--- /dev/null
+++ b/site/content/docs/install.md
@@ -0,0 +1,12 @@
+---
+title: Install the driver
+linkTitle: Install
+weight: 40
+description: Helm install steps for the DRA driver.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will walk through installing the Helm chart from
+[`deployments/helm/dra-driver-nvidia-gpu/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/deployments/helm/dra-driver-nvidia-gpu)
+and validating the install.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/prerequisites.md b/site/content/docs/prerequisites.md
new file mode 100644
index 000000000..13c2d8106
--- /dev/null
+++ b/site/content/docs/prerequisites.md
@@ -0,0 +1,12 @@
+---
+title: Prerequisites
+linkTitle: Prerequisites
+weight: 30
+description: Cluster, node, and tooling requirements before installing the driver.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will list the Kubernetes version floor, required
+feature gates, NVIDIA driver / container toolkit requirements, and any
+node-level setup.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/reference/_index.md b/site/content/docs/reference/_index.md
new file mode 100644
index 000000000..5b85b8353
--- /dev/null
+++ b/site/content/docs/reference/_index.md
@@ -0,0 +1,9 @@
+---
+title: Reference
+linkTitle: Reference
+weight: 100
+description: API, feature gates, and Helm values.
+---
+
+Reference material for the driver: the API surface, the set of feature
+gates, and every chart value you can set.
\ No newline at end of file
diff --git a/site/content/docs/reference/api.md b/site/content/docs/reference/api.md
new file mode 100644
index 000000000..b26ba8a21
--- /dev/null
+++ b/site/content/docs/reference/api.md
@@ -0,0 +1,12 @@
+---
+title: API
+linkTitle: API
+weight: 10
+description: CRDs and opaque-config types exposed by the driver.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will document the CRDs and opaque-config types
+defined under
+[`api/nvidia.com/resource/v1beta1`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/api/nvidia.com/resource/v1beta1).
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/reference/feature-gates.md b/site/content/docs/reference/feature-gates.md
new file mode 100644
index 000000000..71a744ef7
--- /dev/null
+++ b/site/content/docs/reference/feature-gates.md
@@ -0,0 +1,13 @@
+---
+title: Feature gates
+linkTitle: Feature gates
+weight: 20
+description: All driver feature gates, their stability, what they control, and how to enable them.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will list every feature gate defined in
+[`pkg/featuregates/featuregates.go`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/pkg/featuregates/featuregates.go),
+its current stability level, what it gates, and how to enable or disable
+gates via the Helm chart.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/reference/helm-values.md b/site/content/docs/reference/helm-values.md
new file mode 100644
index 000000000..cb4886771
--- /dev/null
+++ b/site/content/docs/reference/helm-values.md
@@ -0,0 +1,11 @@
+---
+title: Helm values
+linkTitle: Helm values
+weight: 30
+description: Every value the chart accepts.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will document every value in
+[`deployments/helm/dra-driver-nvidia-gpu/values.yaml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/deployments/helm/dra-driver-nvidia-gpu/values.yaml).
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/troubleshooting.md b/site/content/docs/troubleshooting.md
new file mode 100644
index 000000000..adf4df6a8
--- /dev/null
+++ b/site/content/docs/troubleshooting.md
@@ -0,0 +1,12 @@
+---
+title: Troubleshooting
+linkTitle: Troubleshooting
+weight: 85
+description: Diagnosing common failure modes.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will cover common failure modes (allocation never
+binds, IMEX never ready, container runtime injection errors, …) and how
+to diagnose them.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/uninstall.md b/site/content/docs/uninstall.md
new file mode 100644
index 000000000..338bf1fa2
--- /dev/null
+++ b/site/content/docs/uninstall.md
@@ -0,0 +1,11 @@
+---
+title: Uninstall
+linkTitle: Uninstall
+weight: 120
+description: Cleanly removing the driver from a cluster.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will document the Helm uninstall flow and any
+manual cleanup steps.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/content/docs/upgrade.md b/site/content/docs/upgrade.md
new file mode 100644
index 000000000..76557fa4a
--- /dev/null
+++ b/site/content/docs/upgrade.md
@@ -0,0 +1,11 @@
+---
+title: Upgrade
+linkTitle: Upgrade
+weight: 50
+description: Upgrading the driver between releases.
+---
+
+{{% pageinfo %}}
+Coming soon — this page will cover upgrade paths, behavior under in-flight
+ResourceClaims, and CRD / chart-value migration notes.
+{{% /pageinfo %}}
\ No newline at end of file
diff --git a/site/go.mod b/site/go.mod
new file mode 100644
index 000000000..0a2ba832d
--- /dev/null
+++ b/site/go.mod
@@ -0,0 +1,8 @@
+module sigs.k8s.io/dra-driver-nvidia-gpu/site
+
+go 1.25.0
+
+require (
+ github.com/google/docsy v0.15.0 // indirect
+ github.com/google/docsy/dependencies v0.7.2 // indirect
+)
diff --git a/site/go.sum b/site/go.sum
new file mode 100644
index 000000000..a2964f147
--- /dev/null
+++ b/site/go.sum
@@ -0,0 +1,11 @@
+github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
+github.com/FortAwesome/Font-Awesome v0.0.0-20241216213156-af620534bfc3/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
+github.com/google/docsy v0.12.0 h1:CddZKL39YyJzawr8GTVaakvcUTCJRAAYdz7W0qfZ2P4=
+github.com/google/docsy v0.12.0/go.mod h1:1bioDqA493neyFesaTvQ9reV0V2vYy+xUAnlnz7+miM=
+github.com/google/docsy v0.15.0 h1:MNJ1nrE2ZuweXlUNaegTo/UbSKZJu+WMczahfZaxosI=
+github.com/google/docsy v0.15.0/go.mod h1:1Fj1W1O3esZh7IBQ8XAYtxtg10udBXuGI89+LUQc1AU=
+github.com/google/docsy/dependencies v0.7.2 h1:+t5ufoADQAj4XneFphz4A+UU0ICAxmNaRHVWtMYXPSI=
+github.com/google/docsy/dependencies v0.7.2/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4=
+github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
+github.com/twbs/bootstrap v5.3.6+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
+github.com/twbs/bootstrap v5.3.8+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
diff --git a/site/hugo.toml b/site/hugo.toml
new file mode 100644
index 000000000..810b7a29b
--- /dev/null
+++ b/site/hugo.toml
@@ -0,0 +1,116 @@
+baseURL = "https://dra-driver-nvidia-gpu.sigs.k8s.io/"
+title = "DRA Driver for NVIDIA GPUs"
+defaultContentLanguage = "en"
+enableRobotsTXT = true
+enableGitInfo = true
+
+[languages]
+ [languages.en]
+ locale = "en-us"
+ label = "English"
+ contentDir = "content"
+ weight = 1
+
+# Hugo module (Docsy) configuration
+[module]
+ proxy = "direct"
+ [module.hugoVersion]
+ extended = true
+ min = "0.125.0"
+ [[module.imports]]
+ path = "github.com/google/docsy"
+ disable = false
+ [[module.imports]]
+ path = "github.com/google/docsy/dependencies"
+ disable = false
+
+# Markup
+[markup]
+ [markup.goldmark.renderer]
+ unsafe = true
+ [markup.highlight]
+ style = "tango"
+ lineNos = false
+ noClasses = false
+ [markup.tableOfContents]
+ startLevel = 2
+ endLevel = 4
+ ordered = false
+
+# Top navigation bar
+[[menu.main]]
+ name = "Docs"
+ weight = 10
+ url = "/docs/"
+[[menu.main]]
+ name = "Contribute"
+ weight = 20
+ url = "/contribute/"
+[[menu.main]]
+ name = "GitHub"
+ weight = 30
+ url = "https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu"
+ pre = ""
+
+# Site-wide parameters
+[params]
+ copyright = "The Kubernetes Authors"
+ github_repo = "https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu"
+ github_branch = "main"
+ github_subdir = "site"
+ github_project_repo = "https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu"
+ offlineSearch = false
+ prism_syntax_highlighting = false
+
+ [params.taxonomy]
+ taxonomyCloud = []
+ taxonomyPageHeader = []
+
+ [params.mermaid]
+ enable = true
+
+ [params.ui]
+ breadcrumb_disable = false
+ navbar_logo = true
+ navbar_translucent_over_cover_disable = false
+ readingtime.enable = false
+ sidebar_menu_compact = true
+ sidebar_menu_foldable = true
+ # Search hidden until Algolia DocSearch is approved + configured.
+ # Flip to false once [params.search.algolia] is populated below.
+ sidebar_search_disable = true
+
+ [params.ui.feedback]
+ enable = false
+
+ # Algolia DocSearch — uncomment and populate after the OSS application
+ # is approved. Also flip params.ui.sidebar_search_disable to false above.
+ # [params.search.algolia]
+ # appId = ""
+ # apiKey = ""
+ # indexName = ""
+
+ [params.links]
+ [[params.links.user]]
+ name = "Kubernetes Slack #sig-node"
+ url = "https://kubernetes.slack.com/messages/sig-node"
+ icon = "fab fa-slack"
+ desc = "Discussion and questions on Kubernetes SIG Node"
+ [[params.links.developer]]
+ name = "GitHub"
+ url = "https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu"
+ icon = "fab fa-github"
+ desc = "Source code and issue tracker"
+
+# Output formats — required for Docsy search & sitemaps
+[outputs]
+ home = ["HTML", "RSS", "SITEMAP"]
+ section = ["HTML", "RSS"]
+
+[outputFormats]
+ [outputFormats.SITEMAP]
+ mediaType = "application/xml"
+ baseName = "sitemap"
+ isHTML = false
+ isPlainText = true
+ rel = "sitemap"
\ No newline at end of file
diff --git a/site/package-lock.json b/site/package-lock.json
new file mode 100644
index 000000000..f8836e550
--- /dev/null
+++ b/site/package-lock.json
@@ -0,0 +1,864 @@
+{
+ "name": "dra-driver-nvidia-gpu-site",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "dra-driver-nvidia-gpu-site",
+ "version": "0.0.1",
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.49",
+ "postcss-cli": "^11.0.0"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz",
+ "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "caniuse-lite": "^1.0.30001787",
+ "fraction.js": "^5.3.4",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.28",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.28.tgz",
+ "integrity": "sha512-Ic44hnOtFIgravCunj1ifSoQPSUrkNiJuH9Mf6jr2jjoA74icqV8wU0KuadXeOR8zuIJMOoTv0GuQjZ9ZYNMeA==",
+ "dev": true,
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "baseline-browser-mapping": "^2.10.12",
+ "caniuse-lite": "^1.0.30001782",
+ "electron-to-chromium": "^1.5.328",
+ "node-releases": "^2.0.36",
+ "update-browserslist-db": "^1.2.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001792",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz",
+ "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/dependency-graph": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
+ "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.352",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.352.tgz",
+ "integrity": "sha512-9wHk8x6dyuimoe18EdiDPWKExNdxYqo4fn4FwOVVper6RxT3cmpBwBkWWfSOCYJjQdIco/nPhJhNLmn4Ufg1Yg==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
+ "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "11.3.5",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz",
+ "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz",
+ "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.12",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
+ "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.38",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz",
+ "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz",
+ "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-cli": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz",
+ "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.3.0",
+ "dependency-graph": "^1.0.0",
+ "fs-extra": "^11.0.0",
+ "picocolors": "^1.0.0",
+ "postcss-load-config": "^5.0.0",
+ "postcss-reporter": "^7.0.0",
+ "pretty-hrtime": "^1.0.3",
+ "read-cache": "^1.0.0",
+ "slash": "^5.0.0",
+ "tinyglobby": "^0.2.12",
+ "yargs": "^17.0.0"
+ },
+ "bin": {
+ "postcss": "index.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz",
+ "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.1.1",
+ "yaml": "^2.4.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-reporter": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz",
+ "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "thenby": "^1.3.4"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/thenby": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.4.1.tgz",
+ "integrity": "sha512-D5a/bO0KdalOE3q8MlrRmSxjbKZHT3MQmXkJP+r97Vw8MMwOZKOwUSEyTtK7eSMj2y0kyAjpYMRMZmmLw1FtNQ==",
+ "dev": true
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
+ "dev": true,
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz",
+ "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==",
+ "dev": true,
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ }
+ }
+}
diff --git a/site/package.json b/site/package.json
new file mode 100644
index 000000000..400ea7486
--- /dev/null
+++ b/site/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "dra-driver-nvidia-gpu-site",
+ "version": "0.0.1",
+ "description": "Documentation site for the DRA Driver for NVIDIA GPUs",
+ "private": true,
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu.git"
+ },
+ "scripts": {
+ "build": "hugo --gc --minify",
+ "serve": "hugo server --bind 0.0.0.0 --buildDrafts --buildFuture"
+ },
+ "devDependencies": {
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.49",
+ "postcss-cli": "^11.0.0"
+ }
+}
\ No newline at end of file
From 73d324894846341ba21e9c83528214e1a4dd50f0 Mon Sep 17 00:00:00 2001
From: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
Date: Wed, 13 May 2026 10:25:54 -0400
Subject: [PATCH 2/4] update netlify
Signed-off-by: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
---
netlify.toml | 4 ++--
site/hugo.toml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/netlify.toml b/netlify.toml
index baf6a28da..915b645bb 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -1,10 +1,10 @@
[build]
base = "site"
- publish = "site/public"
+ publish = "public"
command = "npm ci && hugo --gc --minify"
[build.environment]
- HUGO_VERSION = "0.139.0"
+ HUGO_VERSION = "0.157.0"
GO_VERSION = "1.25.0"
NODE_VERSION = "20"
GIT_DEPTH = "0"
diff --git a/site/hugo.toml b/site/hugo.toml
index 810b7a29b..cdc077a72 100644
--- a/site/hugo.toml
+++ b/site/hugo.toml
@@ -16,7 +16,7 @@ enableGitInfo = true
proxy = "direct"
[module.hugoVersion]
extended = true
- min = "0.125.0"
+ min = "0.157.0"
[[module.imports]]
path = "github.com/google/docsy"
disable = false
From a3028a475dc9feb6cf7b79f87d7204d448217d7f Mon Sep 17 00:00:00 2001
From: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
Date: Wed, 13 May 2026 10:41:18 -0400
Subject: [PATCH 3/4] update docs contribute docs
Signed-off-by: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
---
site/content/contribute/docs.md | 39 ++++++++++++
site/content/contribute/site.md | 107 --------------------------------
2 files changed, 39 insertions(+), 107 deletions(-)
create mode 100644 site/content/contribute/docs.md
delete mode 100644 site/content/contribute/site.md
diff --git a/site/content/contribute/docs.md b/site/content/contribute/docs.md
new file mode 100644
index 000000000..45dcd2c78
--- /dev/null
+++ b/site/content/contribute/docs.md
@@ -0,0 +1,39 @@
+---
+title: Contribute to Docs
+linkTitle: Docs
+weight: 15
+description: Build and preview this site locally.
+---
+
+The site lives in
+[`site/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/site)
+and is built with [Hugo](https://gohugo.io/) (the extended build) and the
+[Docsy](https://www.docsy.dev/) theme.
+
+## Quick start
+
+You need an extended Hugo build, Go, Node.js, and Git installed.
+
+```bash
+git clone https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu.git
+cd dra-driver-nvidia-gpu/site
+npm ci # one-time; installs PostCSS deps from package-lock.json
+npm run serve # http://localhost:1313, live-reload, drafts visible
+```
+
+To produce the same output Netlify builds for production, from `site/`:
+
+```bash
+npm run build # output written to ./public
+```
+
+## Where to look for more details
+
+| If you need to know… | Look at |
+| --- | --- |
+| Exact Hugo / Go / Node versions used for production builds | [`netlify.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/netlify.toml) |
+| Minimum Hugo version enforced locally, plus all site configuration | [`site/hugo.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/site/hugo.toml) |
+| Docsy theme version this site pins | [`site/go.mod`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/site/go.mod) |
+| npm scripts and PostCSS dependencies | [`site/package.json`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/site/package.json) |
+| How to install Hugo on any OS (use the extended build) | [Hugo installation docs](https://gohugo.io/installation/) |
+| Docsy theme prerequisites, configuration, and authoring guide | [Docsy documentation](https://www.docsy.dev/docs/) |
diff --git a/site/content/contribute/site.md b/site/content/contribute/site.md
deleted file mode 100644
index fb3a14d06..000000000
--- a/site/content/contribute/site.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: Contribute to Docs
-linkTitle: Docs site
-weight: 15
-description: Build and preview this site locally, and how it gets deployed.
----
-
-The site you're reading lives in
-[`site/`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/tree/main/site)
-and is built with [Hugo](https://gohugo.io/) and the
-[Docsy](https://www.docsy.dev/) theme. This page covers what you need
-to make a docs change locally and what happens when your PR merges.
-
-## Prerequisites
-
-| Tool | Minimum version | Notes |
-| --- | --- | --- |
-| [Hugo Extended](https://github.com/gohugoio/hugo/releases) | `0.125.0` | The **extended** build is required because Docsy compiles SCSS with Dart Sass. The non-extended build (including the one shipped by `apt install hugo`) will not work. |
-| [Go](https://go.dev/dl/) | `1.25.0` | Hugo Modules uses `go` to fetch the Docsy theme declared in [`site/go.mod`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/site/go.mod). |
-| [Node.js](https://nodejs.org/) + npm | Node 18+ LTS | Installs the PostCSS toolchain (`autoprefixer`, `postcss`, `postcss-cli`) that Hugo invokes during the build. |
-| Git | any recent | Required by Hugo Modules and by `enableGitInfo = true` in [`site/hugo.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/site/hugo.toml). |
-
-The exact versions Netlify uses for the production build are pinned in
-[`netlify.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/netlify.toml)
-at the repo root. Match them locally if you want byte-identical output.
-
-## Local development
-
-From inside `site/`:
-
-```bash
-npm ci # one-time; installs the PostCSS deps locked in package-lock.json
-npm run serve # starts Hugo's live-reload dev server on http://localhost:1313
-```
-
-`npm run serve` runs `hugo server --bind 0.0.0.0 --buildDrafts --buildFuture`,
-so pages with `draft: true` or a future `date:` in their front matter are
-visible. Edit any file under `content/` and the browser reloads automatically.
-The `--bind 0.0.0.0` flag exposes the server on all interfaces, which is
-convenient under WSL or a remote dev container.
-
-To produce a production build identical to what Netlify runs:
-
-```bash
-npm run build # hugo --gc --minify; output written to ./public
-```
-
-## Where content lives
-
-- `site/content/_index.md` — landing page
-- `site/content/docs/` — the **Docs** top-nav section (concepts, guides,
- install/upgrade/uninstall, troubleshooting, reference)
-- `site/content/contribute/` — the **Contribute** top-nav section (this page,
- development, proposals)
-- `site/hugo.toml` — site configuration (top nav, params, markup, output formats)
-- `site/go.mod` — pins the Docsy theme version
-- `site/package.json` — npm scripts and PostCSS deps used at build time
-
-Each page uses Docsy front matter, for example:
-
-```markdown
----
-title: My new page
-linkTitle: My page
-weight: 30
-description: One-sentence summary that shows up in section listings.
----
-
-Body content in Markdown.
-```
-
-The left sidebar orders pages by `weight:` ascending — pages without a
-`weight` float to the top of their section.
-
-## Deployment
-
-The site is built and hosted by Netlify, configured by the repo-root
-[`netlify.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/netlify.toml):
-
-- **Production:** every push to `main` triggers a deploy of
- `hugo --gc --minify`, published to
- [dra-driver-nvidia-gpu.sigs.k8s.io](https://dra-driver-nvidia-gpu.sigs.k8s.io/).
-- **Deploy previews:** every pull request gets its own preview URL built with
- `--buildDrafts --buildFuture`, so reviewers can see in-progress content.
- Netlify posts the preview URL back to the PR as a GitHub commit check.
-
-DNS for the `sigs.k8s.io` subdomain is managed in the
-[`kubernetes/k8s.io`](https://github.com/kubernetes/k8s.io) repository, not
-in this repo.
-
-## Common gotchas
-
-- **Wrong Hugo build.** `apt install hugo` and the default Homebrew formula
- install the *non-extended* Hugo and will fail inside Docsy's SCSS partial.
- Install `hugo_extended` from the
- [GitHub release page](https://github.com/gohugoio/hugo/releases).
-- **Skipping `npm ci`.** Without `node_modules/`, the build fails the moment
- Hugo's PostCSS pipeline runs (`postcss: command not found`). The error
- message does not make the connection to `package.json` obvious.
-- **Drafts disappear in production.** A page with `draft: true` shows up
- under `npm run serve` but is stripped by `npm run build` and the Netlify
- production deploy. Drop `draft:` (or set it to `false`) when the page is
- ready to publish.
-- **Hugo Modules need network access on the first build.** If you're behind
- a corporate proxy, set `HTTPS_PROXY` before running `hugo` so it can fetch
- the Docsy theme from GitHub. The `[module] proxy = "direct"` setting in
- `site/hugo.toml` deliberately bypasses the public Go module proxy.
From 7ca174df54c23c23c42de1285cc19c312256a0a2 Mon Sep 17 00:00:00 2001
From: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
Date: Wed, 13 May 2026 10:49:02 -0400
Subject: [PATCH 4/4] add better call outs for site tooling
Signed-off-by: Abigail McCarthy <20771501+a-mccarthy@users.noreply.github.com>
---
site/content/contribute/docs.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/site/content/contribute/docs.md b/site/content/contribute/docs.md
index 45dcd2c78..71a58562a 100644
--- a/site/content/contribute/docs.md
+++ b/site/content/contribute/docs.md
@@ -12,7 +12,10 @@ and is built with [Hugo](https://gohugo.io/) (the extended build) and the
## Quick start
-You need an extended Hugo build, Go, Node.js, and Git installed.
+You need [Hugo (extended)](https://gohugo.io/installation/),
+[Go](https://go.dev/doc/install), [Node.js](https://nodejs.org/) (which
+provides `npm`), and [Git](https://git-scm.com/downloads) installed. The versions on your machine should meed the minium required versions listed in
+[`netlify.toml`](https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/netlify.toml).
```bash
git clone https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu.git