From a1803505a115c4addf488ca7db7a9ba11be2b665 Mon Sep 17 00:00:00 2001 From: Oren Fromberg Date: Tue, 14 Apr 2026 14:59:48 -0400 Subject: [PATCH 1/5] feat: add landingPage support to dashboard NebariApp template Expose the NebariApp CRD's landingPage field through the Helm chart so deployers can register the Ray Dashboard on the Nebari landing page without patching the rendered manifest directly. Changes: - values.yaml: add nebariapp.dashboard.landingPage block with sensible defaults (displayName, description, icon, category, priority, healthCheck) - templates/nebariapp.yaml: render spec.landingPage on the dashboard NebariApp when the block is present, including all optional sub-fields landingPage.enabled defaults to false so landing-page registration remains opt-in. --- chart/templates/nebariapp.yaml | 35 ++++++++++++++++++++++++++++++++++ chart/values.yaml | 12 ++++++++++++ 2 files changed, 47 insertions(+) diff --git a/chart/templates/nebariapp.yaml b/chart/templates/nebariapp.yaml index 3f86fa6..59285d3 100644 --- a/chart/templates/nebariapp.yaml +++ b/chart/templates/nebariapp.yaml @@ -57,5 +57,40 @@ spec: {{- toYaml .Values.nebariapp.auth.scopes | nindent 6 }} {{- end }} + {{- with .Values.nebariapp.dashboard.landingPage }} + landingPage: + enabled: {{ .enabled | default false }} + {{- with .displayName }} + displayName: {{ . | quote }} + {{- end }} + {{- with .description }} + description: {{ . | quote }} + {{- end }} + {{- with .icon }} + icon: {{ . | quote }} + {{- end }} + {{- with .category }} + category: {{ . | quote }} + {{- end }} + {{- if kindIs "float64" .priority }} + priority: {{ .priority }} + {{- end }} + {{- with .externalUrl }} + externalUrl: {{ . | quote }} + {{- end }} + {{- with .healthCheck }} + healthCheck: + enabled: {{ .enabled | default false }} + {{- with .path }} + path: {{ . | quote }} + {{- end }} + {{- if .intervalSeconds }} + intervalSeconds: {{ .intervalSeconds }} + {{- end }} + {{- if .timeoutSeconds }} + timeoutSeconds: {{ .timeoutSeconds }} + {{- end }} + {{- end }} + {{- end }} gateway: {{ .Values.nebariapp.gateway }} {{- end }} diff --git a/chart/values.yaml b/chart/values.yaml index 0cfc487..2c31a02 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -11,6 +11,18 @@ nebariapp: dashboard: enabled: true # hostname: ray-dashboard.nebari.example.com # Separate hostname for dashboard + landingPage: + enabled: false + displayName: "Ray Dashboard" + description: "Monitor and manage Ray clusters and Serve deployments" + icon: "https://raw.githubusercontent.com/ray-project/ray/master/doc/source/images/ray_header_logo.png" + category: "Data Science" + priority: 20 + healthCheck: + enabled: false + path: /api/component_activities + intervalSeconds: 30 + timeoutSeconds: 5 service: name: "" # Defaults to --serve-svc (serve) or -head-svc (dashboard) servePort: 8000 From d77720ae21d61c7efd421971186d228f83eaac5f Mon Sep 17 00:00:00 2001 From: Oren Fromberg Date: Tue, 14 Apr 2026 15:04:15 -0400 Subject: [PATCH 2/5] fix: default healthCheck to enabled --- chart/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/values.yaml b/chart/values.yaml index 2c31a02..31115ee 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -19,7 +19,7 @@ nebariapp: category: "Data Science" priority: 20 healthCheck: - enabled: false + enabled: true path: /api/component_activities intervalSeconds: 30 timeoutSeconds: 5 From 2c8ad5ebd411302f4210041ca53e72fa00445820 Mon Sep 17 00:00:00 2001 From: Oren Fromberg Date: Tue, 14 Apr 2026 15:41:49 -0400 Subject: [PATCH 3/5] fix: use Ray Serve icon for landing page --- chart/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/values.yaml b/chart/values.yaml index 31115ee..7d69f79 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -15,7 +15,7 @@ nebariapp: enabled: false displayName: "Ray Dashboard" description: "Monitor and manage Ray clusters and Serve deployments" - icon: "https://raw.githubusercontent.com/ray-project/ray/master/doc/source/images/ray_header_logo.png" + icon: "https://raw.githubusercontent.com/ray-project/ray/master/doc/source/images/serve.svg" category: "Data Science" priority: 20 healthCheck: From 1ba2961a5b462bff8b4000d1d7d0034a421129c2 Mon Sep 17 00:00:00 2001 From: Oren Fromberg Date: Tue, 14 Apr 2026 16:31:10 -0400 Subject: [PATCH 4/5] Default serve endpoint to disabled The serve NebariApp should not be exposed externally by default. Users can opt in by setting nebariapp.serve.enabled: true and providing nebariapp.hostname. --- chart/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/values.yaml b/chart/values.yaml index 7d69f79..64d0cfc 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -7,7 +7,7 @@ nebariapp: enabled: false # hostname: rayserve.nebari.example.com # Required when serve.enabled is true serve: - enabled: true # Set to false to keep the serve endpoint internal-only + enabled: false # Set to true and provide nebariapp.hostname to expose the serve endpoint externally dashboard: enabled: true # hostname: ray-dashboard.nebari.example.com # Separate hostname for dashboard From 546be95103ee7f2747fa14251cba15dbf8dad964 Mon Sep 17 00:00:00 2001 From: Oren Fromberg Date: Tue, 14 Apr 2026 16:50:22 -0400 Subject: [PATCH 5/5] Fix CI: explicitly enable serve endpoint in integration tests Since serve.enabled now defaults to false, the integration tests need to explicitly opt in to test the serve NebariApp path. --- .github/workflows/test-integration.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test-integration.yaml b/.github/workflows/test-integration.yaml index 587229b..8ba30af 100644 --- a/.github/workflows/test-integration.yaml +++ b/.github/workflows/test-integration.yaml @@ -120,6 +120,7 @@ jobs: --set kuberay-operator.enabled=false \ --set nebariapp.enabled=true \ --set nebariapp.hostname=rayserve.nebari.local \ + --set nebariapp.serve.enabled=true \ --set nebariapp.dashboard.enabled=true \ --set nebariapp.dashboard.hostname=ray-dashboard.nebari.local \ --set head.resources.requests.cpu=500m \ @@ -174,6 +175,7 @@ jobs: --set kuberay-operator.enabled=false \ --set nebariapp.enabled=true \ --set nebariapp.hostname=rayserve.nebari.local \ + --set nebariapp.serve.enabled=true \ --set nebariapp.dashboard.enabled=true \ --set nebariapp.dashboard.hostname=ray-dashboard.nebari.local \ --set nebariapp.auth.enabled=true \