{
    "anyOf": [
        {
            "$ref": "#/definitions/SkaffoldConfig"
        }
    ],
    "definitions": {
        "Artifact": {
            "anyOf": [
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "image",
                        "context",
                        "sync"
                    ],
                    "properties": {
                        "context": {
                            "type": "string"
                        },
                        "image": {
                            "type": "string"
                        },
                        "sync": {
                            "additionalProperties": {
                                "type": "string"
                            },
                            "default": "{}",
                            "type": "object"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "image",
                        "context",
                        "sync",
                        "docker"
                    ],
                    "properties": {
                        "context": {
                            "type": "string"
                        },
                        "docker": {
                            "$ref": "#/definitions/DockerArtifact"
                        },
                        "image": {
                            "type": "string"
                        },
                        "sync": {
                            "additionalProperties": {
                                "type": "string"
                            },
                            "default": "{}",
                            "type": "object"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "image",
                        "context",
                        "sync",
                        "bazel"
                    ],
                    "properties": {
                        "bazel": {
                            "$ref": "#/definitions/BazelArtifact"
                        },
                        "context": {
                            "type": "string"
                        },
                        "image": {
                            "type": "string"
                        },
                        "sync": {
                            "additionalProperties": {
                                "type": "string"
                            },
                            "default": "{}",
                            "type": "object"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "image",
                        "context",
                        "sync",
                        "jibMaven"
                    ],
                    "properties": {
                        "context": {
                            "type": "string"
                        },
                        "image": {
                            "type": "string"
                        },
                        "jibMaven": {
                            "$ref": "#/definitions/JibMavenArtifact"
                        },
                        "sync": {
                            "additionalProperties": {
                                "type": "string"
                            },
                            "default": "{}",
                            "type": "object"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "image",
                        "context",
                        "sync",
                        "jibGradle"
                    ],
                    "properties": {
                        "context": {
                            "type": "string"
                        },
                        "image": {
                            "type": "string"
                        },
                        "jibGradle": {
                            "$ref": "#/definitions/JibGradleArtifact"
                        },
                        "sync": {
                            "additionalProperties": {
                                "type": "string"
                            },
                            "default": "{}",
                            "type": "object"
                        }
                    }
                }
            ],
            "description": "represents items that need to be built, along with the context in which they should be built.",
            "x-intellij-html-description": "represents items that need to be built, along with the context in which they should be built."
        },
        "BazelArtifact": {
            "additionalProperties": false,
            "description": "describes an artifact built with Bazel.",
            "preferredOrder": [
                "target",
                "args"
            ],
            "properties": {
                "args": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "target": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "describes an artifact built with Bazel."
        },
        "BuildConfig": {
            "anyOf": [
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "artifacts",
                        "tagPolicy"
                    ],
                    "properties": {
                        "artifacts": {
                            "items": {
                                "$ref": "#/definitions/Artifact"
                            },
                            "type": "array"
                        },
                        "tagPolicy": {
                            "$ref": "#/definitions/TagPolicy"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "artifacts",
                        "tagPolicy",
                        "local"
                    ],
                    "properties": {
                        "artifacts": {
                            "items": {
                                "$ref": "#/definitions/Artifact"
                            },
                            "type": "array"
                        },
                        "local": {
                            "$ref": "#/definitions/LocalBuild"
                        },
                        "tagPolicy": {
                            "$ref": "#/definitions/TagPolicy"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "artifacts",
                        "tagPolicy",
                        "googleCloudBuild"
                    ],
                    "properties": {
                        "artifacts": {
                            "items": {
                                "$ref": "#/definitions/Artifact"
                            },
                            "type": "array"
                        },
                        "googleCloudBuild": {
                            "$ref": "#/definitions/GoogleCloudBuild"
                        },
                        "tagPolicy": {
                            "$ref": "#/definitions/TagPolicy"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "artifacts",
                        "tagPolicy",
                        "kaniko"
                    ],
                    "properties": {
                        "artifacts": {
                            "items": {
                                "$ref": "#/definitions/Artifact"
                            },
                            "type": "array"
                        },
                        "kaniko": {
                            "$ref": "#/definitions/KanikoBuild"
                        },
                        "tagPolicy": {
                            "$ref": "#/definitions/TagPolicy"
                        }
                    }
                }
            ],
            "description": "contains all the configuration for the build steps",
            "x-intellij-html-description": "contains all the configuration for the build steps"
        },
        "DateTimeTagger": {
            "additionalProperties": false,
            "description": "contains the configuration for the DateTime tagger.",
            "preferredOrder": [
                "format",
                "timezone"
            ],
            "properties": {
                "format": {
                    "type": "string"
                },
                "timezone": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "contains the configuration for the DateTime tagger."
        },
        "DeployConfig": {
            "anyOf": [
                {
                    "additionalProperties": false
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "helm"
                    ],
                    "properties": {
                        "helm": {
                            "$ref": "#/definitions/HelmDeploy"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "kubectl"
                    ],
                    "properties": {
                        "kubectl": {
                            "$ref": "#/definitions/KubectlDeploy"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "kustomize"
                    ],
                    "properties": {
                        "kustomize": {
                            "$ref": "#/definitions/KustomizeDeploy"
                        }
                    }
                }
            ],
            "description": "contains all the configuration needed by the deploy steps",
            "x-intellij-html-description": "contains all the configuration needed by the deploy steps"
        },
        "DockerArtifact": {
            "additionalProperties": false,
            "description": "describes an artifact built from a Dockerfile, usually using `docker build`.",
            "preferredOrder": [
                "dockerfile",
                "buildArgs",
                "cacheFrom",
                "target"
            ],
            "properties": {
                "buildArgs": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "default": "{}",
                    "type": "object"
                },
                "cacheFrom": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "dockerfile": {
                    "type": "string"
                },
                "target": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "describes an artifact built from a Dockerfile, usually using <code>docker build</code>."
        },
        "EnvTemplateTagger": {
            "additionalProperties": false,
            "description": "contains the configuration for the envTemplate tagger.",
            "preferredOrder": [
                "template"
            ],
            "properties": {
                "template": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "contains the configuration for the envTemplate tagger."
        },
        "GitTagger": {
            "description": "contains the configuration for the git tagger.",
            "x-intellij-html-description": "contains the configuration for the git tagger."
        },
        "GoogleCloudBuild": {
            "additionalProperties": false,
            "description": "contains the fields needed to do a remote build on Google Cloud Build.",
            "preferredOrder": [
                "projectId",
                "diskSizeGb",
                "machineType",
                "timeout",
                "dockerImage"
            ],
            "properties": {
                "diskSizeGb": {
                    "type": "integer"
                },
                "dockerImage": {
                    "type": "string"
                },
                "machineType": {
                    "type": "string"
                },
                "projectId": {
                    "type": "string"
                },
                "timeout": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "contains the fields needed to do a remote build on Google Cloud Build."
        },
        "HelmConventionConfig": {
            "description": "represents image config in the syntax of image.repository and image.tag",
            "x-intellij-html-description": "represents image config in the syntax of image.repository and image.tag"
        },
        "HelmDeploy": {
            "additionalProperties": false,
            "description": "contains the configuration needed for deploying with helm",
            "preferredOrder": [
                "releases"
            ],
            "properties": {
                "releases": {
                    "items": {
                        "$ref": "#/definitions/HelmRelease"
                    },
                    "type": "array"
                }
            },
            "x-intellij-html-description": "contains the configuration needed for deploying with helm"
        },
        "HelmFQNConfig": {
            "additionalProperties": false,
            "description": "represents image config to use the FullyQualifiedImageName as param to set",
            "preferredOrder": [
                "property"
            ],
            "properties": {
                "property": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "represents image config to use the FullyQualifiedImageName as param to set"
        },
        "HelmImageStrategy": {
            "anyOf": [
                {
                    "additionalProperties": false
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "fqn"
                    ],
                    "properties": {
                        "fqn": {
                            "$ref": "#/definitions/HelmFQNConfig"
                        }
                    }
                },
                {
                    "additionalProperties": false,
                    "preferredOrder": [
                        "helm"
                    ],
                    "properties": {
                        "helm": {
                            "$ref": "#/definitions/HelmConventionConfig"
                        }
                    }
                }
            ]
        },
        "HelmPackaged": {
            "additionalProperties": false,
            "description": "represents parameters for packaging helm chart.",
            "preferredOrder": [
                "version",
                "appVersion"
            ],
            "properties": {
                "appVersion": {
                    "description": "set the appVersion on the chart to this version",
                    "type": "string",
                    "x-intellij-html-description": "set the appVersion on the chart to this version"
                },
                "version": {
                    "description": "sets the version on the chart to this semver version.",
                    "type": "string",
                    "x-intellij-html-description": "sets the version on the chart to this semver version."
                }
            },
            "x-intellij-html-description": "represents parameters for packaging helm chart."
        },
        "HelmRelease": {
            "additionalProperties": false,
            "preferredOrder": [
                "name",
                "chartPath",
                "valuesFiles",
                "values",
                "namespace",
                "version",
                "setValues",
                "setValueTemplates",
                "wait",
                "recreatePods",
                "overrides",
                "packaged",
                "imageStrategy"
            ],
            "properties": {
                "chartPath": {
                    "type": "string"
                },
                "imageStrategy": {
                    "$ref": "#/definitions/HelmImageStrategy"
                },
                "name": {
                    "type": "string"
                },
                "namespace": {
                    "type": "string"
                },
                "overrides": {},
                "packaged": {
                    "$ref": "#/definitions/HelmPackaged"
                },
                "recreatePods": {
                    "default": "false",
                    "type": "boolean"
                },
                "setValueTemplates": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "default": "{}",
                    "type": "object"
                },
                "setValues": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "default": "{}",
                    "type": "object"
                },
                "values": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "default": "{}",
                    "type": "object"
                },
                "valuesFiles": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "version": {
                    "type": "string"
                },
                "wait": {
                    "default": "false",
                    "type": "boolean"
                }
            }
        },
        "JibGradleArtifact": {
            "additionalProperties": false,
            "preferredOrder": [
                "project"
            ],
            "properties": {
                "project": {
                    "description": "Only multi-module",
                    "type": "string",
                    "x-intellij-html-description": "Only multi-module"
                }
            }
        },
        "JibMavenArtifact": {
            "additionalProperties": false,
            "preferredOrder": [
                "module",
                "profile"
            ],
            "properties": {
                "module": {
                    "description": "Only multi-module",
                    "type": "string",
                    "x-intellij-html-description": "Only multi-module"
                },
                "profile": {
                    "type": "string"
                }
            }
        },
        "KanikoBuild": {
            "additionalProperties": false,
            "description": "contains the fields needed to do a on-cluster build using the kaniko image",
            "preferredOrder": [
                "buildContext",
                "cache",
                "pullSecret",
                "pullSecretName",
                "namespace",
                "timeout",
                "image"
            ],
            "properties": {
                "buildContext": {
                    "$ref": "#/definitions/KanikoBuildContext"
                },
                "cache": {
                    "$ref": "#/definitions/KanikoCache"
                },
                "image": {
                    "type": "string"
                },
                "namespace": {
                    "type": "string"
                },
                "pullSecret": {
                    "type": "string"
                },
                "pullSecretName": {
                    "type": "string"
                },
                "timeout": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "contains the fields needed to do a on-cluster build using the kaniko image"
        },
        "KanikoBuildContext": {
            "additionalProperties": false,
            "description": "contains the different fields available to specify a kaniko build context",
            "preferredOrder": [
                "gcsBucket",
                "localDir"
            ],
            "properties": {
                "gcsBucket": {
                    "type": "string"
                },
                "localDir": {
                    "$ref": "#/definitions/LocalDir"
                }
            },
            "x-intellij-html-description": "contains the different fields available to specify a kaniko build context"
        },
        "KanikoCache": {
            "additionalProperties": false,
            "description": "contains fields related to kaniko caching",
            "preferredOrder": [
                "repo"
            ],
            "properties": {
                "repo": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "contains fields related to kaniko caching"
        },
        "KubectlDeploy": {
            "additionalProperties": false,
            "description": "contains the configuration needed for deploying with `kubectl apply`",
            "preferredOrder": [
                "manifests",
                "remoteManifests",
                "flags"
            ],
            "properties": {
                "flags": {
                    "$ref": "#/definitions/KubectlFlags"
                },
                "manifests": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "remoteManifests": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "x-intellij-html-description": "contains the configuration needed for deploying with <code>kubectl apply</code>"
        },
        "KubectlFlags": {
            "additionalProperties": false,
            "description": "describes additional options flags that are passed on the command line to kubectl either on every command (Global), on creations (Apply) or deletions (Delete).",
            "preferredOrder": [
                "global",
                "apply",
                "delete"
            ],
            "properties": {
                "apply": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "delete": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "global": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "x-intellij-html-description": "describes additional options flags that are passed on the command line to kubectl either on every command (Global), on creations (Apply) or deletions (Delete)."
        },
        "KustomizeDeploy": {
            "additionalProperties": false,
            "description": "contains the configuration needed for deploying with kustomize.",
            "preferredOrder": [
                "path",
                "flags"
            ],
            "properties": {
                "flags": {
                    "$ref": "#/definitions/KubectlFlags"
                },
                "path": {
                    "type": "string"
                }
            },
            "x-intellij-html-description": "contains the configuration needed for deploying with kustomize."
        },
        "LocalBuild": {
            "additionalProperties": false,
            "description": "contains the fields needed to do a build on the local docker daemon and optionally push to a repository.",
            "preferredOrder": [
                "push",
                "useDockerCLI",
                "useBuildkit"
            ],
            "properties": {
                "push": {
                    "type": "boolean"
                },
                "useBuildkit": {
                    "default": "false",
                    "type": "boolean"
                },
                "useDockerCLI": {
                    "default": "false",
                    "type": "boolean"
                }
            },
            "x-intellij-html-description": "contains the fields needed to do a build on the local docker daemon and optionally push to a repository."
        },
        "LocalDir": {
            "description": "represents the local directory kaniko build context",
            "x-intellij-html-description": "represents the local directory kaniko build context"
        },
        "Profile": {
            "additionalProperties": false,
            "description": "additional configuration that overrides default configuration when it is activated.",
            "preferredOrder": [
                "name",
                "build",
                "test",
                "deploy"
            ],
            "properties": {
                "build": {
                    "$ref": "#/definitions/BuildConfig"
                },
                "deploy": {
                    "$ref": "#/definitions/DeployConfig"
                },
                "name": {
                    "type": "string"
                },
                "test": {
                    "$ref": "#/definitions/TestConfig"
                }
            },
            "x-intellij-html-description": "additional configuration that overrides default configuration when it is activated."
        },
        "ShaTagger": {
            "description": "contains the configuration for the SHA tagger.",
            "x-intellij-html-description": "contains the configuration for the SHA tagger."
        },
        "SkaffoldConfig": {
            "additionalProperties": false,
            "preferredOrder": [
                "apiVersion",
                "kind",
                "build",
                "test",
                "deploy",
                "profiles"
            ],
            "properties": {
                "apiVersion": {
                    "type": "string"
                },
                "build": {
                    "$ref": "#/definitions/BuildConfig"
                },
                "deploy": {
                    "$ref": "#/definitions/DeployConfig"
                },
                "kind": {
                    "type": "string"
                },
                "profiles": {
                    "items": {
                        "$ref": "#/definitions/Profile"
                    },
                    "type": "array"
                },
                "test": {
                    "$ref": "#/definitions/TestConfig"
                }
            }
        },
        "TagPolicy": {
            "additionalProperties": false,
            "description": "contains all the configuration for the tagging step",
            "preferredOrder": [
                "gitCommit",
                "sha256",
                "envTemplate",
                "dateTime"
            ],
            "properties": {
                "dateTime": {
                    "$ref": "#/definitions/DateTimeTagger"
                },
                "envTemplate": {
                    "$ref": "#/definitions/EnvTemplateTagger"
                },
                "gitCommit": {
                    "$ref": "#/definitions/GitTagger"
                },
                "sha256": {
                    "$ref": "#/definitions/ShaTagger"
                }
            },
            "x-intellij-html-description": "contains all the configuration for the tagging step"
        },
        "TestCase": {
            "additionalProperties": false,
            "description": "a struct containing all the specified test configuration for an image.",
            "preferredOrder": [
                "image",
                "structureTests"
            ],
            "properties": {
                "image": {
                    "type": "string"
                },
                "structureTests": {
                    "default": "[]",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "x-intellij-html-description": "a struct containing all the specified test configuration for an image."
        },
        "TestConfig": {
            "items": {
                "$ref": "#/definitions/TestCase"
            },
            "type": "array"
        }
    },
    "type": "object"
}