Last active
November 10, 2025 23:21
-
-
Save bpartridge/71d8da6ff96414faba9ffb9499e7dea8 to your computer and use it in GitHub Desktop.
Helmfile Schema with Inline Transformer Support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "$schema": "http://json-schema.org/draft-07/schema#", | |
| "$id": "https://json.schemastore.org/helmfile.json", | |
| "definitions": { | |
| "repository": { | |
| "type": "object", | |
| "required": ["name"], | |
| "properties": { | |
| "name": { | |
| "type": "string" | |
| }, | |
| "url": { | |
| "type": "string" | |
| }, | |
| "certFile": { | |
| "type": "string" | |
| }, | |
| "keyFile": { | |
| "type": "string" | |
| }, | |
| "caFile": { | |
| "type": "string" | |
| }, | |
| "username": { | |
| "type": "string" | |
| }, | |
| "password": { | |
| "type": "string" | |
| }, | |
| "oci": { | |
| "type": "boolean" | |
| }, | |
| "passCredentials": { | |
| "type": "boolean" | |
| } | |
| } | |
| }, | |
| "helmDefaults": { | |
| "type": "object", | |
| "description": "Default values to set for args along with dedicated keys that can be set by contributors, cli args take precedence over these.", | |
| "properties": { | |
| "kubeContext": { | |
| "type": "string", | |
| "description": "Dedicated default key for kube-context (--kube-context)." | |
| }, | |
| "cleanupOnFail": { | |
| "type": "boolean", | |
| "description": "When true, cleans up any new resources created during a failed release.", | |
| "default": false | |
| }, | |
| "args": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| } | |
| ] | |
| } | |
| }, | |
| "verify": { | |
| "type": "boolean", | |
| "description": "Verify the chart before upgrading (only works with packaged charts not directories).", | |
| "default": false | |
| }, | |
| "wait": { | |
| "type": "boolean", | |
| "description": "Wait for k8s resources via --wait.", | |
| "default": false | |
| }, | |
| "waitForJobs": { | |
| "type": "boolean", | |
| "description": "If true and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout", | |
| "default": false | |
| }, | |
| "timeout": { | |
| "type": "number", | |
| "description": "Time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks, and waits on pod/pvc/svc/deployment readiness)", | |
| "default": 300 | |
| }, | |
| "recreatePods": { | |
| "type": "boolean", | |
| "description": "Performs pods restart for the resource if applicable.", | |
| "default": false | |
| }, | |
| "force": { | |
| "type": "boolean", | |
| "description": "Forces resource update through delete/recreate if needed.", | |
| "default": false | |
| }, | |
| "historyMax": { | |
| "type": "number", | |
| "description": "Limit the maximum number of revisions saved per release. Use 0 for no limit.", | |
| "default": 10 | |
| }, | |
| "createNamespace": { | |
| "type": "boolean", | |
| "description": "When using helm 3.2+, automatically create release namespaces if they do not exist.", | |
| "default": true | |
| }, | |
| "devel": { | |
| "type": "boolean", | |
| "description": "If used with charts museum allows to pull unstable charts for deployment, for example: if 1.2.3 and 1.2.4-dev versions exist and set to true, 1.2.4-dev will be pulled (default false)", | |
| "default": false | |
| }, | |
| "reuseValues": { | |
| "type": "boolean", | |
| "description": "If set to true, reuses the last release's values and merges them with ones provided in helmfile.", | |
| "default": false | |
| }, | |
| "skipDeps": { | |
| "description": "When set to `true`, skips running `helm dep up` and `helm dep build` on this release's chart.", | |
| "type": "boolean", | |
| "default": false | |
| }, | |
| "cascade": { | |
| "type": "string", | |
| "description": "Cascade `--cascade` to helmv3 delete, available values: background, foreground, or orphan.", | |
| "default": "background", | |
| "enum": ["background", "foreground", "orphan"] | |
| }, | |
| "postRenderer": { | |
| "type": "string", | |
| "description": "Propagate `--post-renderer` to helmv3 template and helm install.", | |
| "examples": ["path/to/postRenderer"] | |
| }, | |
| "insecureSkipTLSVerify": { | |
| "type": "boolean", | |
| "description": "Is true if the TLS verification should be skipped when fetching remote chart.", | |
| "default": false | |
| } | |
| } | |
| }, | |
| "release": { | |
| "type": "object", | |
| "properties": { | |
| "name": { | |
| "type": "string", | |
| "description": "The name of the release." | |
| }, | |
| "namespace": { | |
| "type": "string", | |
| "description": "The namespace to install the release into." | |
| }, | |
| "chart": { | |
| "description": "The chart name to be installed. The chart name can be either: 1) a chart reference: https://helm.sh/docs/topics/charts/#chart-references, 2) a path to a directory containing a chart, 3) a path to a packaged chart, or 4) a URL.", | |
| "type": "string" | |
| }, | |
| "atomic": { | |
| "type": "boolean", | |
| "description": "Restores previous state in case of failed release.", | |
| "default": false | |
| }, | |
| "cleanupOnFail": { | |
| "type": "boolean", | |
| "description": "When true, cleans up any new resources created during a failed release.", | |
| "default": false | |
| }, | |
| "kubeContext": { | |
| "type": "string", | |
| "description": "--kube-context to be passed to helm commands.\nDefaults tp an empty string, which means the standard kubeconfig, either ~/kubeconfig or the file pointed by $KUBECONFIG environment variable)", | |
| "default": "" | |
| }, | |
| "condition": { | |
| "type": "string", | |
| "description": "Wen set, helmfile will only attempt to install the release if the condition is true" | |
| }, | |
| "createNamespace": { | |
| "type": "boolean", | |
| "description": "When using helm 3.2+, automatically create release namespaces if they do not exist.", | |
| "default": true | |
| }, | |
| "devel": { | |
| "type": "boolean", | |
| "description": "If used with charts museum allows to pull unstable charts for deployment, for example: if 1.2.3 and 1.2.4-dev versions exist and set to true, 1.2.4-dev will be pulled.", | |
| "default": false | |
| }, | |
| "disableValidation": { | |
| "description": "Disables validation of the rendered templates before releasing.", | |
| "type": "boolean", | |
| "default": false | |
| }, | |
| "disableValidationOnInstall": { | |
| "type": "boolean", | |
| "description": "Passes --disable-validation to helm 3 diff plugin, this requires diff plugin >= 3.1.2", | |
| "default": false | |
| }, | |
| "disableOpenAPIValidation": { | |
| "type": "boolean", | |
| "description": "Passes --disable-openapi-validation to helm 3 diff plugin, this requires diff plugin >= 3.1.2", | |
| "default": false | |
| }, | |
| "historyMax": { | |
| "type": "number", | |
| "description": "Limit the maximum number of revisions saved per release. Use 0 for no limit.", | |
| "default": 10 | |
| }, | |
| "skipDeps": { | |
| "description": "When set to `true`, skips running `helm dep up` and `helm dep build` on this release's chart.", | |
| "type": "boolean", | |
| "default": false | |
| }, | |
| "cascade": { | |
| "type": "string", | |
| "description": "Cascade `--cascade` to helmv3 delete, available values: background, foreground, or orphan", | |
| "default": "background", | |
| "enum": ["background", "foreground", "orphan"] | |
| }, | |
| "postRenderer": { | |
| "type": "string", | |
| "description": "Propagate `--post-renderer` to helmv3 template and helm install.", | |
| "examples": ["path/to/postRenderer"] | |
| }, | |
| "insecureSkipTLSVerify": { | |
| "type": "boolean", | |
| "description": "Is true if the TLS verification should be skipped when fetching remote chart", | |
| "default": false | |
| }, | |
| "hooks": { | |
| "description": "Hooks allow to trigger actions at certain points in helm's lifecycle.", | |
| "type": "array", | |
| "items": { | |
| "$ref": "#/definitions/hook" | |
| } | |
| }, | |
| "installed": { | |
| "description": "Set `false` to uninstall this release on sync.", | |
| "default": true, | |
| "anyOf": [ | |
| { | |
| "type": "boolean" | |
| }, | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "object" | |
| } | |
| ] | |
| }, | |
| "labels": { | |
| "$ref": "#/definitions/map" | |
| }, | |
| "missingFileHandler": { | |
| "$ref": "#/definitions/missingFileHandler", | |
| "type": "string" | |
| }, | |
| "secrets": { | |
| "type": "array", | |
| "description": "Will attempt to decrypt it using helm-secrets plugin", | |
| "items": { | |
| "type": "string" | |
| } | |
| }, | |
| "inherit": { | |
| "type": "array", | |
| "description": "Inherit from one or more release templates", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "template": { | |
| "type": "string" | |
| }, | |
| "except": { | |
| "type": "array", | |
| "items": { | |
| "type": "string" | |
| } | |
| } | |
| }, | |
| "required": ["template"] | |
| } | |
| }, | |
| "set": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "object", | |
| "properties": { | |
| "name": { | |
| "type": "string" | |
| }, | |
| "file": { | |
| "type": "string" | |
| } | |
| } | |
| }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "name": { | |
| "type": "string" | |
| }, | |
| "values": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "number" | |
| } | |
| ] | |
| } | |
| } | |
| } | |
| }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "name": { | |
| "type": "string" | |
| }, | |
| "value": { | |
| "type": "string" | |
| } | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "timeout": { | |
| "type": "number", | |
| "description": "Time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks, and waits on pod/pvc/svc/deployment readiness)", | |
| "default": 300 | |
| }, | |
| "recreatePods": { | |
| "type": "boolean", | |
| "description": "Performs pods restart for the resource if applicable", | |
| "default": false | |
| }, | |
| "force": { | |
| "type": "boolean", | |
| "description": "Forces resource update through delete/recreate if needed.", | |
| "default": false | |
| }, | |
| "values": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "$ref": "#/definitions/map" | |
| } | |
| ] | |
| } | |
| }, | |
| "verify": { | |
| "type": "boolean" | |
| }, | |
| "version": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "number" | |
| }, | |
| { | |
| "type": "integer" | |
| } | |
| ] | |
| }, | |
| "wait": { | |
| "type": "boolean", | |
| "description": "Wait for k8s resources via --wait.", | |
| "default": false | |
| }, | |
| "waitForJobs": { | |
| "type": "boolean", | |
| "description": "If set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout.", | |
| "default": false | |
| }, | |
| "needs": { | |
| "type": "array", | |
| "description": "Define dependencies between releases. This release will only be installed after all releases in the needs list are installed.", | |
| "items": { | |
| "type": "string" | |
| } | |
| }, | |
| "dependencies": { | |
| "type": "array", | |
| "description": "Add chart dependencies without forking. Can be local paths or OCI charts.", | |
| "items": { | |
| "type": "object", | |
| "properties": { | |
| "chart": { | |
| "type": "string" | |
| }, | |
| "version": { | |
| "type": "string" | |
| }, | |
| "alias": { | |
| "type": "string" | |
| } | |
| }, | |
| "required": ["chart"] | |
| } | |
| }, | |
| "strategicMergePatches": { | |
| "type": "array", | |
| "description": "Apply strategic merge patches to Kubernetes resources using Kustomize.", | |
| "items": { | |
| "type": ["string","object"] | |
| } | |
| }, | |
| "transformers": { | |
| "type": "array", | |
| "description": "Apply Kustomize transformers to add labels, annotations, etc.", | |
| "items": { | |
| "type": ["string","object"] | |
| } | |
| }, | |
| "jsonPatches": { | |
| "type": "array", | |
| "description": "Apply JSON patches to Kubernetes resources.", | |
| "items": { | |
| "type": ["string","object"] | |
| } | |
| }, | |
| "adopt": { | |
| "type": "array", | |
| "description": "Adopt existing resources into Helm management.", | |
| "items": { | |
| "type": "string" | |
| } | |
| } | |
| }, | |
| "required": ["name"], | |
| "anyOf": [ | |
| { | |
| "required": ["chart"] | |
| }, | |
| { | |
| "required": ["inherit"] | |
| } | |
| ] | |
| }, | |
| "helmfile": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "object", | |
| "required": ["path"], | |
| "properties": { | |
| "path": { | |
| "type": "string" | |
| }, | |
| "selectors": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| } | |
| ] | |
| } | |
| }, | |
| "values": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "object", | |
| "properties": { | |
| "key1": { | |
| "type": "string" | |
| } | |
| } | |
| } | |
| ] | |
| } | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "missingFileHandler": { | |
| "type": "string", | |
| "enum": ["Error", "Warn", "Info", "Debug"] | |
| }, | |
| "environment": { | |
| "type": "object", | |
| "properties": { | |
| "values": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "$ref": "#/definitions/map" | |
| } | |
| ] | |
| } | |
| }, | |
| "secrets": { | |
| "type": "array", | |
| "items": { | |
| "type": "string" | |
| } | |
| }, | |
| "missingFileHandler": { | |
| "$ref": "#/definitions/missingFileHandler" | |
| }, | |
| "kubeContext": { | |
| "type": "string" | |
| } | |
| } | |
| }, | |
| "hook": { | |
| "type": "object", | |
| "properties": { | |
| "events": { | |
| "type": "array", | |
| "items": { | |
| "type": "string", | |
| "enum": [ | |
| "prepare", | |
| "preapply", | |
| "presync", | |
| "preuninstall", | |
| "postuninstall", | |
| "postsync", | |
| "cleanup" | |
| ] | |
| } | |
| }, | |
| "showlogs": { | |
| "type": "boolean" | |
| }, | |
| "command": { | |
| "type": "string" | |
| }, | |
| "args": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "string" | |
| } | |
| ] | |
| } | |
| } | |
| } | |
| }, | |
| "map": { | |
| "type": "object", | |
| "patternProperties": { | |
| "[a-zA-Z\\d_-]+": { | |
| "anyOf": [ | |
| { | |
| "type": "object" | |
| }, | |
| { | |
| "type": "boolean" | |
| }, | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "array" | |
| }, | |
| { | |
| "type": "null" | |
| }, | |
| { | |
| "type": "integer" | |
| } | |
| ] | |
| } | |
| } | |
| } | |
| }, | |
| "properties": { | |
| "apiVersions": { | |
| "type": "array", | |
| "description": "Configure a fixed list of API versions to pass to 'helm template' via the `--api-versions` flag.", | |
| "items": { | |
| "type": "string", | |
| "examples": ["example/v1"] | |
| } | |
| }, | |
| "bases": { | |
| "type": "array", | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| } | |
| ] | |
| } | |
| }, | |
| "environments": { | |
| "type": "object", | |
| "description": "The list of environments managed by helmfile.", | |
| "default": { | |
| "default": {} | |
| }, | |
| "examples": [ | |
| { | |
| "default": { | |
| "values": [] | |
| } | |
| } | |
| ], | |
| "patternProperties": { | |
| "[a-zA-Z\\d_-]+": { | |
| "$ref": "#/definitions/environment" | |
| } | |
| } | |
| }, | |
| "commonLabels": { | |
| "$ref": "#/definitions/map", | |
| "type": "object", | |
| "description": "these labels will be applied to all releases in a Helmfile. Useful in templating if you have a helmfile per environment or customer and don't want to copy the same label to each release" | |
| }, | |
| "helmBinary": { | |
| "type": "string", | |
| "description": "Path to alternative helm binary (--helm-binary)", | |
| "examples": ["path/to/helm3"] | |
| }, | |
| "helmDefaults": { | |
| "$ref": "#/definitions/helmDefaults" | |
| }, | |
| "helmfiles": { | |
| "type": "array", | |
| "items": { | |
| "$ref": "#/definitions/helmfile" | |
| } | |
| }, | |
| "hooks": { | |
| "type": "array", | |
| "items": { | |
| "$ref": "#/definitions/hook" | |
| } | |
| }, | |
| "missingFileHandler": { | |
| "$ref": "#/definitions/missingFileHandler" | |
| }, | |
| "releases": { | |
| "type": "array", | |
| "description": "Helmfile runs various helm commands to converge the current state in the live cluster to the desired state defined here.", | |
| "items": { | |
| "$ref": "#/definitions/release" | |
| } | |
| }, | |
| "repositories": { | |
| "type": "array", | |
| "items": { | |
| "$ref": "#/definitions/repository" | |
| } | |
| } | |
| }, | |
| "title": "Helmfile config schema" | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment