windmill-yaml-validator
Version:
YAML validator for Windmill flow, schedule, and trigger files
197 lines (196 loc) • 7.52 kB
JSON
{
"type": "object",
"properties": {
"script_path": {
"type": "string",
"description": "Path to the script or flow to execute when triggered"
},
"is_flow": {
"type": "boolean",
"description": "True if script_path points to a flow, false if it points to a script"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"default": []
},
"draft_only": {
"description": "True when this row is a per-user draft with no deployed\ntrigger at the same path. Set by list endpoints when\n`include_draft_only=true` synthesizes the row from the\ndraft. Frontend renders a \"Draft\" badge.\n",
"type": "boolean"
},
"is_draft": {
"description": "True when the authed user has a per-user draft at this path\n(over a deployed row or a synthesized draft-only row).\nFrontend appends a `*` to the displayed name.\n",
"type": "boolean"
},
"route_path": {
"type": "string",
"description": "The URL route path that will trigger this endpoint (e.g., 'api/myendpoint'). Must NOT start with a /."
},
"static_asset_config": {
"type": "object",
"nullable": true,
"description": "Configuration for serving static assets (s3 bucket, storage path, filename)",
"properties": {
"s3": {
"type": "string",
"description": "S3 bucket path for static assets"
},
"storage": {
"type": "string",
"description": "Storage path for static assets"
},
"filename": {
"type": "string",
"description": "Filename for the static asset"
}
},
"required": [
"s3"
]
},
"http_method": {
"type": "string",
"enum": [
"get",
"post",
"put",
"delete",
"patch"
],
"description": "HTTP method (get, post, put, delete, patch) that triggers this endpoint"
},
"authentication_resource_path": {
"type": "string",
"nullable": true,
"description": "Path to the resource containing authentication configuration (for api_key, basic_http, custom_script, signature methods)"
},
"summary": {
"type": "string",
"nullable": true,
"description": "Short summary describing the purpose of this trigger"
},
"description": {
"type": "string",
"nullable": true,
"description": "Detailed description of what this trigger does"
},
"request_type": {
"type": "string",
"enum": [
"sync",
"async",
"sync_sse"
],
"description": "How the request is handled - 'sync' waits for result, 'async' returns job ID immediately, 'sync_sse' streams results via Server-Sent Events"
},
"authentication_method": {
"type": "string",
"enum": [
"none",
"windmill",
"api_key",
"basic_http",
"custom_script",
"signature"
],
"description": "How requests are authenticated - 'none' (public), 'windmill' (Windmill token), 'api_key', 'basic_http', 'custom_script', 'signature'"
},
"is_static_website": {
"type": "boolean",
"description": "If true, serves static files from S3/storage instead of running a script"
},
"workspaced_route": {
"type": "boolean",
"description": "If true, the route includes the workspace ID in the path"
},
"wrap_body": {
"type": "boolean",
"description": "If true, wraps the request body in a 'body' parameter"
},
"raw_string": {
"type": "boolean",
"description": "If true, passes the request body as a raw string instead of parsing as JSON"
},
"error_handler_path": {
"type": "string",
"description": "Path to a script or flow to run when the triggered job fails"
},
"error_handler_args": {
"type": "object",
"description": "Arguments to pass to the error handler",
"additionalProperties": true
},
"retry": {
"type": "object",
"description": "Retry configuration for failed executions",
"properties": {
"constant": {
"type": "object",
"description": "Retry with constant delay between attempts",
"properties": {
"attempts": {
"type": "integer",
"description": "Number of retry attempts"
},
"seconds": {
"type": "integer",
"description": "Seconds to wait between retries"
}
}
},
"exponential": {
"type": "object",
"description": "Retry with exponential backoff (delay doubles each time)",
"properties": {
"attempts": {
"type": "integer",
"description": "Number of retry attempts"
},
"multiplier": {
"type": "integer",
"description": "Multiplier for exponential backoff"
},
"seconds": {
"type": "integer",
"minimum": 1,
"description": "Initial delay in seconds"
},
"random_factor": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Random jitter percentage (0-100) to avoid thundering herd"
}
}
},
"retry_if": {
"type": "object",
"description": "Conditional retry based on error or result",
"properties": {
"expr": {
"type": "string",
"description": "JavaScript expression that returns true to retry. Has access to 'result' and 'error' variables"
}
},
"required": [
"expr"
]
}
}
}
},
"required": [
"script_path",
"is_flow",
"route_path",
"request_type",
"authentication_method",
"http_method",
"is_static_website",
"workspaced_route",
"wrap_body",
"raw_string"
]
}