Skip to content

Commit 4025659

Browse files
feat(website): docusaurus site published from /docs (#310)
Signed-off-by: robert-cronin <robert.owen.cronin@gmail.com>
1 parent 077f803 commit 4025659

27 files changed

Lines changed: 3684 additions & 11 deletions

.github/workflows/deploy-docs.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: Deploy Docs Website
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- 'website/**'
8+
- 'docs/**'
9+
- '.github/workflows/deploy-docs.yml'
10+
pull_request:
11+
branches: [main]
12+
paths:
13+
- 'website/**'
14+
- 'docs/**'
15+
- '.github/workflows/deploy-docs.yml'
16+
17+
permissions:
18+
contents: read
19+
20+
# Allow one concurrent deployment in flight; don't cancel in-progress deploys
21+
# from earlier main pushes (those are real publishes we want to complete).
22+
concurrency:
23+
group: pages
24+
cancel-in-progress: false
25+
26+
jobs:
27+
build:
28+
name: Build website
29+
runs-on: ubuntu-latest
30+
timeout-minutes: 15
31+
defaults:
32+
run:
33+
working-directory: website
34+
35+
steps:
36+
- name: Checkout repository
37+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
38+
39+
- name: Setup Bun
40+
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
41+
with:
42+
bun-version: 1.3.11
43+
44+
- name: Install dependencies
45+
run: bun ci
46+
47+
- name: Build website
48+
run: bun run build
49+
50+
- name: Upload Pages artifact
51+
# GitHub Pages needs the artifact uploaded under the specific name
52+
# "github-pages" so deploy-pages picks it up.
53+
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
54+
with:
55+
path: website/build
56+
57+
deploy:
58+
name: Deploy to GitHub Pages
59+
needs: build
60+
runs-on: ubuntu-latest
61+
timeout-minutes: 10
62+
# Only publish on push to main on the canonical repo. PR builds verify the
63+
# build but never deploy. Permissions scoped to this job alone so PR
64+
# builds keep a read-only token.
65+
if: github.ref == 'refs/heads/main' && github.event_name == 'push' && github.repository == 'kaito-project/airunway'
66+
permissions:
67+
pages: write
68+
id-token: write
69+
environment:
70+
name: github-pages
71+
url: ${{ steps.deployment.outputs.page_url }}
72+
73+
steps:
74+
- name: Deploy to GitHub Pages
75+
id: deployment
76+
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ The controller automatically selects the best engine and provider, creates provi
100100
101101
## Documentation
102102
103+
📖 **Browse the docs at [kaito-project.github.io/airunway](https://kaito-project.github.io/airunway/)**
104+
105+
The same content also lives in [`docs/`](docs/) for in-repo browsing.
106+
103107
| Topic | Link |
104108
| --- | --- |
105109
| Architecture | [docs/architecture.md](docs/architecture.md) |

agents.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
- `backend/src/` - Hono app, providers, services
2121
- `shared/types/` - Shared TypeScript definitions
2222
- `plugins/headlamp/` - Headlamp dashboard plugin
23-
- `docs/` - Detailed documentation (read as needed)
23+
- `docs/` - Detailed documentation (read as needed; also the source rendered on the website)
24+
- `website/` - Docusaurus site published to https://kaito-project.github.io/airunway/. Reads from `docs/` via `docs.path: '../docs'` — write docs as plain GitHub-Flavored Markdown and they render in both places.
2425

2526
**Core pattern**: Provider abstraction via CRDs:
2627
- `ModelDeployment` - Unified API for deploying ML models
@@ -71,6 +72,22 @@ make setup # Install deps, build, and deploy to Headlamp
7172
make dev # Build and deploy for development
7273
```
7374

75+
### Website (Docusaurus)
76+
77+
```bash
78+
cd website
79+
bun install # Install website dependencies
80+
bun run start # Local dev server with hot reload
81+
bun run build # Production build (must pass before merge)
82+
bun run serve # Serve the production build locally
83+
```
84+
85+
Docs sources stay in `/docs/*.md` (single source of truth). When the build
86+
warns about a broken link or MDX issue, fix the source markdown — the site is
87+
configured with `markdown.format: 'detect'` so `.md` files are treated as
88+
plain GFM, not MDX. Anything in `{curly braces}` or bare `<angle-tags>` in a
89+
`.md` file will only be parsed as JSX if the file is renamed to `.mdx`.
90+
7491
**Always run `bun run test` after implementing functionality to verify both frontend and backend changes.**
7592

7693
**Always validate changes immediately after editing files:**

docs/api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1474,7 +1474,7 @@ Check if AI Configurator CLI is available on the system.
14741474
**Notes:**
14751475

14761476
- Status is cached for 5 minutes to avoid repeated CLI calls
1477-
- AI Configurator must be installed locally: <https://github.com/ai-dynamo/aiconfigurator>
1477+
- AI Configurator must be installed locally: [github.com/ai-dynamo/aiconfigurator](https://github.com/ai-dynamo/aiconfigurator)
14781478
- When running inside Kubernetes, returns `runningInCluster: true` (AI Configurator is local-only)
14791479

14801480
### POST /aiconfigurator/analyze

docs/gateway.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Gateway API Inference Extension Integration
22

3-
> **Pinned versions:** the `GAIE_VERSION` referenced in this document is sourced from [`/versions.env`](../versions.env) at the repo root. Substitute that value (currently `v1.5.0`) when running the commands below, or `source` the file in your shell: `set -a; source versions.env; set +a`.
3+
> **Pinned versions:** the `GAIE_VERSION` referenced in this document is sourced from [`/versions.env`](https://github.com/kaito-project/airunway/blob/main/versions.env) at the repo root. Substitute that value (currently `v1.5.0`) when running the commands below, or `source` the file in your shell: `set -a; source versions.env; set +a`.
44
55
## Overview
66

@@ -81,7 +81,7 @@ AI Runway works with any Gateway API implementation that supports the [Inference
8181
> (Step 3), the `inference-gateway` Gateway resource (Step 4), and the Body-Based Router (see
8282
> [Body-Based Routing](#body-based-routing-bbr)). The
8383
> `GATEWAY_API_VERSION`, `ISTIO_VERSION`, and `GAIE_VERSION` it uses are pinned in
84-
> [`/versions.env`](../versions.env), and `istioctl` must be on your PATH. For other gateway
84+
> [`/versions.env`](https://github.com/kaito-project/airunway/blob/main/versions.env), and `istioctl` must be on your PATH. For other gateway
8585
> implementations, follow the manual steps below.
8686
8787
### Step 1: Install Gateway API CRDs
@@ -206,7 +206,7 @@ helm install body-based-router \
206206
```
207207

208208
> [!NOTE]
209-
> The BBR chart version should match the GAIE version used by AI Runway. The pinned value lives in [`/versions.env`](../versions.env); update both at the same time when bumping.
209+
> The BBR chart version should match the GAIE version used by AI Runway. The pinned value lives in [`/versions.env`](https://github.com/kaito-project/airunway/blob/main/versions.env); update both at the same time when bumping.
210210
211211
Replace `provider.name` with your gateway implementation (`istio`, `gke`, or omit for others). The chart deploys the BBR container and any provider-specific resources (e.g. EnvoyFilter for Istio).
212212

docs/headlamp-plugin.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
This document describes the architecture, design decisions, and technical details of the AI Runway Headlamp plugin.
44

5-
For installation and development instructions, see the [plugin README](../plugins/headlamp/README.md).
5+
For installation and development instructions, see the [plugin README](https://github.com/kaito-project/airunway/blob/main/plugins/headlamp/README.md).
66

77
---
88

docs/observability.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ AI Runway exposes Prometheus metrics from both the controller and inference prov
1515
1616
## Getting started
1717

18-
See the [Observability Demo](../demos/observability/README.md) for a complete walkthrough covering:
18+
See the [Observability Demo](https://github.com/kaito-project/airunway/blob/main/demos/observability/README.md) for a complete walkthrough covering:
1919

2020
1. Installing kube-prometheus-stack
2121
2. Configuring Prometheus to scrape the controller (ServiceMonitor + RBAC)

docs/providers.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@ The Web UI backend reads provider information (capabilities, installation steps,
7979

8080
| Provider | Upstream CRD | Status | Shim YAML | Description |
8181
| ------------- | --------------------- | ----------- | --------- | ------------------------------------------------------------------------------ |
82-
| NVIDIA Dynamo | DynamoGraphDeployment | ✅ Available | [dynamo.yaml](../providers/dynamo/deploy/dynamo.yaml) | High-performance GPU inference with KV-cache routing and disaggregated serving |
83-
| KubeRay | RayService | ✅ Available | [kuberay.yaml](../providers/kuberay/deploy/kuberay.yaml) | Ray-based distributed inference with autoscaling |
84-
| KAITO | Workspace | ✅ Available | [kaito.yaml](../providers/kaito/deploy/kaito.yaml) | Flexible inference with vLLM (GPU) or llama.cpp (CPU/GPU) |
85-
| llm-d | none | ✅ Available | [llmd.yaml](../providers/llmd/deploy/llmd.yaml) | Flexible inference with vLLM (GPU) with KV-cache routing and disaggregated serving |
82+
| NVIDIA Dynamo | DynamoGraphDeployment | ✅ Available | [dynamo.yaml](https://github.com/kaito-project/airunway/blob/main/providers/dynamo/deploy/dynamo.yaml) | High-performance GPU inference with KV-cache routing and disaggregated serving |
83+
| KubeRay | RayService | ✅ Available | [kuberay.yaml](https://github.com/kaito-project/airunway/blob/main/providers/kuberay/deploy/kuberay.yaml) | Ray-based distributed inference with autoscaling |
84+
| KAITO | Workspace | ✅ Available | [kaito.yaml](https://github.com/kaito-project/airunway/blob/main/providers/kaito/deploy/kaito.yaml) | Flexible inference with vLLM (GPU) or llama.cpp (CPU/GPU) |
85+
| llm-d | none | ✅ Available | [llmd.yaml](https://github.com/kaito-project/airunway/blob/main/providers/llmd/deploy/llmd.yaml) | Flexible inference with vLLM (GPU) with KV-cache routing and disaggregated serving |
8686

8787
### KAITO Provider
8888

website/.gitignore

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Dependencies
2+
/node_modules
3+
4+
# Production
5+
/build
6+
7+
# Generated files
8+
.docusaurus
9+
.cache-loader
10+
11+
# Misc
12+
.DS_Store
13+
.env.local
14+
.env.development.local
15+
.env.test.local
16+
.env.production.local
17+
18+
npm-debug.log*
19+
yarn-debug.log*
20+
yarn-error.log*

website/README.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# AI Runway website
2+
3+
This is the source for the AI Runway documentation site published at
4+
[**kaito-project.github.io/airunway**](https://kaito-project.github.io/airunway/).
5+
Built with [Docusaurus](https://docusaurus.io/) 3.
6+
7+
## Content layout
8+
9+
The site renders content from two places:
10+
11+
- `/website/src/pages/` — landing page and other React pages
12+
- `/docs/*.md` (at the repo root) — every documentation page
13+
14+
The docs plugin is configured with `docs.path: '../docs'` so the markdown
15+
files double as in-repo docs (viewable on GitHub) and as the website's
16+
content. **Write docs as plain GitHub-Flavored Markdown.** Docusaurus is set
17+
to `markdown.format: 'detect'`, which means `.md` files are NOT treated as
18+
MDX — content like `{name}` or `<pod-name>` renders verbatim. If you want
19+
JSX, rename the file to `.mdx`.
20+
21+
When you add a new doc, also add it to [`sidebars.js`](./sidebars.js).
22+
23+
## Local development
24+
25+
Requires [Bun](https://bun.sh/) (matches the rest of the repo).
26+
27+
```bash
28+
bun install # one-time
29+
bun run start # http://localhost:3000/airunway/ with hot reload
30+
bun run build # what CI runs; must pass before merge
31+
bun run serve # serve the production build locally on :3000
32+
```
33+
34+
## Deployment
35+
36+
`.github/workflows/deploy-docs.yml` builds the site and publishes it via the
37+
GitHub Actions Pages flow (`actions/upload-pages-artifact`
38+
`actions/deploy-pages`). The site is deployed on every push to `main` on the
39+
canonical `kaito-project/airunway` repo. Pull requests and forks build the
40+
site to verify it compiles, but only the canonical repo deploys.
41+
42+
First-time setup (needs a repository admin): **Settings → Pages → Build and
43+
deployment → Source = "GitHub Actions"**. No `gh-pages` branch is involved —
44+
the artifact is served directly from the workflow.

0 commit comments

Comments
 (0)