a9cd7750f4
CI / detect-changes (push) Waiting to run
CI / build (push) Waiting to run
UI v2 CI / E2E (Mocked) (push) Blocked by required conditions
UI v2 Integration CI / E2E (Integration) (push) Waiting to run
CI / unit-test (push) Blocked by required conditions
CI / test-harness (push) Waiting to run
CI / generate-e2e-matrix (push) Waiting to run
CI / e2e (push) Blocked by required conditions
CI / build-ui (push) Waiting to run
Publish docs via GitHub Pages / Deploy docs (push) Waiting to run
Release Drafter / update_release_draft (push) Waiting to run
UI v2 CI / Lint, Format & Test (push) Waiting to run
596 lines
16 KiB
JSON
596 lines
16 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://conductoross.org/schemas/WorkflowDef.json",
|
|
"title": "WorkflowDef",
|
|
"description": "Workflow definition schema",
|
|
"type": "object",
|
|
"required": ["name", "tasks"],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Unique name identifying the workflow",
|
|
"minLength": 1
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Description of the workflow"
|
|
},
|
|
"version": {
|
|
"type": "integer",
|
|
"description": "Version of the workflow definition",
|
|
"default": 1
|
|
},
|
|
"tasks": {
|
|
"type": "array",
|
|
"description": "List of tasks that make up the workflow",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/definitions/WorkflowTask"
|
|
}
|
|
},
|
|
"inputParameters": {
|
|
"type": "array",
|
|
"description": "List of input parameter names",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"outputParameters": {
|
|
"type": "object",
|
|
"description": "Output parameters mapping",
|
|
"additionalProperties": true,
|
|
"default": {}
|
|
},
|
|
"failureWorkflow": {
|
|
"type": "string",
|
|
"description": "Name of workflow to execute on failure"
|
|
},
|
|
"schemaVersion": {
|
|
"type": "integer",
|
|
"description": "Schema version",
|
|
"minimum": 2,
|
|
"maximum": 2,
|
|
"default": 2
|
|
},
|
|
"restartable": {
|
|
"type": "boolean",
|
|
"description": "Whether the workflow can be restarted",
|
|
"default": true
|
|
},
|
|
"workflowStatusListenerEnabled": {
|
|
"type": "boolean",
|
|
"description": "Whether workflow status listener is enabled",
|
|
"default": false
|
|
},
|
|
"ownerEmail": {
|
|
"type": "string",
|
|
"description": "Email of the workflow owner",
|
|
"format": "email"
|
|
},
|
|
"timeoutPolicy": {
|
|
"type": "string",
|
|
"description": "Timeout policy for the workflow",
|
|
"enum": ["TIME_OUT_WF", "ALERT_ONLY"],
|
|
"default": "ALERT_ONLY"
|
|
},
|
|
"timeoutSeconds": {
|
|
"type": "integer",
|
|
"description": "Timeout in seconds after which workflow is deemed timed out",
|
|
"minimum": 0
|
|
},
|
|
"variables": {
|
|
"type": "object",
|
|
"description": "Global workflow variables",
|
|
"additionalProperties": true,
|
|
"default": {}
|
|
},
|
|
"inputTemplate": {
|
|
"type": "object",
|
|
"description": "Template for input parameters",
|
|
"additionalProperties": true,
|
|
"default": {}
|
|
},
|
|
"workflowStatusListenerSink": {
|
|
"type": "string",
|
|
"description": "Sink for workflow status events"
|
|
},
|
|
"rateLimitConfig": {
|
|
"$ref": "#/definitions/RateLimitConfig"
|
|
},
|
|
"inputSchema": {
|
|
"$ref": "#/definitions/SchemaDef"
|
|
},
|
|
"outputSchema": {
|
|
"$ref": "#/definitions/SchemaDef"
|
|
},
|
|
"enforceSchema": {
|
|
"type": "boolean",
|
|
"description": "Whether to enforce schema validation",
|
|
"default": true
|
|
},
|
|
"metadata": {
|
|
"type": "object",
|
|
"description": "Additional metadata",
|
|
"additionalProperties": true,
|
|
"default": {}
|
|
},
|
|
"cacheConfig": {
|
|
"$ref": "#/definitions/CacheConfig"
|
|
},
|
|
"maskedFields": {
|
|
"type": "array",
|
|
"description": "List of fields to mask in logs",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"ownerApp": {
|
|
"type": "string",
|
|
"description": "Owner application"
|
|
},
|
|
"createTime": {
|
|
"type": "integer",
|
|
"description": "Creation timestamp in milliseconds",
|
|
"format": "int64"
|
|
},
|
|
"updateTime": {
|
|
"type": "integer",
|
|
"description": "Last update timestamp in milliseconds",
|
|
"format": "int64"
|
|
},
|
|
"createdBy": {
|
|
"type": "string",
|
|
"description": "User who created this workflow definition"
|
|
},
|
|
"updatedBy": {
|
|
"type": "string",
|
|
"description": "User who last updated this workflow definition"
|
|
}
|
|
},
|
|
"definitions": {
|
|
"WorkflowTask": {
|
|
"type": "object",
|
|
"required": ["name", "taskReferenceName"],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Task name",
|
|
"minLength": 1
|
|
},
|
|
"taskReferenceName": {
|
|
"type": "string",
|
|
"description": "Unique reference name for this task within the workflow",
|
|
"minLength": 1
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Task description"
|
|
},
|
|
"inputParameters": {
|
|
"type": "object",
|
|
"description": "Input parameters for the task",
|
|
"additionalProperties": true,
|
|
"default": {}
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Task type",
|
|
"default": "SIMPLE"
|
|
},
|
|
"dynamicTaskNameParam": {
|
|
"type": "string",
|
|
"description": "Parameter name for dynamic task name"
|
|
},
|
|
"caseValueParam": {
|
|
"type": "string",
|
|
"description": "Case value parameter (deprecated)",
|
|
"deprecated": true
|
|
},
|
|
"caseExpression": {
|
|
"type": "string",
|
|
"description": "Case expression (deprecated)",
|
|
"deprecated": true
|
|
},
|
|
"scriptExpression": {
|
|
"type": "string",
|
|
"description": "Script expression for script tasks"
|
|
},
|
|
"decisionCases": {
|
|
"type": "object",
|
|
"description": "Decision cases for SWITCH/DECISION tasks",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/WorkflowTask"
|
|
}
|
|
},
|
|
"default": {}
|
|
},
|
|
"dynamicForkTasksParam": {
|
|
"type": "string",
|
|
"description": "Parameter name for dynamic fork tasks"
|
|
},
|
|
"dynamicForkTasksInputParamName": {
|
|
"type": "string",
|
|
"description": "Input parameter name for dynamic fork tasks"
|
|
},
|
|
"defaultCase": {
|
|
"type": "array",
|
|
"description": "Default case tasks for SWITCH/DECISION",
|
|
"items": {
|
|
"$ref": "#/definitions/WorkflowTask"
|
|
},
|
|
"default": []
|
|
},
|
|
"forkTasks": {
|
|
"type": "array",
|
|
"description": "Fork tasks for FORK_JOIN",
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/WorkflowTask"
|
|
}
|
|
},
|
|
"default": []
|
|
},
|
|
"startDelay": {
|
|
"type": "integer",
|
|
"description": "Start delay in seconds",
|
|
"minimum": 0,
|
|
"default": 0
|
|
},
|
|
"subWorkflowParam": {
|
|
"$ref": "#/definitions/SubWorkflowParams"
|
|
},
|
|
"joinOn": {
|
|
"type": "array",
|
|
"description": "List of task reference names to join on",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"sink": {
|
|
"type": "string",
|
|
"description": "Sink for EVENT tasks"
|
|
},
|
|
"optional": {
|
|
"type": "boolean",
|
|
"description": "Whether the task is optional",
|
|
"default": false
|
|
},
|
|
"taskDefinition": {
|
|
"$ref": "#/definitions/TaskDef"
|
|
},
|
|
"rateLimited": {
|
|
"type": "boolean",
|
|
"description": "Whether the task is rate limited"
|
|
},
|
|
"defaultExclusiveJoinTask": {
|
|
"type": "array",
|
|
"description": "Default tasks for exclusive join",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"asyncComplete": {
|
|
"type": "boolean",
|
|
"description": "Whether to wait for async completion",
|
|
"default": false
|
|
},
|
|
"loopCondition": {
|
|
"type": "string",
|
|
"description": "Loop condition for DO_WHILE tasks"
|
|
},
|
|
"loopOver": {
|
|
"type": "array",
|
|
"description": "Tasks to loop over in DO_WHILE",
|
|
"items": {
|
|
"$ref": "#/definitions/WorkflowTask"
|
|
},
|
|
"default": []
|
|
},
|
|
"retryCount": {
|
|
"type": "integer",
|
|
"description": "Number of retries for this task",
|
|
"minimum": 0
|
|
},
|
|
"evaluatorType": {
|
|
"type": "string",
|
|
"description": "Evaluator type for expressions"
|
|
},
|
|
"expression": {
|
|
"type": "string",
|
|
"description": "Expression to evaluate"
|
|
},
|
|
"onStateChange": {
|
|
"type": "object",
|
|
"description": "Events to emit on state change",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/StateChangeEvent"
|
|
}
|
|
},
|
|
"default": {}
|
|
},
|
|
"joinStatus": {
|
|
"type": "string",
|
|
"description": "Join status criteria"
|
|
},
|
|
"cacheConfig": {
|
|
"$ref": "#/definitions/CacheConfig"
|
|
},
|
|
"permissive": {
|
|
"type": "boolean",
|
|
"description": "Whether the task is permissive",
|
|
"default": false
|
|
}
|
|
}
|
|
},
|
|
"TaskDef": {
|
|
"type": "object",
|
|
"required": ["name"],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Unique task name",
|
|
"minLength": 1
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Task description"
|
|
},
|
|
"retryCount": {
|
|
"type": "integer",
|
|
"description": "Number of retries",
|
|
"minimum": 0,
|
|
"default": 3
|
|
},
|
|
"timeoutSeconds": {
|
|
"type": "integer",
|
|
"description": "Task timeout in seconds",
|
|
"minimum": 0
|
|
},
|
|
"inputKeys": {
|
|
"type": "array",
|
|
"description": "Expected input keys",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"outputKeys": {
|
|
"type": "array",
|
|
"description": "Expected output keys",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
},
|
|
"timeoutPolicy": {
|
|
"type": "string",
|
|
"description": "Timeout policy",
|
|
"enum": ["RETRY", "TIME_OUT_WF", "ALERT_ONLY"],
|
|
"default": "TIME_OUT_WF"
|
|
},
|
|
"retryLogic": {
|
|
"type": "string",
|
|
"description": "Retry logic",
|
|
"enum": ["FIXED", "EXPONENTIAL_BACKOFF", "LINEAR_BACKOFF"],
|
|
"default": "FIXED"
|
|
},
|
|
"retryDelaySeconds": {
|
|
"type": "integer",
|
|
"description": "Retry delay in seconds",
|
|
"default": 60
|
|
},
|
|
"responseTimeoutSeconds": {
|
|
"type": "integer",
|
|
"description": "Response timeout in seconds",
|
|
"minimum": 1,
|
|
"default": 3600
|
|
},
|
|
"concurrentExecLimit": {
|
|
"type": "integer",
|
|
"description": "Concurrent execution limit"
|
|
},
|
|
"inputTemplate": {
|
|
"type": "object",
|
|
"description": "Input template",
|
|
"additionalProperties": true,
|
|
"default": {}
|
|
},
|
|
"rateLimitPerFrequency": {
|
|
"type": "integer",
|
|
"description": "Rate limit per frequency"
|
|
},
|
|
"rateLimitFrequencyInSeconds": {
|
|
"type": "integer",
|
|
"description": "Rate limit frequency in seconds"
|
|
},
|
|
"isolationGroupId": {
|
|
"type": "string",
|
|
"description": "Isolation group ID"
|
|
},
|
|
"executionNameSpace": {
|
|
"type": "string",
|
|
"description": "Execution namespace"
|
|
},
|
|
"ownerEmail": {
|
|
"type": "string",
|
|
"description": "Owner email",
|
|
"format": "email"
|
|
},
|
|
"pollTimeoutSeconds": {
|
|
"type": "integer",
|
|
"description": "Poll timeout in seconds",
|
|
"minimum": 0
|
|
},
|
|
"backoffScaleFactor": {
|
|
"type": "integer",
|
|
"description": "Backoff scale factor for LINEAR_BACKOFF",
|
|
"minimum": 1,
|
|
"default": 1
|
|
},
|
|
"baseType": {
|
|
"type": "string",
|
|
"description": "Base task type"
|
|
},
|
|
"totalTimeoutSeconds": {
|
|
"type": "integer",
|
|
"description": "Total timeout in seconds",
|
|
"minimum": 0
|
|
},
|
|
"inputSchema": {
|
|
"$ref": "#/definitions/SchemaDef"
|
|
},
|
|
"outputSchema": {
|
|
"$ref": "#/definitions/SchemaDef"
|
|
},
|
|
"enforceSchema": {
|
|
"type": "boolean",
|
|
"description": "Whether to enforce schema validation",
|
|
"default": false
|
|
}
|
|
}
|
|
},
|
|
"SubWorkflowParams": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Sub-workflow name"
|
|
},
|
|
"version": {
|
|
"type": "integer",
|
|
"description": "Sub-workflow version"
|
|
},
|
|
"taskToDomain": {
|
|
"type": "object",
|
|
"description": "Task to domain mapping",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"workflowDefinition": {
|
|
"description": "Inline workflow definition (can be WorkflowDef object, DSL string, or Map that gets converted)",
|
|
"oneOf": [
|
|
{
|
|
"type": "object",
|
|
"description": "WorkflowDef object or LinkedHashMap"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"pattern": "^\\$\\{.*\\}$",
|
|
"description": "DSL expression string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"idempotencyKey": {
|
|
"type": "string",
|
|
"description": "Idempotency key for the sub-workflow"
|
|
},
|
|
"idempotencyStrategy": {
|
|
"type": "string",
|
|
"description": "Idempotency strategy",
|
|
"enum": ["RETURN_EXISTING", "FAIL"]
|
|
},
|
|
"priority": {
|
|
"description": "Priority of the sub-workflow (can be integer or string expression)",
|
|
"oneOf": [
|
|
{
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 99
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Expression that evaluates to priority"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"SchemaDef": {
|
|
"type": "object",
|
|
"required": ["name", "type"],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Schema name"
|
|
},
|
|
"version": {
|
|
"type": "integer",
|
|
"description": "Schema version",
|
|
"default": 1
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Schema type",
|
|
"enum": ["JSON", "AVRO", "PROTOBUF"]
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"description": "Schema definition data",
|
|
"additionalProperties": true
|
|
},
|
|
"externalRef": {
|
|
"type": "string",
|
|
"description": "External schema reference"
|
|
}
|
|
}
|
|
},
|
|
"RateLimitConfig": {
|
|
"type": "object",
|
|
"properties": {
|
|
"rateLimitKey": {
|
|
"type": "string",
|
|
"description": "Rate limit key"
|
|
},
|
|
"concurrentExecLimit": {
|
|
"type": "integer",
|
|
"description": "Concurrent execution limit (required field, primitive int)"
|
|
}
|
|
}
|
|
},
|
|
"CacheConfig": {
|
|
"type": "object",
|
|
"properties": {
|
|
"key": {
|
|
"type": "string",
|
|
"description": "Cache key"
|
|
},
|
|
"ttlInSecond": {
|
|
"type": "integer",
|
|
"description": "TTL in seconds (required field, primitive int)"
|
|
}
|
|
}
|
|
},
|
|
"StateChangeEvent": {
|
|
"type": "object",
|
|
"required": ["type"],
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Type of the state change event"
|
|
},
|
|
"payload": {
|
|
"type": "object",
|
|
"description": "Event payload containing event-specific data",
|
|
"additionalProperties": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|