{
  "description": "WorkflowTaskResult is a used to communicate a result back to the controller. Unlike WorkflowTaskSet, it has\nmore capacity. This is an internal type. Users should never create this resource directly, much like you would\nnever create a ReplicaSet directly.",
  "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"
    },
    "message": {
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "outputs": {
      "description": "Outputs hold parameters, artifacts, and results from a step",
      "properties": {
        "artifacts": {
          "description": "Artifacts holds the list of output artifacts produced by a step",
          "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"
        },
        "exitCode": {
          "description": "ExitCode holds the exit code of a script template",
          "type": "string"
        },
        "parameters": {
          "description": "Parameters holds the list of output parameters produced by a step",
          "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"
        },
        "result": {
          "description": "Result holds the result (stdout) of a script or container template, or the response body of an HTTP template",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "phase": {
      "description": "NodePhase is a label for the condition of a node at the current time.",
      "type": "string"
    },
    "progress": {
      "description": "Progress in N/M format. N is number of task complete. M is number of tasks.",
      "type": "string"
    }
  },
  "required": [
    "metadata"
  ],
  "type": "object"
}
