{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/woodpecker-pipeline-config/latest.json",
  "title": "Woodpecker CI configuration file",
  "description": "Schema of a Woodpecker pipeline file. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax>",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/woodpecker-ci/woodpecker/main/pipeline/frontend/yaml/linter/schema/schema.json",
    "sourceSha256": "a4b969de0a205f82bb9d08d92fff11137f7a1db543796365b38d9d768b1796b5",
    "fileMatch": [
      "**/.woodpecker/**.yml",
      "**/.woodpecker.yml",
      "**/.woodpecker/**.yaml",
      "**/.woodpecker.yaml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string",
      "format": "uri"
    },
    "variables": {
      "description": "Use yaml aliases to define variables. Read more: <https://woodpecker-ci.org/docs/usage/advanced-usage>"
    },
    "clone": {
      "$ref": "#/$defs/clone"
    },
    "skip_clone": {
      "type": "boolean"
    },
    "when": {
      "$ref": "#/$defs/workflow_when"
    },
    "steps": {
      "$ref": "#/$defs/step_list"
    },
    "services": {
      "$ref": "#/$defs/services"
    },
    "workspace": {
      "$ref": "#/$defs/workspace"
    },
    "matrix": {
      "$ref": "#/$defs/matrix"
    },
    "labels": {
      "$ref": "#/$defs/labels"
    },
    "depends_on": {
      "type": "array",
      "minLength": 1,
      "items": {
        "type": "string"
      }
    },
    "runs_on": {
      "type": "array",
      "description": "Deprecated: use `when.status` instead. Read more: <https://woodpecker-ci.org/docs/usage/workflows#flow-control>",
      "minLength": 1,
      "items": {
        "type": "string"
      }
    }
  },
  "$defs": {
    "string_or_string_slice": {
      "oneOf": [
        {
          "type": "array",
          "minLength": 1,
          "items": {
            "type": "string"
          }
        },
        {
          "type": "string"
        }
      ]
    },
    "clone": {
      "description": "Configures the clone step. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#clone>",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "git": {
              "type": "object",
              "properties": {
                "image": {
                  "$ref": "#/$defs/step_image"
                },
                "settings": {
                  "$ref": "#/$defs/clone_settings"
                }
              }
            }
          },
          "additionalProperties": false
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/step"
          },
          "minLength": 1
        }
      ]
    },
    "clone_settings": {
      "description": "Change the settings of your clone plugin. Read more: <https://woodpecker-ci.org/plugins/git-clone>",
      "type": "object",
      "properties": {
        "depth": {
          "type": "number",
          "description": "If specified, uses git's --depth option to create a shallow clone with a limited number of commits, overwritten by partial"
        },
        "recursive": {
          "type": "boolean",
          "default": false,
          "description": "Clones submodules recursively"
        },
        "partial": {
          "type": "boolean",
          "description": "Only fetch the one commit and it's blob objects to resolve all files, overwrite depth with 1"
        },
        "lfs": {
          "type": "boolean",
          "default": true,
          "description": "Set this to false to disable retrieval of LFS files"
        },
        "tags": {
          "type": "boolean",
          "description": "Fetches tags when set to true, default is false if event is not tag else true"
        }
      },
      "additionalProperties": {
        "type": [
          "boolean",
          "string",
          "number",
          "array",
          "object"
        ]
      }
    },
    "step_list": {
      "description": "The steps section defines a list of steps which will be executed serially, in the order in which they are defined. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#steps>",
      "oneOf": [
        {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "$ref": "#/$defs/step"
          }
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/step"
          },
          "minLength": 1
        }
      ]
    },
    "workflow_when": {
      "description": "Whole workflow can be skipped based on conditions. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#when---global-workflow-conditions>",
      "oneOf": [
        {
          "type": "array",
          "minLength": 1,
          "items": {
            "$ref": "#/$defs/workflow_when_condition"
          }
        },
        {
          "$ref": "#/$defs/workflow_when_condition"
        }
      ]
    },
    "workflow_when_condition": {
      "type": "object",
      "properties": {
        "repo": {
          "description": "Execute a step only on a specific repository. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#repo>",
          "$ref": "#/$defs/constraint_list"
        },
        "branch": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#branch>",
          "$ref": "#/$defs/constraint_list"
        },
        "event": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#event>",
          "default": [],
          "$ref": "#/$defs/event_constraint_list"
        },
        "ref": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#ref>",
          "$ref": "#/$defs/constraint_list"
        },
        "cron": {
          "description": "filter cron by title. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#cron>",
          "$ref": "#/$defs/constraint_list"
        },
        "status": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflows#flow-control>",
          "oneOf": [
            {
              "type": "array",
              "minLength": 1,
              "items": {
                "type": "string",
                "enum": [
                  "success",
                  "failure"
                ]
              }
            },
            {
              "type": "string",
              "enum": [
                "success",
                "failure"
              ]
            }
          ]
        },
        "platform": {
          "description": "Execute a step only on a specific platform. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#platform>",
          "$ref": "#/$defs/constraint_list"
        },
        "instance": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#instance>",
          "$ref": "#/$defs/constraint_list"
        },
        "path": {
          "description": "Execute a step only on commit with certain files added/removed/modified. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#path>",
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "object",
              "properties": {
                "include": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "exclude": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "ignore_message": {
                  "type": "string"
                },
                "on_empty": {
                  "type": "boolean"
                }
              },
              "additionalProperties": false
            }
          ]
        },
        "evaluate": {
          "description": "Execute a step only if the expression evaluates to true. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#evaluate>",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "step": {
      "description": "A step of your workflow executes either arbitrary commands or uses a plugin. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#steps>",
      "anyOf": [
        {
          "$ref": "#/$defs/commands_step"
        },
        {
          "$ref": "#/$defs/plugin_step"
        }
      ]
    },
    "commands_step": {
      "description": "Every step of your pipeline executes arbitrary commands inside a specified docker container. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#steps>",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the step. Can be used if using the array style steps list.",
          "type": "string"
        },
        "image": {
          "$ref": "#/$defs/step_image"
        },
        "privileged": {
          "$ref": "#/$defs/step_privileged"
        },
        "pull": {
          "$ref": "#/$defs/step_pull"
        },
        "commands": {
          "$ref": "#/$defs/step_commands"
        },
        "environment": {
          "$ref": "#/$defs/step_environment"
        },
        "directory": {
          "$ref": "#/$defs/step_directory"
        },
        "when": {
          "$ref": "#/$defs/step_when"
        },
        "volumes": {
          "$ref": "#/$defs/step_volumes"
        },
        "depends_on": {
          "description": "Execute a step after another step has finished.",
          "$ref": "#/$defs/string_or_string_slice"
        },
        "detach": {
          "description": "Detach a step to run in background until pipeline finishes. Read more: <https://woodpecker-ci.org/docs/usage/services#detachment>",
          "type": "boolean"
        },
        "failure": {
          "description": "How to handle the failure of this step. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#failure>",
          "type": "string",
          "enum": [
            "fail",
            "ignore",
            "cancel"
          ],
          "default": "fail"
        },
        "backend_options": {
          "$ref": "#/$defs/step_backend_options"
        },
        "entrypoint": {
          "description": "Defines container entrypoint.",
          "$ref": "#/$defs/string_or_string_slice"
        },
        "dns": {
          "description": "Change DNS server for step. Only allowed if 'Trusted Network' option is enabled in repo settings by an admin. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#dns>",
          "$ref": "#/$defs/string_or_string_slice"
        },
        "dns_search": {
          "description": "Change DNS lookup domain for step. Only allowed if 'Trusted Network' option is enabled in repo settings by an admin. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#dns>",
          "$ref": "#/$defs/string_or_string_slice"
        }
      },
      "required": [
        "image"
      ],
      "allOf": [
        {
          "if": {
            "properties": {
              "detach": {
                "const": true
              }
            }
          },
          "then": {},
          "else": {
            "anyOf": [
              {
                "required": [
                  "commands"
                ]
              },
              {
                "required": [
                  "entrypoint"
                ]
              }
            ]
          }
        }
      ],
      "additionalProperties": false
    },
    "plugin_step": {
      "description": "Plugins let you execute predefined functions in a more secure context. Read more: <https://woodpecker-ci.org/docs/usage/plugins/overview>",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the step. Can be used if using the array style steps list.",
          "type": "string"
        },
        "image": {
          "$ref": "#/$defs/step_image"
        },
        "privileged": {
          "$ref": "#/$defs/step_privileged"
        },
        "pull": {
          "$ref": "#/$defs/step_pull"
        },
        "directory": {
          "$ref": "#/$defs/step_directory"
        },
        "settings": {
          "$ref": "#/$defs/step_settings"
        },
        "when": {
          "$ref": "#/$defs/step_when"
        },
        "volumes": {
          "$ref": "#/$defs/step_volumes"
        },
        "depends_on": {
          "description": "Execute a step after another step has finished.",
          "$ref": "#/$defs/string_or_string_slice"
        },
        "detach": {
          "description": "Detach a step to run in background until pipeline finishes. Read more: <https://woodpecker-ci.org/docs/usage/services#detachment>",
          "type": "boolean"
        },
        "failure": {
          "description": "How to handle the failure of this step. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#failure>",
          "type": "string",
          "enum": [
            "fail",
            "ignore"
          ],
          "default": "fail"
        },
        "backend_options": {
          "$ref": "#/$defs/step_backend_options"
        }
      },
      "required": [
        "image"
      ],
      "additionalProperties": false
    },
    "step_when": {
      "description": "Steps can be skipped based on conditions. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#when---conditional-execution>",
      "oneOf": [
        {
          "type": "array",
          "minLength": 1,
          "items": {
            "$ref": "#/$defs/step_when_condition"
          }
        },
        {
          "$ref": "#/$defs/step_when_condition"
        }
      ]
    },
    "step_when_condition": {
      "type": "object",
      "properties": {
        "repo": {
          "description": "Execute a step only on a specific repository. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#repo>",
          "$ref": "#/$defs/constraint_list"
        },
        "branch": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#branch>",
          "$ref": "#/$defs/constraint_list"
        },
        "event": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#event>",
          "$ref": "#/$defs/event_constraint_list"
        },
        "ref": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#ref>",
          "$ref": "#/$defs/constraint_list"
        },
        "cron": {
          "description": "filter cron by title. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#cron>",
          "$ref": "#/$defs/constraint_list"
        },
        "status": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#status>",
          "oneOf": [
            {
              "type": "array",
              "minLength": 1,
              "items": {
                "type": "string",
                "enum": [
                  "success",
                  "failure"
                ]
              }
            },
            {
              "type": "string",
              "enum": [
                "success",
                "failure"
              ]
            }
          ]
        },
        "platform": {
          "description": "Execute a step only on a specific platform. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#platform>",
          "$ref": "#/$defs/constraint_list"
        },
        "matrix": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/matrix-workflows>",
          "type": "object",
          "additionalProperties": {
            "type": [
              "boolean",
              "string",
              "number"
            ]
          }
        },
        "instance": {
          "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#instance>",
          "$ref": "#/$defs/constraint_list"
        },
        "path": {
          "description": "Execute a step only on commit with certain files added/removed/modified. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#path>",
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "object",
              "properties": {
                "include": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "exclude": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "ignore_message": {
                  "type": "string"
                },
                "on_empty": {
                  "type": "boolean"
                }
              },
              "additionalProperties": false
            }
          ]
        },
        "evaluate": {
          "description": "Execute a step only if the expression evaluates to true. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#evaluate>",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "event_enum": {
      "enum": [
        "push",
        "pull_request",
        "pull_request_closed",
        "pull_request_metadata",
        "tag",
        "deployment",
        "cron",
        "manual",
        "release"
      ]
    },
    "event_constraint_list": {
      "oneOf": [
        {
          "$ref": "#/$defs/event_enum"
        },
        {
          "type": "array",
          "minLength": 1,
          "items": {
            "$ref": "#/$defs/event_enum"
          }
        }
      ]
    },
    "constraint_list": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "minLength": 1,
          "items": {
            "type": "string"
          }
        },
        {
          "type": "object",
          "properties": {
            "include": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "minLength": 1,
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "exclude": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "minLength": 1,
                  "items": {
                    "type": "string"
                  }
                }
              ]
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "step_image": {
      "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#image>",
      "type": "string"
    },
    "step_privileged": {
      "description": "Run the step in privileged mode. Read more: <https://woodpecker-ci.org/docs/next/usage/workflow-syntax#privileged-mode>",
      "type": "boolean",
      "default": false
    },
    "step_pull": {
      "description": "Always pull the latest image on pipeline execution Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#image>",
      "type": "boolean"
    },
    "step_commands": {
      "description": "Commands of every pipeline step are executed serially as if you would enter them into your local shell. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#commands>",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minLength": 1
        },
        {
          "type": "string"
        }
      ]
    },
    "step_environment": {
      "description": "Pass environment variables to a pipeline step. Read more: <https://woodpecker-ci.org/docs/usage/environment>",
      "type": "object",
      "additionalProperties": {
        "type": [
          "boolean",
          "string",
          "number",
          "array",
          "object"
        ]
      }
    },
    "step_settings": {
      "description": "Change the settings of your plugin. Read more: <https://woodpecker-ci.org/docs/usage/plugins/overview>",
      "type": "object",
      "additionalProperties": {
        "type": [
          "boolean",
          "string",
          "number",
          "array",
          "object"
        ]
      }
    },
    "step_volumes": {
      "description": "Mount files or folders from the host machine into your step container. Read more: <https://woodpecker-ci.org/docs/usage/volumes>",
      "type": "array",
      "items": {
        "type": "string"
      },
      "minLength": 1
    },
    "step_directory": {
      "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#directory>",
      "type": "string"
    },
    "step_backend_options": {
      "description": "Advanced options for the different agent backends",
      "type": "object",
      "properties": {
        "kubernetes": {
          "$ref": "#/$defs/step_backend_kubernetes"
        }
      }
    },
    "step_backend_kubernetes": {
      "description": "Advanced options for the kubernetes agent backends",
      "type": "object",
      "properties": {
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "boolean",
              "string",
              "number"
            ]
          }
        },
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": [
              "boolean",
              "string",
              "number"
            ]
          }
        },
        "tolerations": {
          "description": "The tolerations section defines a list of references to the native Kubernetes tolerations. Read more: <https://woodpecker-ci.org/docs/administration/configuration/backends/kubernetes#tolerations>",
          "type": "array",
          "items": {
            "$ref": "#/$defs/step_backend_kubernetes_toleration_object"
          },
          "minLength": 1
        },
        "securityContext": {
          "$ref": "#/$defs/step_backend_kubernetes_security_context"
        },
        "runtimeClassName": {
          "description": "Read more: <https://woodpecker-ci.org/docs/administration/configuration/backends/kubernetes#runtimeclassname>",
          "type": "string"
        },
        "secrets": {
          "description": "The secrets section defines a list of references to the native Kubernetes secrets",
          "type": "array",
          "items": {
            "$ref": "#/$defs/step_kubernetes_secret"
          },
          "minLength": 1
        }
      }
    },
    "step_backend_kubernetes_resources": {
      "description": "Resources for the kubernetes backend. Read more: <https://woodpecker-ci.org/docs/administration/configuration/backends/kubernetes#step-specific-configuration>",
      "type": "object",
      "properties": {
        "requests": {
          "$ref": "#/$defs/step_kubernetes_resources_object"
        },
        "limits": {
          "$ref": "#/$defs/step_kubernetes_resources_object"
        }
      }
    },
    "step_backend_kubernetes_security_context": {
      "description": "Pods / containers security context. Read more: <https://woodpecker-ci.org/docs/administration/configuration/backends/kubernetes#security-context>",
      "type": "object",
      "properties": {
        "privileged": {
          "type": "boolean"
        },
        "runAsNonRoot": {
          "type": "boolean"
        },
        "runAsUser": {
          "type": "number"
        },
        "runAsGroup": {
          "type": "number"
        },
        "fsGroup": {
          "type": "number"
        },
        "seccompProfile": {
          "$ref": "#/$defs/step_backend_kubernetes_secprofile"
        },
        "apparmorProfile": {
          "$ref": "#/$defs/step_backend_kubernetes_secprofile"
        }
      }
    },
    "step_backend_kubernetes_secprofile": {
      "description": "Pods / containers security profile. Read more: <https://woodpecker-ci.org/docs/administration/configuration/backends/kubernetes#step-specific-configuration>",
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "localhostProfile": {
          "type": "string"
        }
      }
    },
    "step_kubernetes_resources_object": {
      "description": "A list of kubernetes resource mappings",
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "step_backend_kubernetes_service_account": {
      "description": "serviceAccountName to be use by job. Read more: <https://woodpecker-ci.org/docs/administration/configuration/backends/kubernetes#service-account>",
      "type": "object",
      "properties": {
        "requests": {
          "$ref": "#/$defs/step_kubernetes_service_account_object"
        },
        "limits": {
          "$ref": "#/$defs/step_kubernetes_service_account_object"
        }
      }
    },
    "step_kubernetes_service_account_object": {
      "description": "A list of kubernetes resource mappings",
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "step_kubernetes_secret": {
      "description": "A reference to a native Kubernetes secret",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the secret. Can be used if using the array style secrets list.",
          "type": "string"
        },
        "key": {
          "description": "The key of the secret to select from.",
          "type": "string"
        },
        "target": {
          "$ref": "#/$defs/step_kubernetes_secret_target"
        }
      },
      "additionalProperties": false
    },
    "step_kubernetes_secret_target": {
      "description": "A target which a native Kubernetes secret maps to.",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "env": {
              "description": "The name of the environment variable which secret maps to.",
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "file": {
              "description": "The filename (path) which secret maps to.",
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "step_backend_kubernetes_toleration_object": {
      "description": "Toleration entry for the kubernetes backend.",
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "operator": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "effect": {
          "type": "string"
        },
        "tolerationSeconds": {
          "type": "integer"
        }
      }
    },
    "services": {
      "description": "Read more: <https://woodpecker-ci.org/docs/usage/services>",
      "oneOf": [
        {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "$ref": "#/$defs/service"
          }
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/service"
          },
          "minLength": 1
        }
      ]
    },
    "service": {
      "description": "Read more: <https://woodpecker-ci.org/docs/usage/services>",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the service. Can be used if using the array style services list",
          "type": "string"
        },
        "image": {
          "$ref": "#/$defs/step_image"
        },
        "privileged": {
          "$ref": "#/$defs/step_privileged"
        },
        "pull": {
          "$ref": "#/$defs/step_pull"
        },
        "commands": {
          "$ref": "#/$defs/step_commands"
        },
        "environment": {
          "$ref": "#/$defs/step_environment"
        },
        "directory": {
          "$ref": "#/$defs/step_directory"
        },
        "settings": {
          "$ref": "#/$defs/step_settings"
        },
        "when": {
          "$ref": "#/$defs/step_when"
        },
        "volumes": {
          "$ref": "#/$defs/step_volumes"
        },
        "failure": {
          "description": "How to handle the failure of this step. Read more: <https://woodpecker-ci.org/docs/usage/services#stopping>",
          "type": "string",
          "enum": [
            "fail",
            "ignore"
          ],
          "default": "fail"
        },
        "backend_options": {
          "$ref": "#/$defs/step_backend_options"
        },
        "ports": {
          "description": "expose ports to which other steps can connect to",
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ]
          },
          "minLength": 1
        }
      },
      "minProperties": 1,
      "required": [
        "image"
      ],
      "additionalProperties": false
    },
    "workspace": {
      "description": "Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#workspace>",
      "type": "object",
      "additionalProperties": true
    },
    "matrix": {
      "description": "Execute pipeline for each matrix combination. Read more: <https://woodpecker-ci.org/docs/usage/matrix-workflows>",
      "type": "object",
      "properties": {
        "include": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "minLength": 1
        }
      },
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": [
            "boolean",
            "string",
            "number"
          ]
        },
        "minLength": 1
      }
    },
    "labels": {
      "description": "Configures the labels used for the agent selection. Read more: <https://woodpecker-ci.org/docs/usage/workflow-syntax#labels>",
      "type": "object",
      "additionalProperties": {
        "type": [
          "boolean",
          "string",
          "number"
        ]
      }
    }
  },
  "required": [
    "steps"
  ],
  "additionalProperties": false
}
