{
    "title": "JSON schema for Buildkite pipeline configuration files",
    "$schema": "http://json-schema.org/draft-06/schema",
    "fileMatch": [
        "buildkite.yml",
        "buildkite.yaml",
        "buildkite.json",
        "buildkite.*.yml",
        "buildkite.*.yaml",
        "buildkite.*.json",
        ".buildkite/pipeline.yml",
        ".buildkite/pipeline.yaml",
        ".buildkite/pipeline.json",
        ".buildkite/pipeline.*.yml",
        ".buildkite/pipeline.*.yaml",
        ".buildkite/pipeline.*.json"
    ],
    "definitions": {
        "commonOptions": {
            "allowDependencyFailure": {
                "type": "boolean",
                "description": "Whether to proceed with this step and further steps if a step named in the depends_on attribute fails",
                "default": false
            },
            "agents": {
                "oneOf": [
                    { "$ref": "#/definitions/commonOptions/agentsObject" },
                    { "$ref": "#/definitions/commonOptions/agentsList" }
                ]
            },
            "agentsObject": {
                "type": "object",
                "description": "Query rules to target specific agents",
                "examples": [{ "queue": "deploy" }, { "ruby": "2*" }]
            },
            "agentsList": {
                "type": "array",
                "description": "Query rules to target specific agents in k=v format",
                "examples": ["queue=default", "xcode=true"],
                "items": {
                    "type": "string"
                }
            },
            "automaticRetry": {
                "type": "object",
                "properties": {
                    "exit_status": {
                        "description": "The exit status number that will cause this job to retry",
                        "anyOf": [
                            {
                                "type": "string",
                                "enum": ["*"]
                            },
                            {
                                "type": "number"
                            }
                        ]
                    },
                    "limit": {
                        "type": "integer",
                        "description": "The number of times this job can be retried",
                        "minimum": 1,
                        "maximum": 10
                    },
                    "signal": {
                        "description": "The exit signal, if any, that may be retried",
                        "type": "string",
                        "examples": ["*", "none", "SIGKILL", "term"]
                    },
                    "signal_reason": {
                        "description": "The exit signal reason, if any, that may be retried",
                        "type": "string",
                        "enum": [
                            "*",
                            "none",
                            "agent_refused",
                            "agent_stop",
                            "cancel",
                            "process_run_error"
                        ]
                    }
                },
                "additionalProperties": false
            },
            "branches": {
                "description": "Which branches will include this step in their builds",
                "anyOf": [
                    {
                        "type": "string"
                    },
                    {
                        "type": "array",
                        "items": { "type": "string" }
                    }
                ],
                "examples": ["master", ["feature/*", "chore/*"]]
            },
            "cancelOnBuildFailing": {
                "type": "boolean",
                "description": "Whether to cancel the job as soon as the build is marked as failing",
                "default": false
            },
            "dependsOn": {
                "description": "The step keys for a step to depend on",
                "anyOf": [
                    { "type": "null" },
                    { "type": "string" },
                    {
                        "type": "array",
                        "items": {
                            "anyOf": [
                                { "type": "string" },
                                {
                                    "type": "object",
                                    "properties": {
                                        "step": { "type": "string" },
                                        "allow_failure": {
                                            "type": "boolean",
                                            "default": false
                                        }
                                    },
                                    "additionalProperties": false
                                }
                            ]
                        }
                    }
                ]
            },
            "env": {
                "type": "object",
                "description": "Environment variables for this step",
                "examples": [{ "NODE_ENV": "test" }]
            },
            "identifier": {
                "type": "string",
                "description": "A string identifier",
                "examples": ["an-id"]
            },
            "if": {
                "type": "string",
                "description": "A boolean expression that omits the step when false",
                "examples": ["build.message != 'skip me'", "build.branch == 'master'"]
            },
            "key": {
                "type": "string",
                "description": "A unique identifier for a step, must not resemble a UUID",
                "examples": ["deploy-staging", "test-integration"]
            },
            "label": {
                "type": "string",
                "description": "The label that will be displayed in the pipeline visualisation in Buildkite. Supports emoji.",
                "examples": [":docker: Build"]
            },
            "buildNotify": {
                "type": "array",
                "description": "Array of notification options for this step",
                "items": {
                    "oneOf": [
                        {
                            "type": "string",
                            "enum": ["github_check", "github_commit_status"]
                        },
                        {
                            "type": "object",
                            "properties": {
                                "email": {
                                    "type": "string"
                                },
                                "if": {
                                    "$ref": "#/definitions/commonOptions/if"
                                }
                            },
                            "additionalProperties": false
                        },
                        {
                            "type": "object",
                            "properties": {
                                "basecamp_campfire": {
                                    "type": "string"
                                },
                                "if": {
                                    "$ref": "#/definitions/commonOptions/if"
                                }
                            },
                            "additionalProperties": false
                        },
                        {
                            "type": "object",
                            "properties": {
                                "slack": {
                                    "oneOf": [
                                        {
                                            "type": "string"
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "channels": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    }
                                                },
                                                "message": {
                                                    "type": "string"
                                                }
                                            }
                                        }
                                    ]
                                },
                                "if": {
                                    "$ref": "#/definitions/commonOptions/if"
                                }
                            },
                            "additionalProperties": false
                        },
                        {
                            "type": "object",
                            "properties": {
                                "webhook": {
                                    "type": "string"
                                },
                                "if": {
                                    "$ref": "#/definitions/commonOptions/if"
                                }
                            },
                            "additionalProperties": false
                        },
                        {
                            "type": "object",
                            "properties": {
                                "pagerduty_change_event": {
                                    "type": "string"
                                },
                                "if": {
                                    "$ref": "#/definitions/commonOptions/if"
                                }
                            },
                            "additionalProperties": false
                        },
                        {
                            "type": "object",
                            "properties": {
                                "github_commit_status": {
                                    "type": "object",
                                    "properties": {
                                        "context": {
                                            "description": "GitHub commit status name",
                                            "type": "string"
                                        }
                                    }
                                },
                                "if": {
                                    "$ref": "#/definitions/commonOptions/if"
                                }
                            },
                            "additionalProperties": false
                        },
                        {
                            "type": "object",
                            "properties": {
                                "github_check": {
                                    "type": "object",
                                    "properties": {
                                        "context": {
                                            "description": "GitHub commit status name",
                                            "type": "string"
                                        }
                                    }
                                },
                                "if": {
                                    "$ref": "#/definitions/commonOptions/if"
                                }
                            },
                            "additionalProperties": false
                        }
                    ]
                }
            },
            "fields": {
                "type": "array",
                "description": "A list of input fields required to be filled out before unblocking the step",
                "items": {
                    "oneOf": [
                        {
                            "type": "object",
                            "properties": {
                                "text": {
                                    "type": "string",
                                    "description": "The text input name",
                                    "examples": ["Release Name"]
                                },
                                "key": {
                                    "type": "string",
                                    "description": "The meta-data key that stores the field's input",
                                    "pattern": "^[a-zA-Z0-9-_]+$",
                                    "examples": ["release-name"]
                                },
                                "hint": {
                                    "type": "string",
                                    "description": "The explanatory text that is shown after the label",
                                    "examples": [
                                        "What’s the code name for this release? :name_badge:"
                                    ]
                                },
                                "required": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "Whether the field is required for form submission"
                                },
                                "default": {
                                    "type": "string",
                                    "description": "The value that is pre-filled in the text field",
                                    "examples": ["Flying Dolphin"]
                                }
                            },
                            "additionalProperties": false,
                            "required": ["key"]
                        },
                        {
                            "type": "object",
                            "properties": {
                                "select": {
                                    "type": "string",
                                    "description": "The text input name",
                                    "examples": ["Release Stream"]
                                },
                                "key": {
                                    "type": "string",
                                    "description": "The meta-data key that stores the field's input",
                                    "pattern": "^[a-zA-Z0-9-_]+$",
                                    "examples": ["release-stream"]
                                },
                                "default": {
                                    "oneOf": [
                                        {
                                            "type": "string"
                                        },
                                        {
                                            "type": "array",
                                            "items": { "type": "string" }
                                        }
                                    ],
                                    "description": "The value of the option(s) that will be pre-selected in the dropdown",
                                    "examples": ["beta", ["alpha", "beta"]]
                                },
                                "hint": {
                                    "type": "string",
                                    "description": "The explanatory text that is shown after the label",
                                    "examples": [
                                        "What’s the code name for this release? :name_badge:"
                                    ]
                                },
                                "multiple": {
                                    "type": "boolean",
                                    "description": "Whether more than one option may be selected",
                                    "default": false
                                },
                                "options": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "properties": {
                                            "label": {
                                                "type": "string",
                                                "description": "The text displayed on the select list item",
                                                "examples": ["Stable"]
                                            },
                                            "value": {
                                                "type": "string",
                                                "description": "The value to be stored as meta-data",
                                                "examples": ["stable"]
                                            },
                                            "hint": {
                                                "type": "string",
                                                "description": "The text displayed directly under the select field’s label",
                                                "examples": [
                                                    "Which release stream does this belong in? :fork:"
                                                ]
                                            },
                                            "required": {
                                                "type": "boolean",
                                                "default": true,
                                                "description": "Whether the field is required for form submission"
                                            }
                                        },
                                        "additionalProperties": false,
                                        "required": ["label", "value"]
                                    }
                                },
                                "required": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "Whether the field is required for form submission"
                                }
                            },
                            "additionalProperties": false,
                            "required": ["key", "options"]
                        }
                    ]
                }
            },
            "matrixElement": {
                "oneOf": [{ "type": "string" }, { "type": "integer" }, { "type": "boolean" }]
            },
            "prompt": {
                "type": "string",
                "description": "The instructional message displayed in the dialog box when the unblock step is activated",
                "examples": ["Release to production?"]
            },
            "skip": {
                "anyOf": [{ "type": "boolean" }, { "type": "string" }],
                "description": "Whether this step should be skipped. You can specify a reason for using a string.",
                "examples": [true, false, "My reason"]
            },
            "softFail": {
                "description": "The conditions for marking the step as a soft-fail.",
                "anyOf": [
                    {
                        "type": "boolean"
                    },
                    {
                        "type": "array",
                        "items": {
                            "anyOf": [
                                {
                                    "type": "object",
                                    "properties": {
                                        "exit_status": {
                                            "description": "The exit status number that will cause this job to soft-fail",
                                            "anyOf": [
                                                {
                                                    "type": "string",
                                                    "enum": ["*"]
                                                },
                                                {
                                                    "type": "number"
                                                }
                                            ]
                                        }
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        },
        "blockStep": {
            "type": "object",
            "properties": {
                "allow_dependency_failure": {
                    "$ref": "#/definitions/commonOptions/allowDependencyFailure"
                },
                "block": {
                    "type": "string",
                    "description": "The label of the block step"
                },
                "blocked_state": {
                    "type": "string",
                    "description": "The state that the build is set to when the build is blocked by this block step",
                    "enum": ["passed", "failed", "running"]
                },
                "branches": {
                    "$ref": "#/definitions/commonOptions/branches"
                },
                "depends_on": {
                    "$ref": "#/definitions/commonOptions/dependsOn"
                },
                "fields": {
                    "$ref": "#/definitions/commonOptions/fields"
                },
                "id": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "identifier": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "if": {
                    "$ref": "#/definitions/commonOptions/if"
                },
                "key": {
                    "$ref": "#/definitions/commonOptions/key"
                },
                "label": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "name": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "prompt": {
                    "$ref": "#/definitions/commonOptions/prompt"
                },
                "type": {
                    "type": "string",
                    "enum": ["block"]
                }
            },
            "additionalProperties": false
        },
        "nestedBlockStep": {
            "type": "object",
            "properties": {
                "block": {
                    "$ref": "#/definitions/blockStep"
                }
            },
            "additionalProperties": false
        },
        "stringBlockStep": {
            "type": "string",
            "description": "Pauses the execution of a build and waits on a user to unblock it",
            "enum": ["block"]
        },
        "inputStep": {
            "type": "object",
            "properties": {
                "allow_dependency_failure": {
                    "$ref": "#/definitions/commonOptions/allowDependencyFailure"
                },
                "input": {
                    "type": "string",
                    "description": "The label of the input step"
                },
                "branches": {
                    "$ref": "#/definitions/commonOptions/branches"
                },
                "depends_on": {
                    "$ref": "#/definitions/commonOptions/dependsOn"
                },
                "fields": {
                    "$ref": "#/definitions/commonOptions/fields"
                },
                "id": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "identifier": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "if": {
                    "$ref": "#/definitions/commonOptions/if"
                },
                "key": {
                    "$ref": "#/definitions/commonOptions/key"
                },
                "label": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "name": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "prompt": {
                    "$ref": "#/definitions/commonOptions/prompt"
                },
                "type": {
                    "type": "string",
                    "enum": ["input"]
                }
            },
            "additionalProperties": false
        },
        "nestedInputStep": {
            "type": "object",
            "properties": {
                "input": {
                    "$ref": "#/definitions/inputStep"
                }
            },
            "additionalProperties": false
        },
        "stringInputStep": {
            "type": "string",
            "description": "Pauses the execution of a build and waits on a user to unblock it",
            "enum": ["input"]
        },
        "commandStep": {
            "type": "object",
            "properties": {
                "agents": {
                    "$ref": "#/definitions/commonOptions/agents"
                },
                "allow_dependency_failure": {
                    "$ref": "#/definitions/commonOptions/allowDependencyFailure"
                },
                "artifact_paths": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": { "type": "string" }
                        }
                    ],
                    "description": "The glob path/s of artifacts to upload once this step has finished running",
                    "examples": [["screenshots/*"], ["dist/myapp.zip", "dist/myapp.tgz"]]
                },
                "branches": {
                    "$ref": "#/definitions/commonOptions/branches"
                },
                "cancel_on_build_failing": {
                    "$ref": "#/definitions/commonOptions/cancelOnBuildFailing"
                },
                "command": {
                    "description": "The commands to run on the agent",
                    "anyOf": [
                        { "type": "array", "items": { "type": "string" } },
                        { "type": "string" }
                    ]
                },
                "commands": {
                    "description": "The commands to run on the agent",
                    "$ref": "#/definitions/commandStep/properties/command"
                },
                "concurrency": {
                    "type": "integer",
                    "description": "The maximum number of jobs created from this step that are allowed to run at the same time. If you use this attribute, you must also define concurrency_group.",
                    "examples": [1]
                },
                "concurrency_group": {
                    "type": "string",
                    "description": "A unique name for the concurrency group that you are creating with the concurrency attribute",
                    "examples": ["my-pipeline/deploy"]
                },
                "concurrency_method": {
                    "type": "string",
                    "enum": ["ordered", "eager"],
                    "description": "Control command order, allowed values are 'ordered' (default) and 'eager'.  If you use this attribute, you must also define concurrency_group and concurrency.",
                    "examples": ["ordered"]
                },
                "depends_on": {
                    "$ref": "#/definitions/commonOptions/dependsOn"
                },
                "env": {
                    "$ref": "#/definitions/commonOptions/env"
                },
                "id": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "identifier": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "if": {
                    "$ref": "#/definitions/commonOptions/if"
                },
                "key": {
                    "$ref": "#/definitions/commonOptions/key"
                },
                "label": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "matrix": {
                    "oneOf": [
                        {
                            "type": "array",
                            "description": "List of elements for simple single-dimension Build Matrix",
                            "items": { "$ref": "#/definitions/commonOptions/matrixElement" },
                            "examples": [["linux", "freebsd"]]
                        },
                        {
                            "type": "object",
                            "description": "Configuration for multi-dimension Build Matrix",
                            "properties": {
                                "setup": {
                                    "oneOf": [
                                        {
                                            "type": "array",
                                            "description": "List of elements for single-dimension Build Matrix",
                                            "items": {
                                                "$ref": "#/definitions/commonOptions/matrixElement"
                                            },
                                            "examples": [["linux", "freebsd"]]
                                        },
                                        {
                                            "type": "object",
                                            "description": "Mapping of Build Matrix dimension names to their lists of elements",
                                            "propertyNames": {
                                                "type": "string",
                                                "description": "Build Matrix dimension name",
                                                "pattern": "^[a-zA-Z0-9_]+$"
                                            },
                                            "additionalProperties": {
                                                "type": "array",
                                                "description": "List of elements for this Build Matrix dimension",
                                                "items": {
                                                    "$ref": "#/definitions/commonOptions/matrixElement"
                                                }
                                            },
                                            "examples": [
                                                {
                                                    "os": ["linux", "freebsd"],
                                                    "arch": ["arm64", "riscv"]
                                                }
                                            ]
                                        }
                                    ]
                                },
                                "adjustments": {
                                    "type": "array",
                                    "description": "List of Build Matrix adjustments",
                                    "items": {
                                        "type": "object",
                                        "description": "An adjustment to a Build Matrix",
                                        "properties": {
                                            "with": {
                                                "oneOf": [
                                                    {
                                                        "type": "array",
                                                        "description": "List of existing or new elements for single-dimension Build Matrix",
                                                        "items": {
                                                            "$ref": "#/definitions/commonOptions/matrixElement"
                                                        }
                                                    },
                                                    {
                                                        "type": "object",
                                                        "description": "Specification of a new or existing Build Matrix combination",
                                                        "propertyNames": {
                                                            "type": "string",
                                                            "description": "Build Matrix dimension name"
                                                        },
                                                        "additionalProperties": {
                                                            "type": "string",
                                                            "description": "Build Matrix dimension element"
                                                        },
                                                        "examples": [{ "os": "linux", "arch": "arm64" }]
                                                    }
                                                ]
                                            },
                                            "skip": {
                                                "$ref": "#/definitions/commonOptions/skip"
                                            },
                                            "soft_fail": {
                                                "$ref": "#/definitions/commonOptions/softFail"
                                            }
                                        },
                                        "required": ["with"]
                                    }
                                }
                            },
                            "required": ["setup"]
                        }
                    ]
                },
                "name": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "notify": {
                    "type": "array",
                    "description": "Array of notification options for this step",
                    "items": {
                        "oneOf": [
                            {
                                "type": "string",
                                "enum": ["github_check", "github_commit_status"]
                            },
                            {
                                "type": "object",
                                "properties": {
                                    "basecamp_campfire": {
                                        "type": "string"
                                    },
                                    "if": {
                                        "$ref": "#/definitions/commonOptions/if"
                                    }
                                },
                                "additionalProperties": false
                            },
                            {
                                "type": "object",
                                "properties": {
                                    "slack": {
                                        "oneOf": [
                                            {
                                                "type": "string"
                                            },
                                            {
                                                "type": "object",
                                                "properties": {
                                                    "channels": {
                                                        "type": "array",
                                                        "items": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "message": {
                                                        "type": "string"
                                                    }
                                                }
                                            }
                                        ]
                                    },
                                    "if": {
                                        "$ref": "#/definitions/commonOptions/if"
                                    }
                                },
                                "additionalProperties": false
                            },
                            {
                                "type": "object",
                                "properties": {
                                    "github_commit_status": {
                                        "type": "object",
                                        "properties": {
                                            "context": {
                                                "description": "GitHub commit status name",
                                                "type": "string"
                                            }
                                        }
                                    },
                                    "if": {
                                        "$ref": "#/definitions/commonOptions/if"
                                    }
                                },
                                "additionalProperties": false
                            },
                            {
                                "type": "object",
                                "properties": {
                                    "github_check": {
                                        "type": "object",
                                        "properties": {
                                            "context": {
                                                "description": "GitHub commit status name",
                                                "type": "string"
                                            }
                                        }
                                    },
                                    "if": {
                                        "$ref": "#/definitions/commonOptions/if"
                                    }
                                },
                                "additionalProperties": false
                            }
                        ]
                    }
                },
                "parallelism": {
                    "type": "integer",
                    "description": "The number of parallel jobs that will be created based on this step",
                    "examples": [42]
                },
                "plugins": {
                    "anyOf": [
                        {
                            "type": "array",
                            "description": "Array of plugins for this step",
                            "items": {
                                "oneOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "type": "object",
                                        "maxProperties": 1,
                                        "examples": [{ "docker-compose#v1.0.0": { "run": "app" } }]
                                    }
                                ]
                            }
                        },
                        {
                            "type": "object",
                            "description": "A map of plugins for this step. Deprecated: please use the array syntax."
                        }
                    ]
                },
                "soft_fail": {
                    "$ref": "#/definitions/commonOptions/softFail"
                },
                "retry": {
                    "type": "object",
                    "description": "The conditions for retrying this step.",
                    "properties": {
                        "automatic": {
                            "anyOf": [
                                {
                                    "type": "boolean"
                                },
                                {
                                    "$ref": "#/definitions/commonOptions/automaticRetry"
                                },
                                {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/definitions/commonOptions/automaticRetry"
                                    }
                                }
                            ],
                            "description": "Whether to allow a job to retry automatically. If set to true, the retry conditions are set to the default value.",
                            "default": [
                                {
                                    "exit_status": "*",
                                    "limit": 2
                                }
                            ]
                        },
                        "manual": {
                            "description": "Whether to allow a job to be retried manually",
                            "anyOf": [
                                {
                                    "type": "boolean"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "allowed": {
                                            "type": "boolean",
                                            "description": "Whether or not this job can be retried manually",
                                            "default": true
                                        },
                                        "permit_on_passed": {
                                            "type": "boolean",
                                            "description": "Whether or not this job can be retried after it has passed",
                                            "default": true
                                        },
                                        "reason": {
                                            "type": "string",
                                            "description": "A string that will be displayed in a tooltip on the Retry button in Buildkite. This will only be displayed if the allowed attribute is set to false.",
                                            "examples": ["No retries allowed on deploy steps"]
                                        }
                                    },
                                    "additionalProperties": false
                                }
                            ]
                        }
                    }
                },
                "skip": {
                    "$ref": "#/definitions/commonOptions/skip"
                },
                "timeout_in_minutes": {
                    "type": "integer",
                    "description": "The number of minutes to time out a job",
                    "minimum": 1,
                    "examples": [60]
                },
                "type": {
                    "type": "string",
                    "enum": ["script", "command", "commands"]
                },
                "priority": {
                    "type": "integer",
                    "description": "Priority of the job, higher priorities are assigned to agents",
                    "examples": [-1, 1]
                }
            },
            "additionalProperties": false
        },
        "nestedCommandStep": {
            "type": "object",
            "properties": {
                "command": { "$ref": "#/definitions/commandStep" },
                "commands": { "$ref": "#/definitions/commandStep" },
                "script": { "$ref": "#/definitions/commandStep" }
            },
            "additionalProperties": false
        },
        "stringWaitStep": {
            "type": "string",
            "description": "Waits for previous steps to pass before continuing",
            "enum": ["wait", "waiter"]
        },
        "waitStep": {
            "type": "object",
            "properties": {
                "allow_dependency_failure": {
                    "$ref": "#/definitions/commonOptions/allowDependencyFailure"
                },
                "continue_on_failure": {
                    "description": "Continue to the next steps, even if the previous group of steps fail",
                    "type": "boolean"
                },
                "depends_on": {
                    "$ref": "#/definitions/commonOptions/dependsOn"
                },
                "id": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "identifier": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "if": {
                    "$ref": "#/definitions/commonOptions/if"
                },
                "key": {
                    "$ref": "#/definitions/commonOptions/key"
                },
                "type": {
                    "type": "string",
                    "enum": ["wait", "waiter"]
                },
                "wait": {
                    "description": "Waits for previous steps to pass before continuing",
                    "anyOf": [{ "type": "null" }, { "type": "string", "enum": [""] }]
                },
                "waiter": {
                    "anyOf": [{ "type": "null" }, { "type": "string", "enum": [""] }]
                }
            },
            "additionalProperties": false
        },
        "nestedWaitStep": {
            "type": "object",
            "properties": {
                "wait": {
                    "description": "Waits for previous steps to pass before continuing",
                    "$ref": "#/definitions/waitStep"
                },
                "waiter": {
                    "$ref": "#/definitions/waitStep"
                }
            },
            "additionalProperties": false
        },
        "triggerStep": {
            "type": "object",
            "properties": {
                "allow_dependency_failure": {
                    "$ref": "#/definitions/commonOptions/allowDependencyFailure"
                },
                "async": {
                    "type": "boolean",
                    "default": false,
                    "description": "Whether to continue the build without waiting for the triggered step to complete"
                },
                "branches": {
                    "$ref": "#/definitions/commonOptions/branches"
                },
                "build": {
                    "type": "object",
                    "description": "Properties of the build that will be created when the step is triggered",
                    "properties": {
                        "branch": {
                            "type": "string",
                            "description": "The branch for the build",
                            "default": "master",
                            "examples": ["master", "feature/xyz"]
                        },
                        "commit": {
                            "type": "string",
                            "description": "The commit hash for the build",
                            "default": "HEAD",
                            "examples": ["HEAD", "b5fb108"]
                        },
                        "env": {
                            "$ref": "#/definitions/commonOptions/env"
                        },
                        "label": {
                            "$ref": "#/definitions/commonOptions/label"
                        },
                        "name": {
                            "$ref": "#/definitions/commonOptions/label"
                        },
                        "message": {
                            "type": "string",
                            "description": "The message for the build (supports emoji)",
                            "default": "The label of the trigger step",
                            "examples": ["Deployment 123 :rocket:"]
                        },
                        "meta_data": {
                            "type": "object",
                            "description": "Meta-data for the build",
                            "examples": [{ "server": "i-b244e37160c" }]
                        },
                        "trigger": {
                            "type": "string",
                            "description": "The slug of the pipeline to create a build",
                            "examples": ["myapp-deploy"]
                        },
                        "type": {
                            "type": "string",
                            "enum": ["trigger"]
                        }
                    },
                    "additionalProperties": false
                },
                "depends_on": {
                    "$ref": "#/definitions/commonOptions/dependsOn"
                },
                "id": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "identifier": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "if": {
                    "$ref": "#/definitions/commonOptions/if"
                },
                "key": {
                    "$ref": "#/definitions/commonOptions/key"
                },
                "label": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "name": {
                    "$ref": "#/definitions/commonOptions/label"
                },
                "type": {
                    "type": "string",
                    "enum": ["trigger"]
                },
                "trigger": {
                    "type": "string",
                    "description": "The slug of the pipeline to create a build"
                },
                "skip": {
                    "$ref": "#/definitions/commonOptions/skip"
                },
                "soft_fail": {
                    "$ref": "#/definitions/commonOptions/softFail"
                }
            },
            "additionalProperties": false
        },
        "nestedTriggerStep": {
            "type": "object",
            "properties": {
                "trigger": {
                    "$ref": "#/definitions/triggerStep"
                }
            },
            "additionalProperties": false
        },
        "groupStep": {
            "properties": {
                "depends_on": {
                    "$ref": "#/definitions/commonOptions/dependsOn"
                },
                "group": {
                    "type": "string",
                    "description": "The name to give to this group of steps",
                    "examples": ["Tests"]
                },
                "id": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "identifier": {
                    "$ref": "#/definitions/commonOptions/identifier"
                },
                "if": {
                    "$ref": "#/definitions/commonOptions/if"
                },
                "key": {
                    "$ref": "#/definitions/commonOptions/key"
                },
                "label": {
                    "$ref": "#/definitions/groupStep/properties/group"
                },
                "name": {
                    "$ref": "#/definitions/groupStep/properties/label"
                },
                "steps": {
                    "type": "array",
                    "description": "A list of steps",
                    "items": {
                        "anyOf": [
                            { "$ref": "#/definitions/stringBlockStep" },
                            { "$ref": "#/definitions/blockStep" },
                            { "$ref": "#/definitions/commandStep" },
                            { "$ref": "#/definitions/nestedCommandStep" },
                            { "$ref": "#/definitions/triggerStep" },
                            { "$ref": "#/definitions/nestedTriggerStep" },
                            { "$ref": "#/definitions/stringInputStep" },
                            { "$ref": "#/definitions/inputStep" },
                            { "$ref": "#/definitions/nestedInputStep" },
                            { "$ref": "#/definitions/stringWaitStep" },
                            { "$ref": "#/definitions/waitStep" },
                            { "$ref": "#/definitions/nestedWaitStep" }
                        ]
                    },
                    "minSize": 1
                },
                "type": {
                    "type": "string",
                    "enum": ["group"]
                }
            },
            "additionalProperties": false
        }
    },
    "properties": {
        "env": {
            "$ref": "#/definitions/commonOptions/env"
        },
        "agents": {
            "$ref": "#/definitions/commonOptions/agents"
        },
        "notify": {
            "$ref": "#/definitions/commonOptions/buildNotify"
        },
        "steps": {
            "description": "A list of steps",
            "type": "array",
            "items": {
                "anyOf": [
                    { "$ref": "#/definitions/blockStep" },
                    { "$ref": "#/definitions/nestedBlockStep" },
                    { "$ref": "#/definitions/stringBlockStep" },
                    { "$ref": "#/definitions/inputStep" },
                    { "$ref": "#/definitions/nestedInputStep" },
                    { "$ref": "#/definitions/stringInputStep" },
                    { "$ref": "#/definitions/commandStep" },
                    { "$ref": "#/definitions/nestedCommandStep" },
                    { "$ref": "#/definitions/stringWaitStep" },
                    { "$ref": "#/definitions/waitStep" },
                    { "$ref": "#/definitions/nestedWaitStep" },
                    { "$ref": "#/definitions/triggerStep" },
                    { "$ref": "#/definitions/nestedTriggerStep" },
                    { "$ref": "#/definitions/groupStep" }
                ]
            }
        }
    }
}
