d8d83ffa47
Implements comprehensive enhancements to make the Helm chart more user-friendly and easier to deploy across different scenarios. 🎯 **IMPLEMENTED IMPROVEMENTS:** **1. Values Organization & Grouping** - Reorganized values.yaml with logical sections: - Basic Configuration (name, image, githubRepo) - Access & Interface (ide, ssh, display, user) - Infrastructure & Resources (storage, resources, shm, clusterAccess) - Integrations (happy, mcp sidecars) - Smart Defaults & Auto-Detection - Updated deployment templates to use new structure - Maintains clean, navigable configuration **2. Simplified Quick-Start Values** - Added values-quickstart.yaml for 80% of users - Just 2 required fields: name + githubRepo - Includes usage instructions and common customizations - Copy-paste ready deployment experience **3. Better Documentation Structure** - Added values.schema.json for IDE validation and autocomplete - Created comprehensive USAGE.md with real-world examples: - Development, team, K8s admin, AI/ML, lightweight scenarios - Secret configuration examples - Resource sizing by use case - Common troubleshooting patterns **4. Smart Defaults & Auto-Detection** - Added template helpers for intelligent resource sizing - Environment auto-detection based on naming patterns - Smart MCP sidecar selection based on cluster access - Resource profile auto-selection (auto/small/medium/large/xlarge) - Enhanced _helpers.tpl with smart default functions 🎫 **CREATED GITHUB ISSUES** for future enhancements: - #32: Helm chart preset profiles - #33: Split large deployment.yaml template - #34: Advanced auto-detection for Kubernetes environments - #35: Specialized Helm chart variants (basic/team/k8s/ai) - #36: Installation and configuration helper scripts - #37: Comprehensive validation and health monitoring - #38: User experience improvements with better error messages - #39: Comprehensive examples and template library 📊 **IMPACT:** - Reduced required configuration from ~20 values to 2 essential fields - Added IDE support with schema validation - Created guided examples for common scenarios - Established foundation for advanced auto-detection - Planned comprehensive tooling ecosystem 🚀 **USAGE:** ```bash # Quick start (new users) cp chart/values-quickstart.yaml my-values.yaml # Edit name and githubRepo helm install mydev ./chart -f my-values.yaml # Full customization (power users) # Edit chart/values.yaml with organized sections helm install mydev ./chart ``` Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
259 lines
6.6 KiB
JSON
259 lines
6.6 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://github.com/cpfarhood/devcontainer/chart/values.schema.json",
|
|
"title": "Dev Container Helm Chart Values Schema",
|
|
"description": "Schema for validating values.yaml in the Dev Container Helm chart",
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Instance name used to generate resource names",
|
|
"pattern": "^[a-z0-9][a-z0-9-]*[a-z0-9]$",
|
|
"minLength": 1,
|
|
"maxLength": 63
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"repository": {
|
|
"type": "string",
|
|
"description": "Container image repository"
|
|
},
|
|
"tag": {
|
|
"type": "string",
|
|
"description": "Container image tag"
|
|
},
|
|
"pullPolicy": {
|
|
"type": "string",
|
|
"enum": ["Always", "IfNotPresent", "Never"],
|
|
"description": "Image pull policy"
|
|
}
|
|
},
|
|
"required": ["repository", "tag"]
|
|
},
|
|
"githubRepo": {
|
|
"type": "string",
|
|
"description": "GitHub repository URL to clone",
|
|
"pattern": "^https://github\\.com/.+/.+$"
|
|
},
|
|
"ide": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["vscode", "antigravity", "none"],
|
|
"description": "IDE to launch in the container"
|
|
}
|
|
},
|
|
"required": ["type"]
|
|
},
|
|
"ssh": {
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"description": "Enable SSH server on port 22"
|
|
}
|
|
},
|
|
"required": ["enabled"]
|
|
},
|
|
"display": {
|
|
"type": "object",
|
|
"properties": {
|
|
"width": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+$",
|
|
"description": "VNC display width in pixels"
|
|
},
|
|
"height": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+$",
|
|
"description": "VNC display height in pixels"
|
|
},
|
|
"secureConnection": {
|
|
"type": "string",
|
|
"enum": ["0", "1"],
|
|
"description": "Enable secure VNC connection"
|
|
}
|
|
},
|
|
"required": ["width", "height", "secureConnection"]
|
|
},
|
|
"user": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+$",
|
|
"description": "User ID (UID)"
|
|
},
|
|
"groupId": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+$",
|
|
"description": "Group ID (GID)"
|
|
}
|
|
},
|
|
"required": ["id", "groupId"]
|
|
},
|
|
"storage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"size": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+[KMGT]i$",
|
|
"description": "Storage size (e.g., 32Gi)"
|
|
},
|
|
"className": {
|
|
"type": "string",
|
|
"description": "Storage class name (must support ReadWriteMany)"
|
|
}
|
|
},
|
|
"required": ["size", "className"]
|
|
},
|
|
"resources": {
|
|
"type": "object",
|
|
"properties": {
|
|
"requests": {
|
|
"$ref": "#/$defs/resourceSpec"
|
|
},
|
|
"limits": {
|
|
"$ref": "#/$defs/resourceSpec"
|
|
}
|
|
},
|
|
"required": ["requests", "limits"]
|
|
},
|
|
"shm": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sizeLimit": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+[KMGT]i$",
|
|
"description": "Shared memory size limit"
|
|
}
|
|
},
|
|
"required": ["sizeLimit"]
|
|
},
|
|
"clusterAccess": {
|
|
"type": "string",
|
|
"enum": ["none", "readonlyns", "readwritens", "readonly", "readwrite"],
|
|
"description": "Kubernetes cluster access level"
|
|
},
|
|
"happy": {
|
|
"type": "object",
|
|
"properties": {
|
|
"serverUrl": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Happy Coder server URL"
|
|
},
|
|
"webappUrl": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Happy Coder webapp URL"
|
|
},
|
|
"homeDir": {
|
|
"type": "string",
|
|
"description": "Happy Coder home directory"
|
|
},
|
|
"experimental": {
|
|
"type": "string",
|
|
"enum": ["true", "false"],
|
|
"description": "Enable experimental Happy features"
|
|
}
|
|
},
|
|
"required": ["serverUrl", "webappUrl", "homeDir", "experimental"]
|
|
},
|
|
"mcp": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sidecars": {
|
|
"type": "object",
|
|
"properties": {
|
|
"kubernetes": {
|
|
"$ref": "#/$defs/mcpSidecar"
|
|
},
|
|
"flux": {
|
|
"$ref": "#/$defs/mcpSidecar"
|
|
},
|
|
"homeassistant": {
|
|
"$ref": "#/$defs/mcpSidecar"
|
|
},
|
|
"github": {
|
|
"$ref": "#/$defs/mcpSidecar"
|
|
},
|
|
"pgtuner": {
|
|
"$ref": "#/$defs/mcpSidecar"
|
|
},
|
|
"playwright": {
|
|
"$ref": "#/$defs/mcpSidecar"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": ["sidecars"]
|
|
},
|
|
"envSecretName": {
|
|
"type": "string",
|
|
"description": "Custom environment secret name"
|
|
}
|
|
},
|
|
"required": ["name"],
|
|
"$defs": {
|
|
"resourceSpec": {
|
|
"type": "object",
|
|
"properties": {
|
|
"memory": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+[KMGT]i$",
|
|
"description": "Memory resource specification"
|
|
},
|
|
"cpu": {
|
|
"type": "string",
|
|
"pattern": "^[0-9]+m?$",
|
|
"description": "CPU resource specification"
|
|
}
|
|
},
|
|
"required": ["memory", "cpu"]
|
|
},
|
|
"mcpSidecar": {
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"description": "Enable this MCP sidecar"
|
|
},
|
|
"image": {
|
|
"type": "object",
|
|
"properties": {
|
|
"repository": {
|
|
"type": "string"
|
|
},
|
|
"tag": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": ["repository", "tag"]
|
|
},
|
|
"port": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 65535,
|
|
"description": "Port for the MCP sidecar"
|
|
},
|
|
"resources": {
|
|
"type": "object",
|
|
"properties": {
|
|
"requests": {
|
|
"$ref": "#/$defs/resourceSpec"
|
|
},
|
|
"limits": {
|
|
"$ref": "#/$defs/resourceSpec"
|
|
}
|
|
},
|
|
"required": ["requests", "limits"]
|
|
}
|
|
},
|
|
"required": ["enabled", "image", "port", "resources"]
|
|
}
|
|
}
|
|
} |