From cc38a07168e9659d3c22c25b8374f691def3d238 Mon Sep 17 00:00:00 2001 From: DevContainer User Date: Wed, 25 Feb 2026 13:20:08 +0000 Subject: [PATCH] fix: update values schema for deploymentMode and dynamic config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add deploymentMode enum (persistent | dynamic) - Add fileManager schema (enabled, allowedPaths, deniedPaths) - Add full dynamic mode schema (knative, routingProxy, ingress, authentik) - Relax githubRepo pattern — not required in dynamic mode Validated: helm template renders cleanly for both modes. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude Co-Authored-By: Happy --- chart/values.schema.json | 95 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 2 deletions(-) diff --git a/chart/values.schema.json b/chart/values.schema.json index 1b09df7..a4ca68b 100644 --- a/chart/values.schema.json +++ b/chart/values.schema.json @@ -32,10 +32,101 @@ }, "required": ["repository", "tag"] }, + "deploymentMode": { + "type": "string", + "enum": ["persistent", "dynamic"], + "description": "Deployment mode: persistent (PVC-based) or dynamic (Knative serverless)" + }, "githubRepo": { "type": "string", - "description": "GitHub repository URL to clone", - "pattern": "^https?://.+/.+/.+$" + "description": "GitHub repository URL to clone (required in persistent mode, ignored in dynamic mode)" + }, + "fileManager": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable the built-in web file manager" + }, + "allowedPaths": { + "type": "string", + "description": "Paths accessible by the file manager (AUTO, ALL, or comma-separated list)" + }, + "deniedPaths": { + "type": "string", + "description": "Paths to deny access to (takes precedence over allowedPaths)" + } + }, + "required": ["enabled"] + }, + "dynamic": { + "type": "object", + "description": "Configuration for dynamic (serverless) deployment mode", + "properties": { + "knative": { + "type": "object", + "properties": { + "minScale": { "type": "integer", "minimum": 0 }, + "maxScale": { "type": "integer", "minimum": 1 }, + "target": { "type": "integer", "minimum": 1 }, + "scaleToZeroGracePeriod": { "type": "string" }, + "timeoutSeconds": { "type": "integer", "minimum": 60 }, + "resources": { + "type": "object", + "properties": { + "requests": { "$ref": "#/$defs/resourceSpec" }, + "limits": { "$ref": "#/$defs/resourceSpec" } + } + } + } + }, + "routingProxy": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "replicas": { "type": "integer", "minimum": 1 }, + "image": { + "type": "object", + "properties": { + "repository": { "type": "string" }, + "tag": { "type": "string" }, + "pullPolicy": { "type": "string", "enum": ["Always", "IfNotPresent", "Never"] } + } + }, + "resources": { + "type": "object", + "properties": { + "requests": { "$ref": "#/$defs/resourceSpec" }, + "limits": { "$ref": "#/$defs/resourceSpec" } + } + } + } + }, + "ingress": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "className": { "type": "string" }, + "host": { "type": "string" }, + "tls": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "secretName": { "type": "string" }, + "issuer": { "type": "string" } + } + }, + "authentik": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "authUrl": { "type": "string" }, + "signIn": { "type": "string" } + } + } + } + } + } }, "ide": { "type": "object",