{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://github.com/zarf-dev/zarf/src/api/v1alpha1/zarf-package","$defs":{"Constant":{"properties":{"name":{"type":"string","pattern":"^[A-Z0-9_]+$","description":"The name to be used for the constant"},"value":{"type":"string","description":"The value to set for the constant during deploy"},"description":{"type":"string","description":"A description of the constant to explain its purpose on package create or deploy confirmation prompts"},"autoIndent":{"type":"boolean","description":"Whether to automatically indent the variable's value (if multiline) when templating. Based on the number of chars before the start of ###ZARF_CONST_."},"pattern":{"type":"string","description":"An optional regex pattern that a constant value must match before a package can be created."}},"additionalProperties":false,"type":"object","required":["name","value"],"description":"Constant are constants that can be used to dynamically template K8s resources or run in actions.","patternProperties":{"^x-":{}}},"DeprecatedZarfComponentScripts":{"properties":{"showOutput":{"type":"boolean","description":"Show the output of the script during package deployment."},"timeoutSeconds":{"type":"integer","description":"Timeout in seconds for the script."},"retry":{"type":"boolean","description":"Retry the script if it fails."},"prepare":{"items":{"type":"string"},"type":"array","description":"Scripts to run before the component is added during package create."},"before":{"items":{"type":"string"},"type":"array","description":"Scripts to run before the component is deployed."},"after":{"items":{"type":"string"},"type":"array","description":"Scripts to run after the component successfully deploys."}},"additionalProperties":false,"type":"object","description":"DeprecatedZarfComponentScripts are scripts that run before or after a component is deployed.","patternProperties":{"^x-":{}}},"InteractiveVariable":{"properties":{"name":{"type":"string","pattern":"^[A-Z0-9_]+$","description":"The name to be used for the variable"},"sensitive":{"type":"boolean","description":"Whether to mark this variable as sensitive to not print it in the log"},"autoIndent":{"type":"boolean","description":"Whether to automatically indent the variable's value (if multiline) when templating. Based on the number of chars before the start of ###ZARF_VAR_."},"pattern":{"type":"string","description":"An optional regex pattern that a variable value must match before a package deployment can continue."},"type":{"type":"string","enum":["raw","file"],"description":"Changes the handling of a variable to load contents differently (i.e. from a file rather than as a raw variable - templated files should be kept below 1 MiB)"},"description":{"type":"string","description":"A description of the variable to be used when prompting the user a value"},"default":{"type":"string","description":"The default value to use for the variable"},"prompt":{"type":"boolean","description":"Whether to prompt the user for input for this variable"}},"additionalProperties":false,"type":"object","required":["name"],"description":"InteractiveVariable is a variable that can be used to prompt a user for more information","patternProperties":{"^x-":{}}},"NamespacedObjectKindReference":{"properties":{"apiVersion":{"type":"string","description":"API Version of the resource"},"kind":{"type":"string","description":"Kind of the resource"},"namespace":{"type":"string","description":"Namespace of the resource"},"name":{"type":"string","description":"Name of the resource"}},"additionalProperties":false,"type":"object","required":["apiVersion","kind","namespace","name"],"description":"NamespacedObjectKindReference is a reference to a specific resource in a namespace using its kind and API version.","patternProperties":{"^x-":{}}},"Shell":{"properties":{"windows":{"type":"string","description":"(default 'powershell') Indicates a preference for the shell to use on Windows systems (note that choosing 'cmd' will turn off migrations like touch -> New-Item)","examples":["powershell","cmd","pwsh","sh","bash","gsh"]},"linux":{"type":"string","description":"(default 'sh') Indicates a preference for the shell to use on Linux systems","examples":["sh","bash","fish","zsh","pwsh"]},"darwin":{"type":"string","description":"(default 'sh') Indicates a preference for the shell to use on macOS systems","examples":["sh","bash","fish","zsh","pwsh"]}},"additionalProperties":false,"type":"object","description":"Shell represents the desired shell to use for a given command","patternProperties":{"^x-":{}}},"Variable":{"properties":{"name":{"type":"string","pattern":"^[A-Z0-9_]+$","description":"The name to be used for the variable"},"sensitive":{"type":"boolean","description":"Whether to mark this variable as sensitive to not print it in the log"},"autoIndent":{"type":"boolean","description":"Whether to automatically indent the variable's value (if multiline) when templating. Based on the number of chars before the start of ###ZARF_VAR_."},"pattern":{"type":"string","description":"An optional regex pattern that a variable value must match before a package deployment can continue."},"type":{"type":"string","enum":["raw","file"],"description":"Changes the handling of a variable to load contents differently (i.e. from a file rather than as a raw variable - templated files should be kept below 1 MiB)"}},"additionalProperties":false,"type":"object","required":["name"],"description":"Variable represents a variable that has a value set programmatically","patternProperties":{"^x-":{}}},"ZarfBuildData":{"properties":{"terminal":{"type":"string","description":"The machine name that created this package."},"user":{"type":"string","description":"The username who created this package."},"architecture":{"type":"string","description":"The architecture this package was created on."},"timestamp":{"type":"string","description":"The timestamp when this package was created."},"version":{"type":"string","description":"The version of Zarf used to build this package."},"migrations":{"items":{"type":"string"},"type":"array","description":"Any migrations that have been run on this package."},"registryOverrides":{"additionalProperties":{"type":"string"},"type":"object","description":"Any registry domains that were overridden on package create when pulling images."},"differential":{"type":"boolean","description":"Whether this package was created with differential components."},"differentialPackageVersion":{"type":"string","description":"Version of a previously built package used as the basis for creating this differential package."},"differentialMissing":{"items":{"type":"string"},"type":"array","description":"List of components that were not included in this package due to differential packaging."},"lastNonBreakingVersion":{"type":"string","description":"The minimum version of Zarf that does not have breaking package structure changes."},"flavor":{"type":"string","description":"The flavor of Zarf used to build this package."}},"additionalProperties":false,"type":"object","required":["terminal","user","architecture","timestamp","version"],"description":"ZarfBuildData is written during the packager.Create() operation to track details of the created package.","patternProperties":{"^x-":{}}},"ZarfChart":{"properties":{"name":{"type":"string","description":"The name of the chart within Zarf; note that this must be unique and does not need to be the same as the name in the chart repo."},"version":{"type":"string","description":"The version of the chart to deploy; for git-based charts this is also the tag of the git repo by default (when not using the '@' syntax for 'repos')."},"url":{"type":"string","description":"The URL of the OCI registry, chart repository, or git repo where the helm chart is stored.","examples":["OCI registry: oci://ghcr.io/stefanprodan/charts/podinfo","helm chart repo: https://stefanprodan.github.io/podinfo","git repo: https://github.com/stefanprodan/podinfo (note the '@' syntax for 'repos' is supported here too)"]},"repoName":{"type":"string","description":"The name of a chart within a Helm repository (defaults to the Zarf name of the chart)."},"gitPath":{"type":"string","description":"(git repo only) The sub directory to the chart within a git repo.","examples":["charts/your-chart"]},"localPath":{"type":"string","description":"The path to a local chart's folder or .tgz archive."},"namespace":{"type":"string","description":"The namespace to deploy the chart to."},"releaseName":{"type":"string","description":"The name of the Helm release to create (defaults to the Zarf name of the chart)."},"noWait":{"type":"boolean","description":"Whether to not wait for chart resources to be ready before continuing."},"valuesFiles":{"items":{"type":"string"},"type":"array","description":"List of local values file paths or remote URLs to include in the package; these will be merged together when deployed."},"variables":{"items":{"$ref":"#/$defs/ZarfChartVariable"},"type":"array","description":"[alpha] List of variables to set in the Helm chart."},"schemaValidation":{"type":"boolean","description":"Whether or not to validate the values.yaml schema, defaults to true. Necessary in the air-gap when the JSON Schema references resources on the internet."}},"additionalProperties":false,"type":"object","required":["name"],"description":"ZarfChart defines a helm chart to be deployed.","patternProperties":{"^x-":{}}},"ZarfChartVariable":{"properties":{"name":{"type":"string","pattern":"^[A-Z0-9_]+$","description":"The name of the variable."},"description":{"type":"string","description":"A brief description of what the variable controls."},"path":{"type":"string","description":"The path within the Helm chart values where this variable applies."}},"additionalProperties":false,"type":"object","required":["name","description","path"],"description":"ZarfChartVariable represents a variable that can be set for a Helm chart overrides.","patternProperties":{"^x-":{}}},"ZarfComponent":{"properties":{"name":{"type":"string","pattern":"^[a-z0-9][a-z0-9\\-]*$","description":"The name of the component."},"description":{"type":"string","description":"Message to include during package deploy describing the purpose of this component."},"default":{"type":"boolean","description":"Determines the default Y/N state for installing this component on package deploy."},"required":{"type":"boolean","description":"Do not prompt user to install this component."},"only":{"$ref":"#/$defs/ZarfComponentOnlyTarget","description":"Filter when this component is included in package creation or deployment."},"group":{"type":"string","description":"[Deprecated] Create a user selector field based on all components in the same group. This will be removed in Zarf v1.0.0. Consider using 'only.flavor' instead."},"import":{"$ref":"#/$defs/ZarfComponentImport","description":"Import a component from another Zarf package."},"manifests":{"items":{"$ref":"#/$defs/ZarfManifest"},"type":"array","description":"Kubernetes manifests to be included in a generated Helm chart on package deploy."},"charts":{"items":{"$ref":"#/$defs/ZarfChart"},"type":"array","description":"Helm charts to install during package deploy."},"dataInjections":{"items":{"$ref":"#/$defs/ZarfDataInjection"},"type":"array","description":"Datasets to inject into a container in the target cluster."},"files":{"items":{"$ref":"#/$defs/ZarfFile"},"type":"array","description":"Files or folders to place on disk during package deployment."},"images":{"items":{"type":"string"},"type":"array","description":"List of OCI images to include in the package."},"repos":{"items":{"type":"string"},"type":"array","description":"List of git repos to include in the package."},"scripts":{"$ref":"#/$defs/DeprecatedZarfComponentScripts","description":"[Deprecated] (replaced by actions) Custom commands to run before or after package deployment. This will be removed in Zarf v1.0.0."},"actions":{"$ref":"#/$defs/ZarfComponentActions","description":"Custom commands to run at various stages of a package lifecycle."},"healthChecks":{"items":{"$ref":"#/$defs/NamespacedObjectKindReference"},"type":"array","description":"List of resources to health check after deployment"}},"additionalProperties":false,"type":"object","required":["name"],"description":"ZarfComponent is the primary functional grouping of assets to deploy by Zarf.","patternProperties":{"^x-":{}}},"ZarfComponentAction":{"properties":{"mute":{"type":"boolean","description":"Hide the output of the command during package deployment (default false)."},"maxTotalSeconds":{"type":"integer","description":"Timeout in seconds for the command (default to 0, no timeout for cmd actions and 300, 5 minutes for wait actions)."},"maxRetries":{"type":"integer","description":"Retry the command if it fails up to given number of times (default 0)."},"dir":{"type":"string","description":"The working directory to run the command in (default is CWD)."},"env":{"items":{"type":"string"},"type":"array","description":"Additional environment variables to set for the command."},"cmd":{"type":"string","description":"The command to run. Must specify either cmd or wait for the action to do anything."},"shell":{"$ref":"#/$defs/Shell","description":"(cmd only) Indicates a preference for a shell for the provided cmd to be executed in on supported operating systems."},"setVariable":{"type":"string","pattern":"^[A-Z0-9_]+$","description":"[Deprecated] (replaced by setVariables) (onDeploy/cmd only) The name of a variable to update with the output of the command. This variable will be available to all remaining actions and components in the package. This will be removed in Zarf v1.0.0."},"setVariables":{"items":{"$ref":"#/$defs/Variable"},"type":"array","description":"(onDeploy/cmd only) An array of variables to update with the output of the command. These variables will be available to all remaining actions and components in the package."},"description":{"type":"string","description":"Description of the action to be displayed during package execution instead of the command."},"wait":{"$ref":"#/$defs/ZarfComponentActionWait","description":"Wait for a condition to be met before continuing. Must specify either cmd or wait for the action. See the 'zarf tools wait-for' command for more info."}},"additionalProperties":false,"type":"object","description":"ZarfComponentAction represents a single action to run during a zarf package operation.","patternProperties":{"^x-":{}}},"ZarfComponentActionDefaults":{"properties":{"mute":{"type":"boolean","description":"Hide the output of commands during execution (default false)."},"maxTotalSeconds":{"type":"integer","description":"Default timeout in seconds for commands (default to 0, no timeout)."},"maxRetries":{"type":"integer","description":"Retry commands given number of times if they fail (default 0)."},"dir":{"type":"string","description":"Working directory for commands (default CWD)."},"env":{"items":{"type":"string"},"type":"array","description":"Additional environment variables for commands."},"shell":{"$ref":"#/$defs/Shell","description":"(cmd only) Indicates a preference for a shell for the provided cmd to be executed in on supported operating systems."}},"additionalProperties":false,"type":"object","description":"ZarfComponentActionDefaults sets the default configs for child actions.","patternProperties":{"^x-":{}}},"ZarfComponentActionSet":{"properties":{"defaults":{"$ref":"#/$defs/ZarfComponentActionDefaults","description":"Default configuration for all actions in this set."},"before":{"items":{"$ref":"#/$defs/ZarfComponentAction"},"type":"array","description":"Actions to run at the start of an operation."},"after":{"items":{"$ref":"#/$defs/ZarfComponentAction"},"type":"array","description":"Actions to run at the end of an operation."},"onSuccess":{"items":{"$ref":"#/$defs/ZarfComponentAction"},"type":"array","description":"Actions to run if all operations succeed."},"onFailure":{"items":{"$ref":"#/$defs/ZarfComponentAction"},"type":"array","description":"Actions to run if all operations fail."}},"additionalProperties":false,"type":"object","description":"ZarfComponentActionSet is a set of actions to run during a zarf package operation.","patternProperties":{"^x-":{}}},"ZarfComponentActionWait":{"properties":{"cluster":{"$ref":"#/$defs/ZarfComponentActionWaitCluster","description":"Wait for a condition to be met in the cluster before continuing. Only one of cluster or network can be specified."},"network":{"$ref":"#/$defs/ZarfComponentActionWaitNetwork","description":"Wait for a condition to be met on the network before continuing. Only one of cluster or network can be specified."}},"additionalProperties":false,"type":"object","description":"ZarfComponentActionWait specifies a condition to wait for before continuing","patternProperties":{"^x-":{}}},"ZarfComponentActionWaitCluster":{"properties":{"kind":{"type":"string","description":"The kind of resource to wait for.","examples":["Pod","Deployment"]},"name":{"type":"string","description":"The name of the resource or selector to wait for.","examples":["podinfo","app=podinfo"]},"namespace":{"type":"string","description":"The namespace of the resource to wait for."},"condition":{"type":"string","description":"The condition or jsonpath state to wait for; defaults to exist, a special condition that will wait for the resource to exist.","examples":["Ready","Available"]}},"additionalProperties":false,"type":"object","required":["kind","name"],"description":"ZarfComponentActionWaitCluster specifies a condition to wait for before continuing","patternProperties":{"^x-":{}}},"ZarfComponentActionWaitNetwork":{"properties":{"protocol":{"type":"string","enum":["tcp","http","https"],"description":"The protocol to wait for."},"address":{"type":"string","description":"The address to wait for.","examples":["localhost:8080","1.1.1.1"]},"code":{"type":"integer","description":"The HTTP status code to wait for if using http or https.","examples":[200,404]}},"additionalProperties":false,"type":"object","required":["protocol","address"],"description":"ZarfComponentActionWaitNetwork specifies a condition to wait for before continuing","patternProperties":{"^x-":{}}},"ZarfComponentActions":{"properties":{"onCreate":{"$ref":"#/$defs/ZarfComponentActionSet","description":"Actions to run during package creation."},"onDeploy":{"$ref":"#/$defs/ZarfComponentActionSet","description":"Actions to run during package deployment."},"onRemove":{"$ref":"#/$defs/ZarfComponentActionSet","description":"Actions to run during package removal."}},"additionalProperties":false,"type":"object","description":"ZarfComponentActions are ActionSets that map to different zarf package operations.","patternProperties":{"^x-":{}}},"ZarfComponentImport":{"properties":{"name":{"type":"string","description":"The name of the component to import from the referenced zarf.yaml."},"path":{"type":"string","description":"The path to the directory containing the zarf.yaml to import."},"url":{"type":"string","pattern":"^oci://.*$","description":"[beta] The URL to a Zarf package to import via OCI."}},"additionalProperties":false,"type":"object","description":"ZarfComponentImport structure for including imported Zarf components.","patternProperties":{"^x-":{}}},"ZarfComponentOnlyCluster":{"properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Only create and deploy to clusters of the given architecture."},"distros":{"items":{"type":"string","examples":["k3s","eks"]},"type":"array","description":"A list of kubernetes distros this package works with (Reserved for future use)."}},"additionalProperties":false,"type":"object","description":"ZarfComponentOnlyCluster represents the architecture and K8s cluster distribution to filter on.","patternProperties":{"^x-":{}}},"ZarfComponentOnlyTarget":{"properties":{"localOS":{"type":"string","enum":["linux","darwin","windows"],"description":"Only deploy component to specified OS."},"cluster":{"$ref":"#/$defs/ZarfComponentOnlyCluster","description":"Only deploy component to specified clusters."},"flavor":{"type":"string","description":"Only include this component when a matching '--flavor' is specified on 'zarf package create'."}},"additionalProperties":false,"type":"object","description":"ZarfComponentOnlyTarget filters a component to only show it for a given local OS and cluster.","patternProperties":{"^x-":{}}},"ZarfContainerTarget":{"properties":{"namespace":{"type":"string","description":"The namespace to target for data injection."},"selector":{"type":"string","description":"The K8s selector to target for data injection.","examples":["app=data-injection"]},"container":{"type":"string","description":"The container name to target for data injection."},"path":{"type":"string","description":"The path within the container to copy the data into."}},"additionalProperties":false,"type":"object","required":["namespace","selector","container","path"],"description":"ZarfContainerTarget defines the destination info for a ZarfData target","patternProperties":{"^x-":{}}},"ZarfDataInjection":{"properties":{"source":{"type":"string","description":"Either a path to a local folder/file or a remote URL of a file to inject into the given target pod + container."},"target":{"$ref":"#/$defs/ZarfContainerTarget","description":"The target pod + container to inject the data into."},"compress":{"type":"boolean","description":"Compress the data before transmitting using gzip. Note: this requires support for tar/gzip locally and in the target image."}},"additionalProperties":false,"type":"object","required":["source","target"],"description":"ZarfDataInjection is a data-injection definition.","patternProperties":{"^x-":{}}},"ZarfFile":{"properties":{"source":{"type":"string","description":"Local folder or file path or remote URL to pull into the package."},"shasum":{"type":"string","description":"(files only) Optional SHA256 checksum of the file."},"target":{"type":"string","description":"The absolute or relative path where the file or folder should be copied to during package deploy."},"executable":{"type":"boolean","description":"(files only) Determines if the file should be made executable during package deploy."},"symlinks":{"items":{"type":"string"},"type":"array","description":"List of symlinks to create during package deploy."},"extractPath":{"type":"string","description":"Local folder or file to be extracted from a 'source' archive."}},"additionalProperties":false,"type":"object","required":["source","target"],"description":"ZarfFile defines a file to deploy.","patternProperties":{"^x-":{}}},"ZarfManifest":{"properties":{"name":{"type":"string","description":"A name to give this collection of manifests; this will become the name of the dynamically-created helm chart."},"namespace":{"type":"string","description":"The namespace to deploy the manifests to."},"files":{"items":{"type":"string"},"type":"array","description":"List of local K8s YAML files or remote URLs to deploy (in order)."},"kustomizeAllowAnyDirectory":{"type":"boolean","description":"Allow traversing directory above the current directory if needed for kustomization."},"kustomizations":{"items":{"type":"string"},"type":"array","description":"List of local kustomization paths or remote URLs to include in the package."},"noWait":{"type":"boolean","description":"Whether to not wait for manifest resources to be ready before continuing."}},"additionalProperties":false,"type":"object","required":["name"],"description":"ZarfManifest defines raw manifests Zarf will deploy as a helm chart.","patternProperties":{"^x-":{}}},"ZarfMetadata":{"properties":{"name":{"type":"string","pattern":"^[a-z0-9][a-z0-9\\-]*$","description":"Name to identify this Zarf package."},"description":{"type":"string","description":"Additional information about this package."},"version":{"type":"string","description":"Generic string set by a package author to track the package version (Note: ZarfInitConfigs will always be versioned to the CLIVersion they were created with)."},"url":{"type":"string","description":"Link to package information when online."},"image":{"type":"string","description":"An image URL to embed in this package (Reserved for future use in Zarf UI)."},"uncompressed":{"type":"boolean","description":"Disable compression of this package."},"architecture":{"type":"string","description":"The target cluster architecture for this package.","examples":["arm64","amd64"]},"yolo":{"type":"boolean","description":"Yaml OnLy Online (YOLO): True enables deploying a Zarf package without first running zarf init against the cluster. This is ideal for connected environments where you want to use existing VCS and container registries."},"authors":{"type":"string","description":"Comma-separated list of package authors (including contact info).","examples":["Doug &#60;hello@defenseunicorns.com&#62;&#44; Pepr &#60;hello@defenseunicorns.com&#62;"]},"documentation":{"type":"string","description":"Link to package documentation when online."},"source":{"type":"string","description":"Link to package source code when online."},"vendor":{"type":"string","description":"Name of the distributing entity, organization or individual."},"aggregateChecksum":{"type":"string","description":"Checksum of a checksums.txt file that contains checksums all the layers within the package."},"annotations":{"additionalProperties":{"type":"string"},"type":"object","description":"Annotations contains arbitrary metadata about the package.\nUsers are encouraged to follow OCI image-spec https://github.com/opencontainers/image-spec/blob/main/annotations.md"},"allowNamespaceOverride":{"type":"boolean","description":"AllowNamespaceOverride controls whether a package's namespace may be overridden."}},"additionalProperties":false,"type":"object","required":["name"],"description":"ZarfMetadata lists information about the current ZarfPackage.","patternProperties":{"^x-":{}}}},"properties":{"apiVersion":{"type":"string","enum":["zarf.dev/v1alpha1"],"description":"The API version of the Zarf package."},"kind":{"type":"string","enum":["ZarfInitConfig","ZarfPackageConfig"],"description":"The kind of Zarf package.","default":"ZarfPackageConfig"},"metadata":{"$ref":"#/$defs/ZarfMetadata","description":"Package metadata."},"build":{"$ref":"#/$defs/ZarfBuildData","description":"Zarf-generated package build data."},"components":{"items":{"$ref":"#/$defs/ZarfComponent"},"type":"array","minItems":1,"description":"List of components to deploy in this package."},"constants":{"items":{"$ref":"#/$defs/Constant"},"type":"array","description":"Constant template values applied on deploy for K8s resources."},"variables":{"items":{"$ref":"#/$defs/InteractiveVariable"},"type":"array","description":"Variable template values applied on deploy for K8s resources."}},"additionalProperties":false,"type":"object","required":["kind","components"],"description":"ZarfPackage the top-level structure of a Zarf config file.","patternProperties":{"^x-":{}}}