{
  "description": "WorkflowEventBinding is the definition of an event resource",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "properties": {
        "event": {
          "description": "Event is the event to bind to",
          "properties": {
            "selector": {
              "description": "Selector (https://github.com/expr-lang/expr) that we must must match the event. E.g. `payload.message == \"test\"`",
              "type": "string"
            }
          },
          "required": [
            "selector"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "submit": {
          "description": "Submit is the workflow template to submit",
          "properties": {
            "arguments": {
              "description": "Arguments extracted from the event and then set as arguments to the workflow created.",
              "properties": {
                "artifacts": {
                  "description": "Artifacts is the list of artifacts to pass to the template or workflow",
                  "items": {
                    "description": "Artifact indicates an artifact to place at a specified path",
                    "properties": {
                      "archive": {
                        "description": "Archive controls how the artifact will be saved to the artifact repository.",
                        "properties": {
                          "none": {
                            "description": "NoneStrategy indicates to skip tar process and upload the files or directory tree as independent\nfiles. Note that if the artifact is a directory, the artifact driver must support the ability to\nsave/load the directory appropriately.",
                            "type": "object"
                          },
                          "tar": {
                            "description": "TarStrategy will tar and gzip the file or directory when saving",
                            "properties": {
                              "compressionLevel": {
                                "description": "CompressionLevel specifies the gzip compression level to use for the artifact.\nDefaults to gzip.DefaultCompression.",
                                "format": "int32",
                                "type": "integer"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "zip": {
                            "description": "ZipStrategy will unzip zipped input artifacts",
                            "type": "object"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "archiveLogs": {
                        "description": "ArchiveLogs indicates if the container logs should be archived",
                        "type": "boolean"
                      },
                      "artifactGC": {
                        "description": "ArtifactGC describes the strategy to use when to deleting an artifact from completed or deleted workflows",
                        "properties": {
                          "podMetadata": {
                            "description": "PodMetadata is an optional field for specifying the Labels and Annotations that should be assigned to the Pod doing the deletion",
                            "properties": {
                              "annotations": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "type": "object"
                              },
                              "labels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "serviceAccountName": {
                            "description": "ServiceAccountName is an optional field for specifying the Service Account that should be assigned to the Pod doing the deletion",
                            "type": "string"
                          },
                          "strategy": {
                            "description": "Strategy is the strategy to use.",
                            "enum": [
                              "",
                              "OnWorkflowCompletion",
                              "OnWorkflowDeletion",
                              "Never"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "artifactory": {
                        "description": "Artifactory contains artifactory artifact location details",
                        "properties": {
                          "passwordSecret": {
                            "description": "PasswordSecret is the secret selector to the repository password",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "url": {
                            "description": "URL of the artifact",
                            "type": "string"
                          },
                          "usernameSecret": {
                            "description": "UsernameSecret is the secret selector to the repository username",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "azure": {
                        "description": "Azure contains Azure Storage artifact location details",
                        "properties": {
                          "accountKeySecret": {
                            "description": "AccountKeySecret is the secret selector to the Azure Blob Storage account access key",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "blob": {
                            "description": "Blob is the blob name (i.e., path) in the container where the artifact resides",
                            "type": "string"
                          },
                          "container": {
                            "description": "Container is the container where resources will be stored",
                            "type": "string"
                          },
                          "endpoint": {
                            "description": "Endpoint is the service url associated with an account. It is most likely \"https://<ACCOUNT_NAME>.blob.core.windows.net\"",
                            "type": "string"
                          },
                          "useSDKCreds": {
                            "description": "UseSDKCreds tells the driver to figure out credentials based on sdk defaults.",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "blob",
                          "container",
                          "endpoint"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "deleted": {
                        "description": "Has this been deleted?",
                        "type": "boolean"
                      },
                      "from": {
                        "description": "From allows an artifact to reference an artifact from a previous step",
                        "type": "string"
                      },
                      "fromExpression": {
                        "description": "FromExpression, if defined, is evaluated to specify the value for the artifact",
                        "type": "string"
                      },
                      "gcs": {
                        "description": "GCS contains GCS artifact location details",
                        "properties": {
                          "bucket": {
                            "description": "Bucket is the name of the bucket",
                            "type": "string"
                          },
                          "key": {
                            "description": "Key is the path in the bucket where the artifact resides",
                            "type": "string"
                          },
                          "serviceAccountKeySecret": {
                            "description": "ServiceAccountKeySecret is the secret selector to the bucket's service account key",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "key"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "git": {
                        "description": "Git contains git artifact location details",
                        "properties": {
                          "branch": {
                            "description": "Branch is the branch to fetch when `SingleBranch` is enabled",
                            "type": "string"
                          },
                          "depth": {
                            "description": "Depth specifies clones/fetches should be shallow and include the given\nnumber of commits from the branch tip",
                            "format": "int64",
                            "type": "integer"
                          },
                          "disableSubmodules": {
                            "description": "DisableSubmodules disables submodules during git clone",
                            "type": "boolean"
                          },
                          "fetch": {
                            "description": "Fetch specifies a number of refs that should be fetched before checkout",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "insecureIgnoreHostKey": {
                            "description": "InsecureIgnoreHostKey disables SSH strict host key checking during git clone",
                            "type": "boolean"
                          },
                          "insecureSkipTLS": {
                            "description": "InsecureSkipTLS disables server certificate verification resulting in insecure HTTPS connections",
                            "type": "boolean"
                          },
                          "passwordSecret": {
                            "description": "PasswordSecret is the secret selector to the repository password",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "repo": {
                            "description": "Repo is the git repository",
                            "type": "string"
                          },
                          "revision": {
                            "description": "Revision is the git commit, tag, branch to checkout",
                            "type": "string"
                          },
                          "singleBranch": {
                            "description": "SingleBranch enables single branch clone, using the `branch` parameter",
                            "type": "boolean"
                          },
                          "sshPrivateKeySecret": {
                            "description": "SSHPrivateKeySecret is the secret selector to the repository ssh private key",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "usernameSecret": {
                            "description": "UsernameSecret is the secret selector to the repository username",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "repo"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "globalName": {
                        "description": "GlobalName exports an output artifact to the global scope, making it available as\n'{{workflow.outputs.artifacts.XXXX}} and in workflow.status.outputs.artifacts",
                        "type": "string"
                      },
                      "hdfs": {
                        "description": "HDFS contains HDFS artifact location details",
                        "properties": {
                          "addresses": {
                            "description": "Addresses is accessible addresses of HDFS name nodes",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "dataTransferProtection": {
                            "description": "DataTransferProtection is the protection level for HDFS data transfer.\nIt corresponds to the dfs.data.transfer.protection configuration in HDFS.",
                            "type": "string"
                          },
                          "force": {
                            "description": "Force copies a file forcibly even if it exists",
                            "type": "boolean"
                          },
                          "hdfsUser": {
                            "description": "HDFSUser is the user to access HDFS file system.\nIt is ignored if either ccache or keytab is used.",
                            "type": "string"
                          },
                          "krbCCacheSecret": {
                            "description": "KrbCCacheSecret is the secret selector for Kerberos ccache\nEither ccache or keytab can be set to use Kerberos.",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "krbConfigConfigMap": {
                            "description": "KrbConfig is the configmap selector for Kerberos config as string\nIt must be set if either ccache or keytab is used.",
                            "properties": {
                              "key": {
                                "description": "The key to select.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the ConfigMap or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "krbKeytabSecret": {
                            "description": "KrbKeytabSecret is the secret selector for Kerberos keytab\nEither ccache or keytab can be set to use Kerberos.",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "krbRealm": {
                            "description": "KrbRealm is the Kerberos realm used with Kerberos keytab\nIt must be set if keytab is used.",
                            "type": "string"
                          },
                          "krbServicePrincipalName": {
                            "description": "KrbServicePrincipalName is the principal name of Kerberos service\nIt must be set if either ccache or keytab is used.",
                            "type": "string"
                          },
                          "krbUsername": {
                            "description": "KrbUsername is the Kerberos username used with Kerberos keytab\nIt must be set if keytab is used.",
                            "type": "string"
                          },
                          "path": {
                            "description": "Path is a file path in HDFS",
                            "type": "string"
                          }
                        },
                        "required": [
                          "path"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "http": {
                        "description": "HTTP contains HTTP artifact location details",
                        "properties": {
                          "auth": {
                            "description": "Auth contains information for client authentication",
                            "properties": {
                              "basicAuth": {
                                "description": "BasicAuth describes the secret selectors required for basic authentication",
                                "properties": {
                                  "passwordSecret": {
                                    "description": "PasswordSecret is the secret selector to the repository password",
                                    "properties": {
                                      "key": {
                                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "default": "",
                                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                        "type": "string"
                                      },
                                      "optional": {
                                        "description": "Specify whether the Secret or its key must be defined",
                                        "type": "boolean"
                                      }
                                    },
                                    "required": [
                                      "key"
                                    ],
                                    "type": "object",
                                    "x-kubernetes-map-type": "atomic",
                                    "additionalProperties": false
                                  },
                                  "usernameSecret": {
                                    "description": "UsernameSecret is the secret selector to the repository username",
                                    "properties": {
                                      "key": {
                                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "default": "",
                                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                        "type": "string"
                                      },
                                      "optional": {
                                        "description": "Specify whether the Secret or its key must be defined",
                                        "type": "boolean"
                                      }
                                    },
                                    "required": [
                                      "key"
                                    ],
                                    "type": "object",
                                    "x-kubernetes-map-type": "atomic",
                                    "additionalProperties": false
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "clientCert": {
                                "description": "ClientCertAuth holds necessary information for client authentication via certificates",
                                "properties": {
                                  "clientCertSecret": {
                                    "description": "SecretKeySelector selects a key of a Secret.",
                                    "properties": {
                                      "key": {
                                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "default": "",
                                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                        "type": "string"
                                      },
                                      "optional": {
                                        "description": "Specify whether the Secret or its key must be defined",
                                        "type": "boolean"
                                      }
                                    },
                                    "required": [
                                      "key"
                                    ],
                                    "type": "object",
                                    "x-kubernetes-map-type": "atomic",
                                    "additionalProperties": false
                                  },
                                  "clientKeySecret": {
                                    "description": "SecretKeySelector selects a key of a Secret.",
                                    "properties": {
                                      "key": {
                                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "default": "",
                                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                        "type": "string"
                                      },
                                      "optional": {
                                        "description": "Specify whether the Secret or its key must be defined",
                                        "type": "boolean"
                                      }
                                    },
                                    "required": [
                                      "key"
                                    ],
                                    "type": "object",
                                    "x-kubernetes-map-type": "atomic",
                                    "additionalProperties": false
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "oauth2": {
                                "description": "OAuth2Auth holds all information for client authentication via OAuth2 tokens",
                                "properties": {
                                  "clientIDSecret": {
                                    "description": "SecretKeySelector selects a key of a Secret.",
                                    "properties": {
                                      "key": {
                                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "default": "",
                                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                        "type": "string"
                                      },
                                      "optional": {
                                        "description": "Specify whether the Secret or its key must be defined",
                                        "type": "boolean"
                                      }
                                    },
                                    "required": [
                                      "key"
                                    ],
                                    "type": "object",
                                    "x-kubernetes-map-type": "atomic",
                                    "additionalProperties": false
                                  },
                                  "clientSecretSecret": {
                                    "description": "SecretKeySelector selects a key of a Secret.",
                                    "properties": {
                                      "key": {
                                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "default": "",
                                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                        "type": "string"
                                      },
                                      "optional": {
                                        "description": "Specify whether the Secret or its key must be defined",
                                        "type": "boolean"
                                      }
                                    },
                                    "required": [
                                      "key"
                                    ],
                                    "type": "object",
                                    "x-kubernetes-map-type": "atomic",
                                    "additionalProperties": false
                                  },
                                  "endpointParams": {
                                    "items": {
                                      "description": "EndpointParam is for requesting optional fields that should be sent in the oauth request",
                                      "properties": {
                                        "key": {
                                          "description": "Name is the header name",
                                          "type": "string"
                                        },
                                        "value": {
                                          "description": "Value is the literal value to use for the header",
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "key"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array"
                                  },
                                  "scopes": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "tokenURLSecret": {
                                    "description": "SecretKeySelector selects a key of a Secret.",
                                    "properties": {
                                      "key": {
                                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "default": "",
                                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                        "type": "string"
                                      },
                                      "optional": {
                                        "description": "Specify whether the Secret or its key must be defined",
                                        "type": "boolean"
                                      }
                                    },
                                    "required": [
                                      "key"
                                    ],
                                    "type": "object",
                                    "x-kubernetes-map-type": "atomic",
                                    "additionalProperties": false
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "headers": {
                            "description": "Headers are an optional list of headers to send with HTTP requests for artifacts",
                            "items": {
                              "description": "Header indicate a key-value request header to be used when fetching artifacts over HTTP",
                              "properties": {
                                "name": {
                                  "description": "Name is the header name",
                                  "type": "string"
                                },
                                "value": {
                                  "description": "Value is the literal value to use for the header",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "name",
                                "value"
                              ],
                              "type": "object",
                              "additionalProperties": false
                            },
                            "type": "array"
                          },
                          "url": {
                            "description": "URL of the artifact",
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "mode": {
                        "description": "mode bits to use on this file, must be a value between 0 and 0777.\nSet when loading input artifacts. It is recommended to set the mode value\nto ensure the artifact has the expected permissions in your container.",
                        "format": "int32",
                        "maximum": 511,
                        "minimum": 0,
                        "type": "integer"
                      },
                      "name": {
                        "description": "name of the artifact. must be unique within a template's inputs/outputs.",
                        "pattern": "^[-a-zA-Z0-9_{}.]+$",
                        "type": "string"
                      },
                      "optional": {
                        "description": "Make Artifacts optional, if Artifacts doesn't generate or exist",
                        "type": "boolean"
                      },
                      "oss": {
                        "description": "OSS contains OSS artifact location details",
                        "properties": {
                          "accessKeySecret": {
                            "description": "AccessKeySecret is the secret selector to the bucket's access key",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "bucket": {
                            "description": "Bucket is the name of the bucket",
                            "type": "string"
                          },
                          "createBucketIfNotPresent": {
                            "description": "CreateBucketIfNotPresent tells the driver to attempt to create the OSS bucket for output artifacts, if it doesn't exist",
                            "type": "boolean"
                          },
                          "endpoint": {
                            "description": "Endpoint is the hostname of the bucket endpoint",
                            "type": "string"
                          },
                          "key": {
                            "description": "Key is the path in the bucket where the artifact resides",
                            "type": "string"
                          },
                          "lifecycleRule": {
                            "description": "LifecycleRule specifies how to manage bucket's lifecycle",
                            "properties": {
                              "markDeletionAfterDays": {
                                "description": "MarkDeletionAfterDays is the number of days before we delete objects in the bucket",
                                "format": "int32",
                                "type": "integer"
                              },
                              "markInfrequentAccessAfterDays": {
                                "description": "MarkInfrequentAccessAfterDays is the number of days before we convert the objects in the bucket to Infrequent Access (IA) storage type",
                                "format": "int32",
                                "type": "integer"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "secretKeySecret": {
                            "description": "SecretKeySecret is the secret selector to the bucket's secret key",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "securityToken": {
                            "description": "SecurityToken is the user's temporary security token. For more details, check out: https://www.alibabacloud.com/help/doc-detail/100624.htm",
                            "type": "string"
                          },
                          "useSDKCreds": {
                            "description": "UseSDKCreds tells the driver to figure out credentials based on sdk defaults.",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "key"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "path": {
                        "description": "Path is the container path to the artifact",
                        "type": "string"
                      },
                      "plugin": {
                        "description": "Plugin contains plugin artifact location details",
                        "properties": {
                          "configuration": {
                            "description": "Configuration is the plugin defined configuration for the artifact driver plugin",
                            "type": "string"
                          },
                          "connectionTimeoutSeconds": {
                            "description": "ConnectionTimeoutSeconds is the timeout for the artifact driver connection, overriding the driver's timeout",
                            "format": "int32",
                            "type": "integer"
                          },
                          "key": {
                            "description": "Key is the path in the artifact repository where the artifact resides",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name is the name of the artifact driver plugin",
                            "type": "string"
                          }
                        },
                        "required": [
                          "key"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "raw": {
                        "description": "Raw contains raw artifact location details",
                        "properties": {
                          "data": {
                            "description": "Data is the string contents of the artifact",
                            "type": "string"
                          }
                        },
                        "required": [
                          "data"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "recurseMode": {
                        "description": "If mode is set, apply the permission recursively into the artifact if it is a folder",
                        "type": "boolean"
                      },
                      "s3": {
                        "description": "S3 contains S3 artifact location details",
                        "properties": {
                          "accessKeySecret": {
                            "description": "AccessKeySecret is the secret selector to the bucket's access key",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "bucket": {
                            "description": "Bucket is the name of the bucket",
                            "type": "string"
                          },
                          "caSecret": {
                            "description": "CASecret specifies the secret that contains the CA, used to verify the TLS connection",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "createBucketIfNotPresent": {
                            "description": "CreateBucketIfNotPresent tells the driver to attempt to create the S3 bucket for output artifacts, if it doesn't exist. Setting Enabled Encryption will apply either SSE-S3 to the bucket if KmsKeyId is not set or SSE-KMS if it is.",
                            "properties": {
                              "objectLocking": {
                                "description": "ObjectLocking Enable object locking",
                                "type": "boolean"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "encryptionOptions": {
                            "description": "S3EncryptionOptions used to determine encryption options during s3 operations",
                            "properties": {
                              "enableEncryption": {
                                "description": "EnableEncryption tells the driver to encrypt objects if set to true. If kmsKeyId and serverSideCustomerKeySecret are not set, SSE-S3 will be used",
                                "type": "boolean"
                              },
                              "kmsEncryptionContext": {
                                "description": "KmsEncryptionContext is a json blob that contains an encryption context. See https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context for more information",
                                "type": "string"
                              },
                              "kmsKeyId": {
                                "description": "KMSKeyId tells the driver to encrypt the object using the specified KMS Key.",
                                "type": "string"
                              },
                              "serverSideCustomerKeySecret": {
                                "description": "ServerSideCustomerKeySecret tells the driver to encrypt the output artifacts using SSE-C with the specified secret.",
                                "properties": {
                                  "key": {
                                    "description": "The key of the secret to select from.  Must be a valid secret key.",
                                    "type": "string"
                                  },
                                  "name": {
                                    "default": "",
                                    "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                    "type": "string"
                                  },
                                  "optional": {
                                    "description": "Specify whether the Secret or its key must be defined",
                                    "type": "boolean"
                                  }
                                },
                                "required": [
                                  "key"
                                ],
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "endpoint": {
                            "description": "Endpoint is the hostname of the bucket endpoint",
                            "type": "string"
                          },
                          "insecure": {
                            "description": "Insecure will connect to the service with TLS",
                            "type": "boolean"
                          },
                          "key": {
                            "description": "Key is the key in the bucket where the artifact resides",
                            "type": "string"
                          },
                          "region": {
                            "description": "Region contains the optional bucket region",
                            "type": "string"
                          },
                          "roleARN": {
                            "description": "RoleARN is the Amazon Resource Name (ARN) of the role to assume.",
                            "type": "string"
                          },
                          "secretKeySecret": {
                            "description": "SecretKeySecret is the secret selector to the bucket's secret key",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "sessionTokenSecret": {
                            "description": "SessionTokenSecret is used for ephemeral credentials like an IAM assume role or S3 access grant",
                            "properties": {
                              "key": {
                                "description": "The key of the secret to select from.  Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the Secret or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "useSDKCreds": {
                            "description": "UseSDKCreds tells the driver to figure out credentials based on sdk defaults.",
                            "type": "boolean"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "subPath": {
                        "description": "SubPath allows an artifact to be sourced from a subpath within the specified source",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "x-kubernetes-validations": [
                      {
                        "message": "at most one artifact location can be specified",
                        "rule": "(has(self.s3) ? 1 : 0) + (has(self.git) ? 1 : 0) + (has(self.http) ? 1 : 0) + (has(self.artifactory) ? 1 : 0) + (has(self.hdfs) ? 1 : 0) + (has(self.raw) ? 1 : 0) + (has(self.oss) ? 1 : 0) + (has(self.gcs) ? 1 : 0) + (has(self.azure) ? 1 : 0) + (has(self.plugin) ? 1 : 0) <= 1"
                      }
                    ],
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "parameters": {
                  "description": "Parameters is the list of parameters to pass to the template or workflow",
                  "items": {
                    "description": "Parameter indicate a passed string parameter to a service template with an optional default value",
                    "properties": {
                      "default": {
                        "description": "Default is the default value to use for an input parameter if a value was not supplied",
                        "type": "string"
                      },
                      "description": {
                        "description": "Description is the parameter description",
                        "type": "string"
                      },
                      "enum": {
                        "description": "Enum holds a list of string values to choose from, for the actual value of the parameter",
                        "items": {
                          "description": "* It's JSON type is just string.\n* It will unmarshall int64, int32, float64, float32, boolean, a plain string and represents it as string.\n* It will marshall back to string - marshalling is not symmetric.",
                          "type": "string"
                        },
                        "minItems": 1,
                        "type": "array"
                      },
                      "globalName": {
                        "description": "GlobalName exports an output parameter to the global scope, making it available as\n'{{workflow.outputs.parameters.XXXX}} and in workflow.status.outputs.parameters",
                        "type": "string"
                      },
                      "name": {
                        "description": "Name is the parameter name",
                        "pattern": "^[-a-zA-Z0-9_]+$",
                        "type": "string"
                      },
                      "value": {
                        "description": "Value is the literal value to use for the parameter.\nIf specified in the context of an input parameter, any passed values take precedence over the specified value",
                        "type": "string"
                      },
                      "valueFrom": {
                        "description": "ValueFrom is the source for the output parameter's value",
                        "properties": {
                          "configMapKeyRef": {
                            "description": "ConfigMapKeyRef is configmap selector for input parameter configuration",
                            "properties": {
                              "key": {
                                "description": "The key to select.",
                                "type": "string"
                              },
                              "name": {
                                "default": "",
                                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                                "type": "string"
                              },
                              "optional": {
                                "description": "Specify whether the ConfigMap or its key must be defined",
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "key"
                            ],
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "default": {
                            "description": "Default specifies a value to be used if retrieving the value from the specified source fails",
                            "type": "string"
                          },
                          "event": {
                            "description": "Selector (https://github.com/expr-lang/expr) that is evaluated against the event to get the value of the parameter. E.g. `payload.message`",
                            "type": "string"
                          },
                          "expression": {
                            "description": "Expression, if defined, is evaluated to specify the value for the parameter",
                            "type": "string"
                          },
                          "jqFilter": {
                            "description": "JQFilter expression against the resource object in resource templates",
                            "type": "string"
                          },
                          "jsonPath": {
                            "description": "JSONPath of a resource to retrieve an output parameter value from in resource templates",
                            "type": "string"
                          },
                          "parameter": {
                            "description": "Parameter reference to a step or dag task in which to retrieve an output parameter value from\n(e.g. '{{steps.mystep.outputs.myparam}}')",
                            "type": "string"
                          },
                          "path": {
                            "description": "Path in the container to retrieve an output parameter value from in container templates",
                            "type": "string"
                          },
                          "supplied": {
                            "description": "Supplied value to be filled in directly, either through the CLI, API, etc.",
                            "type": "object"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "metadata": {
              "description": "Metadata optional means to customize select fields of the workflow metadata",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object"
                },
                "finalizers": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "generateName": {
                  "type": "string"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": "object"
                },
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "workflowTemplateRef": {
              "description": "WorkflowTemplateRef the workflow template to submit",
              "properties": {
                "clusterScope": {
                  "description": "ClusterScope indicates the referred template is cluster scoped (i.e. a ClusterWorkflowTemplate).",
                  "type": "boolean"
                },
                "name": {
                  "description": "Name is the resource name of the workflow template.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "workflowTemplateRef"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "event"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "metadata",
    "spec"
  ],
  "type": "object"
}
