Argo · Schema

Argo Workflow Spec

JSON Schema for the Argo Workflows Workflow resource specification, defining the structure of Kubernetes-native workflow definitions.

CNCFCI/CDGitOpsKubernetesOpen SourceProgressive DeliveryWorkflow Engine

Properties

Name Type Description
apiVersion string API version for Argo Workflow resources
kind string Kind of the Argo resource
metadata object
spec object
View JSON Schema on GitHub

JSON Schema

argo-workflow-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/argo/main/workflow-schema.json",
  "title": "Argo Workflow Spec",
  "description": "JSON Schema for the Argo Workflows Workflow resource specification, defining the structure of Kubernetes-native workflow definitions.",
  "type": "object",
  "required": ["apiVersion", "kind", "metadata", "spec"],
  "properties": {
    "apiVersion": {
      "type": "string",
      "const": "argoproj.io/v1alpha1",
      "description": "API version for Argo Workflow resources"
    },
    "kind": {
      "type": "string",
      "enum": ["Workflow", "WorkflowTemplate", "CronWorkflow", "ClusterWorkflowTemplate"],
      "description": "Kind of the Argo resource"
    },
    "metadata": {
      "$ref": "#/$defs/ObjectMeta"
    },
    "spec": {
      "$ref": "#/$defs/WorkflowSpec"
    }
  },
  "$defs": {
    "ObjectMeta": {
      "type": "object",
      "description": "Kubernetes object metadata",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the workflow"
        },
        "generateName": {
          "type": "string",
          "description": "Prefix for auto-generated workflow names"
        },
        "namespace": {
          "type": "string",
          "description": "Kubernetes namespace for the workflow"
        },
        "labels": {
          "type": "object",
          "additionalProperties": { "type": "string" },
          "description": "Labels to apply to the workflow"
        },
        "annotations": {
          "type": "object",
          "additionalProperties": { "type": "string" },
          "description": "Annotations to apply to the workflow"
        }
      }
    },
    "WorkflowSpec": {
      "type": "object",
      "description": "Specification of a workflow",
      "required": ["entrypoint", "templates"],
      "properties": {
        "entrypoint": {
          "type": "string",
          "description": "Name of the template used as the entry point"
        },
        "arguments": {
          "$ref": "#/$defs/Arguments"
        },
        "templates": {
          "type": "array",
          "description": "List of template definitions for the workflow",
          "items": {
            "$ref": "#/$defs/Template"
          },
          "minItems": 1
        },
        "serviceAccountName": {
          "type": "string",
          "description": "Service account to run workflow pods under"
        },
        "volumes": {
          "type": "array",
          "description": "Volumes available to all workflow steps",
          "items": {
            "$ref": "#/$defs/Volume"
          }
        },
        "activeDeadlineSeconds": {
          "type": "integer",
          "minimum": 0,
          "description": "Maximum duration of the workflow in seconds"
        },
        "nodeSelector": {
          "type": "object",
          "additionalProperties": { "type": "string" },
          "description": "Node selector constraints for workflow pods"
        },
        "tolerations": {
          "type": "array",
          "items": { "type": "object" },
          "description": "Tolerations for workflow pods"
        },
        "parallelism": {
          "type": "integer",
          "minimum": 0,
          "description": "Maximum number of steps running in parallel"
        },
        "ttlStrategy": {
          "$ref": "#/$defs/TTLStrategy"
        },
        "podGC": {
          "$ref": "#/$defs/PodGC"
        },
        "workflowTemplateRef": {
          "$ref": "#/$defs/WorkflowTemplateRef"
        },
        "archiveLogs": {
          "type": "boolean",
          "description": "Whether to archive workflow logs"
        },
        "onExit": {
          "type": "string",
          "description": "Template to execute when the workflow exits"
        },
        "retryStrategy": {
          "$ref": "#/$defs/RetryStrategy"
        },
        "hooks": {
          "type": "object",
          "description": "Lifecycle hooks for the workflow",
          "additionalProperties": {
            "$ref": "#/$defs/LifecycleHook"
          }
        },
        "workflowMetadata": {
          "type": "object",
          "description": "Metadata to apply to workflow pods",
          "properties": {
            "labels": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            },
            "annotations": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            }
          }
        },
        "podMetadata": {
          "type": "object",
          "description": "Default metadata for all pods in the workflow",
          "properties": {
            "labels": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            },
            "annotations": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            }
          }
        },
        "suspend": {
          "type": "boolean",
          "description": "Whether to suspend the workflow on creation"
        },
        "artifactRepositoryRef": {
          "type": "object",
          "description": "Reference to the artifact repository configuration",
          "properties": {
            "configMap": { "type": "string" },
            "key": { "type": "string" }
          }
        },
        "securityContext": {
          "type": "object",
          "description": "Pod-level security context for all workflow pods"
        },
        "imagePullSecrets": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" }
            }
          }
        },
        "dnsPolicy": {
          "type": "string",
          "enum": ["Default", "ClusterFirst", "ClusterFirstWithHostNet", "None"]
        },
        "priority": {
          "type": "integer",
          "description": "Priority of the workflow"
        }
      }
    },
    "Template": {
      "type": "object",
      "description": "A template defines a step, DAG task, or other execution unit",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the template"
        },
        "inputs": {
          "$ref": "#/$defs/Inputs"
        },
        "outputs": {
          "$ref": "#/$defs/Outputs"
        },
        "container": {
          "$ref": "#/$defs/Container"
        },
        "script": {
          "$ref": "#/$defs/Script"
        },
        "resource": {
          "$ref": "#/$defs/Resource"
        },
        "dag": {
          "$ref": "#/$defs/DAG"
        },
        "steps": {
          "type": "array",
          "description": "List of step groups executed sequentially",
          "items": {
            "type": "array",
            "description": "Steps within a group executed in parallel",
            "items": {
              "$ref": "#/$defs/WorkflowStep"
            }
          }
        },
        "suspend": {
          "type": "object",
          "description": "Suspend template pauses workflow until resumed",
          "properties": {
            "duration": {
              "type": "string",
              "description": "Duration to wait before auto-resuming"
            }
          }
        },
        "activeDeadlineSeconds": {
          "type": "integer",
          "minimum": 0,
          "description": "Maximum duration for this template in seconds"
        },
        "retryStrategy": {
          "$ref": "#/$defs/RetryStrategy"
        },
        "nodeSelector": {
          "type": "object",
          "additionalProperties": { "type": "string" }
        },
        "tolerations": {
          "type": "array",
          "items": { "type": "object" }
        },
        "metadata": {
          "type": "object",
          "properties": {
            "labels": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            },
            "annotations": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            }
          }
        },
        "initContainers": {
          "type": "array",
          "description": "Init containers for the template pod",
          "items": { "type": "object" }
        },
        "sidecars": {
          "type": "array",
          "description": "Sidecar containers for the template pod",
          "items": { "type": "object" }
        },
        "volumes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Volume"
          }
        },
        "serviceAccountName": {
          "type": "string"
        },
        "securityContext": {
          "type": "object"
        },
        "timeout": {
          "type": "string",
          "description": "Timeout duration for the template"
        }
      }
    },
    "Container": {
      "type": "object",
      "description": "Container to run for a step",
      "required": ["image"],
      "properties": {
        "image": {
          "type": "string",
          "description": "Container image to use"
        },
        "command": {
          "type": "array",
          "items": { "type": "string" },
          "description": "Command to run in the container"
        },
        "args": {
          "type": "array",
          "items": { "type": "string" },
          "description": "Arguments to the command"
        },
        "env": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EnvVar"
          }
        },
        "envFrom": {
          "type": "array",
          "items": { "type": "object" }
        },
        "resources": {
          "$ref": "#/$defs/Resources"
        },
        "volumeMounts": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/VolumeMount"
          }
        },
        "workingDir": {
          "type": "string"
        },
        "imagePullPolicy": {
          "type": "string",
          "enum": ["Always", "Never", "IfNotPresent"]
        },
        "securityContext": {
          "type": "object"
        }
      }
    },
    "Script": {
      "type": "object",
      "description": "Script template runs inline code in a container",
      "required": ["image", "source"],
      "properties": {
        "image": {
          "type": "string"
        },
        "command": {
          "type": "array",
          "items": { "type": "string" }
        },
        "source": {
          "type": "string",
          "description": "Inline script source code"
        },
        "env": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EnvVar"
          }
        },
        "resources": {
          "$ref": "#/$defs/Resources"
        },
        "volumeMounts": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/VolumeMount"
          }
        }
      }
    },
    "Resource": {
      "type": "object",
      "description": "Resource template creates/patches/deletes Kubernetes resources",
      "required": ["action"],
      "properties": {
        "action": {
          "type": "string",
          "enum": ["get", "create", "apply", "delete", "replace", "patch"]
        },
        "manifest": {
          "type": "string",
          "description": "Kubernetes manifest YAML"
        },
        "setOwnerReference": {
          "type": "boolean"
        },
        "successCondition": {
          "type": "string",
          "description": "JSON path condition for success"
        },
        "failureCondition": {
          "type": "string",
          "description": "JSON path condition for failure"
        }
      }
    },
    "DAG": {
      "type": "object",
      "description": "DAG template definition",
      "required": ["tasks"],
      "properties": {
        "tasks": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/DAGTask"
          }
        },
        "failFast": {
          "type": "boolean",
          "description": "Whether to fail the DAG immediately on first task failure"
        },
        "target": {
          "type": "string",
          "description": "Target task to execute (for sub-DAGs)"
        }
      }
    },
    "DAGTask": {
      "type": "object",
      "description": "A task within a DAG",
      "required": ["name", "template"],
      "properties": {
        "name": {
          "type": "string"
        },
        "template": {
          "type": "string"
        },
        "arguments": {
          "$ref": "#/$defs/Arguments"
        },
        "dependencies": {
          "type": "array",
          "items": { "type": "string" },
          "description": "Tasks that must complete before this task runs"
        },
        "when": {
          "type": "string",
          "description": "Conditional expression for task execution"
        },
        "withItems": {
          "type": "array",
          "description": "List of items to fan out over"
        },
        "withParam": {
          "type": "string",
          "description": "JSON list to fan out over"
        },
        "withSequence": {
          "type": "object",
          "properties": {
            "count": { "type": "string" },
            "start": { "type": "string" },
            "end": { "type": "string" },
            "format": { "type": "string" }
          }
        },
        "continueOn": {
          "type": "object",
          "properties": {
            "error": { "type": "boolean" },
            "failed": { "type": "boolean" }
          }
        },
        "onExit": {
          "type": "string"
        },
        "hooks": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/LifecycleHook"
          }
        }
      }
    },
    "WorkflowStep": {
      "type": "object",
      "description": "A step within a steps template",
      "required": ["name", "template"],
      "properties": {
        "name": { "type": "string" },
        "template": { "type": "string" },
        "arguments": {
          "$ref": "#/$defs/Arguments"
        },
        "when": { "type": "string" },
        "withItems": { "type": "array" },
        "withParam": { "type": "string" },
        "continueOn": {
          "type": "object",
          "properties": {
            "error": { "type": "boolean" },
            "failed": { "type": "boolean" }
          }
        }
      }
    },
    "Arguments": {
      "type": "object",
      "description": "Arguments to pass to templates",
      "properties": {
        "parameters": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Parameter"
          }
        },
        "artifacts": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Artifact"
          }
        }
      }
    },
    "Parameter": {
      "type": "object",
      "description": "A named parameter",
      "required": ["name"],
      "properties": {
        "name": { "type": "string" },
        "value": { "type": "string" },
        "default": { "type": "string" },
        "description": { "type": "string" },
        "enum": {
          "type": "array",
          "items": { "type": "string" }
        },
        "globalName": { "type": "string" },
        "valueFrom": {
          "type": "object",
          "properties": {
            "path": { "type": "string" },
            "jsonPath": { "type": "string" },
            "jqFilter": { "type": "string" },
            "parameter": { "type": "string" },
            "expression": { "type": "string" },
            "configMapKeyRef": {
              "type": "object",
              "properties": {
                "name": { "type": "string" },
                "key": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "Artifact": {
      "type": "object",
      "description": "A named artifact input or output",
      "required": ["name"],
      "properties": {
        "name": { "type": "string" },
        "path": {
          "type": "string",
          "description": "Path in container where artifact is placed"
        },
        "from": { "type": "string" },
        "fromExpression": { "type": "string" },
        "optional": { "type": "boolean" },
        "s3": {
          "type": "object",
          "properties": {
            "bucket": { "type": "string" },
            "key": { "type": "string" },
            "endpoint": { "type": "string" },
            "accessKeySecret": { "type": "object" },
            "secretKeySecret": { "type": "object" }
          }
        },
        "gcs": {
          "type": "object",
          "properties": {
            "bucket": { "type": "string" },
            "key": { "type": "string" }
          }
        },
        "git": {
          "type": "object",
          "properties": {
            "repo": { "type": "string" },
            "revision": { "type": "string" },
            "depth": { "type": "integer" },
            "branch": { "type": "string" }
          }
        },
        "http": {
          "type": "object",
          "properties": {
            "url": { "type": "string" },
            "headers": { "type": "array", "items": { "type": "object" } }
          }
        },
        "archive": {
          "type": "object",
          "properties": {
            "none": { "type": "object" },
            "tar": {
              "type": "object",
              "properties": {
                "compressionLevel": { "type": "integer" }
              }
            },
            "zip": { "type": "object" }
          }
        }
      }
    },
    "Inputs": {
      "type": "object",
      "properties": {
        "parameters": {
          "type": "array",
          "items": { "$ref": "#/$defs/Parameter" }
        },
        "artifacts": {
          "type": "array",
          "items": { "$ref": "#/$defs/Artifact" }
        }
      }
    },
    "Outputs": {
      "type": "object",
      "properties": {
        "parameters": {
          "type": "array",
          "items": { "$ref": "#/$defs/Parameter" }
        },
        "artifacts": {
          "type": "array",
          "items": { "$ref": "#/$defs/Artifact" }
        },
        "result": {
          "type": "string",
          "description": "Result from a script template"
        },
        "exitCode": {
          "type": "string",
          "description": "Exit code from the template execution"
        }
      }
    },
    "RetryStrategy": {
      "type": "object",
      "description": "Strategy for retrying failed steps",
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 0,
          "description": "Maximum number of retry attempts"
        },
        "retryPolicy": {
          "type": "string",
          "enum": ["Always", "OnFailure", "OnError", "OnTransientError"]
        },
        "backoff": {
          "type": "object",
          "properties": {
            "duration": { "type": "string" },
            "factor": { "type": "integer" },
            "maxDuration": { "type": "string" }
          }
        },
        "affinity": {
          "type": "object",
          "properties": {
            "nodeAntiAffinity": { "type": "object" }
          }
        },
        "expression": {
          "type": "string",
          "description": "Expression to determine if a retry should occur"
        }
      }
    },
    "TTLStrategy": {
      "type": "object",
      "description": "Strategy for automatic cleanup of completed workflows",
      "properties": {
        "secondsAfterCompletion": {
          "type": "integer",
          "minimum": 0
        },
        "secondsAfterSuccess": {
          "type": "integer",
          "minimum": 0
        },
        "secondsAfterFailure": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "PodGC": {
      "type": "object",
      "description": "Strategy for garbage collecting completed pods",
      "properties": {
        "strategy": {
          "type": "string",
          "enum": ["OnPodCompletion", "OnPodSuccess", "OnWorkflowCompletion", "OnWorkflowSuccess"]
        },
        "labelSelector": {
          "type": "object"
        },
        "deleteDelayDuration": {
          "type": "string"
        }
      }
    },
    "WorkflowTemplateRef": {
      "type": "object",
      "description": "Reference to a WorkflowTemplate resource",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the WorkflowTemplate"
        },
        "clusterScope": {
          "type": "boolean",
          "description": "Whether to reference a ClusterWorkflowTemplate"
        }
      }
    },
    "LifecycleHook": {
      "type": "object",
      "description": "Lifecycle hook for workflow or task events",
      "properties": {
        "template": { "type": "string" },
        "arguments": { "$ref": "#/$defs/Arguments" },
        "expression": { "type": "string" }
      }
    },
    "EnvVar": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": { "type": "string" },
        "value": { "type": "string" },
        "valueFrom": {
          "type": "object",
          "properties": {
            "configMapKeyRef": {
              "type": "object",
              "properties": {
                "name": { "type": "string" },
                "key": { "type": "string" }
              }
            },
            "secretKeyRef": {
              "type": "object",
              "properties": {
                "name": { "type": "string" },
                "key": { "type": "string" }
              }
            },
            "fieldRef": {
              "type": "object",
              "properties": {
                "fieldPath": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "Resources": {
      "type": "object",
      "properties": {
        "limits": {
          "type": "object",
          "additionalProperties": { "type": "string" },
          "description": "Resource limits (cpu, memory)"
        },
        "requests": {
          "type": "object",
          "additionalProperties": { "type": "string" },
          "description": "Resource requests (cpu, memory)"
        }
      }
    },
    "Volume": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": { "type": "string" },
        "emptyDir": { "type": "object" },
        "secret": {
          "type": "object",
          "properties": {
            "secretName": { "type": "string" }
          }
        },
        "configMap": {
          "type": "object",
          "properties": {
            "name": { "type": "string" }
          }
        },
        "persistentVolumeClaim": {
          "type": "object",
          "properties": {
            "claimName": { "type": "string" }
          }
        }
      }
    },
    "VolumeMount": {
      "type": "object",
      "required": ["name", "mountPath"],
      "properties": {
        "name": { "type": "string" },
        "mountPath": { "type": "string" },
        "subPath": { "type": "string" },
        "readOnly": { "type": "boolean" }
      }
    }
  }
}