{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/pmbot-yml/latest.json",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/pmbot-io/config/master/pmbot.yml.schema.json",
    "sourceSha256": "9cb96cd13e4dbb4cba104921fc01cb79c03708d6de31424b313374ae5aa926cf",
    "fileMatch": [
      ".pmbot.yml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "version": {
      "enum": [
        "1"
      ],
      "type": "string"
    },
    "packageManagers": {
      "items": {
        "$ref": "#/$defs/PackageManagerUpdateConfig"
      },
      "type": "array",
      "minItems": 1,
      "markdownDescription": "List of updates to perform"
    },
    "actions": {
      "items": {
        "$ref": "#/$defs/ActionPluginDeclaration",
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "name": {
                "const": "create-issue"
              },
              "config": {
                "$ref": "#/$defs/CreateIssueActionConfig"
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "const": "create-merge-request"
              },
              "config": {
                "$ref": "#/$defs/CreateMergeRequestActionConfig"
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "const": "auto-merge"
              },
              "config": {
                "$ref": "#/$defs/AutoMergeActionConfig"
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "const": "webhook"
              },
              "config": {
                "$ref": "#/$defs/WebhookActionConfig"
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "const": "slack"
              },
              "config": {
                "$ref": "#/$defs/SlackActionConfig"
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "const": "mattermost"
              },
              "config": {
                "$ref": "#/$defs/MattermostActionConfig"
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "const": "email"
              },
              "config": {
                "$ref": "#/$defs/EmailActionConfig"
              }
            }
          }
        ]
      },
      "type": "array",
      "default": [],
      "description": "Actions to execute after each package manager update",
      "markdownDescription": "Actions to execute after each package manager update"
    }
  },
  "required": [
    "version",
    "packageManagers"
  ],
  "$defs": {
    "AutoMergeActionCommitMessageTemplateContext": {
      "properties": {
        "slug": {
          "description": "Update slug. For example, \"npm\", or, \"npm-0\" when there are multiple pmUpdates with packageManager npm.",
          "markdownDescription": "Update slug. For example, \"npm\", or, \"npm-0\" when there are multiple pmUpdates with packageManager npm."
        }
      },
      "type": "object",
      "required": [
        "slug"
      ]
    },
    "AutoMergeActionConfig": {
      "properties": {
        "squash": {
          "type": "boolean",
          "default": true,
          "description": "Whether to squash commits of the update branch",
          "markdownDescription": "Whether to squash commits of the update branch"
        },
        "commitMessage": {
          "type": "string",
          "default": "chore: update {{slug}} dependencies",
          "description": "Commit message\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"npm-0\"\n}\n```\n",
          "markdownDescription": "Commit message\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"npm-0\"\n}\n```\n"
        },
        "removeUpdateBranch": {
          "type": "boolean",
          "default": true,
          "description": "Whether to remove the update branch",
          "markdownDescription": "Whether to remove the update branch"
        }
      },
      "type": "object"
    },
    "TitleTemplateContext": {
      "properties": {
        "slug": {
          "description": "Update slug. For example, \"npm\", or, \"npm-0\" when there are multiple pmUpdates with packageManager npm.",
          "markdownDescription": "Update slug. For example, \"npm\", or, \"npm-0\" when there are multiple pmUpdates with packageManager npm."
        },
        "status": {
          "description": "Package manager update status",
          "markdownDescription": "Package manager update status"
        },
        "statusEmoji": {
          "description": "A status emoji corresponding to the package manager update status",
          "markdownDescription": "A status emoji corresponding to the package manager update status"
        }
      },
      "type": "object",
      "required": [
        "slug",
        "status",
        "statusEmoji"
      ]
    },
    "CreateIssueActionConfig": {
      "properties": {
        "title": {
          "type": "string",
          "default": "Automated update of {{slug}} dependencies {{statusEmoji}}",
          "description": "Issue title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n",
          "markdownDescription": "Issue title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n"
        },
        "additionalText": {
          "type": "string",
          "description": "Additional text to embed in the issue description",
          "markdownDescription": "Additional text to embed in the issue description"
        },
        "assignees": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "default": [],
          "description": "Usernames to assign to the issue created. Note that Gitlab CE only allows one assignee.",
          "markdownDescription": "Usernames to assign to the issue created. Note that Gitlab CE only allows one assignee."
        },
        "closeOpen": {
          "type": "boolean",
          "default": true,
          "description": "Close open issues that were created by Pmbot. This option prevents multiple issues open simultaneously when you don't have the time to look at them.",
          "markdownDescription": "Close open issues that were created by Pmbot. This option prevents multiple issues open simultaneously when you don't have the time to look at them."
        },
        "token": {
          "minLength": 1,
          "type": "string",
          "description": "An authentication token. For Gitlab, this should be a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html). For Github, it should be a [Github personal access token](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line).",
          "markdownDescription": "An authentication token. For Gitlab, this should be a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html). For Github, it should be a [Github personal access token](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line)."
        }
      },
      "type": "object",
      "required": [
        "token"
      ]
    },
    "CreateMergeRequestActionConfig": {
      "properties": {
        "title": {
          "type": "string",
          "default": "Automated update of {{slug}} dependencies {{statusEmoji}}",
          "description": "Merge request title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n",
          "markdownDescription": "Merge request title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n"
        },
        "additionalText": {
          "type": "string",
          "description": "Additional text to embed in the merge request description",
          "markdownDescription": "Additional text to embed in the merge request description"
        },
        "assignees": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "default": [],
          "description": "Usernames to assign to the issue created. Note that Gitlab CE only allows one assignee.",
          "markdownDescription": "Usernames to assign to the issue created. Note that Gitlab CE only allows one assignee."
        },
        "closeOpen": {
          "type": "boolean",
          "default": true,
          "description": "Close open merge requests that were created by Pmbot. This option prevents multiple merge requests open simultaneously when you don't have the time to merge them.",
          "markdownDescription": "Close open merge requests that were created by Pmbot. This option prevents multiple merge requests open simultaneously when you don't have the time to merge them."
        },
        "squash": {
          "type": "boolean",
          "default": true,
          "description": "[GITLAB only] Whether commits of the merge request source branch should be squashed",
          "markdownDescription": "[GITLAB only] Whether commits of the merge request source branch should be squashed"
        },
        "deleteSourceBranch": {
          "type": "boolean",
          "default": true,
          "description": "[GITLAB only] Whether the merge request source branch should be deleted",
          "markdownDescription": "[GITLAB only] Whether the merge request source branch should be deleted"
        },
        "maintainerCanModify": {
          "type": "boolean",
          "default": true,
          "description": "[GITHUB only] Whether maintainers can modify the created pull request",
          "markdownDescription": "[GITHUB only] Whether maintainers can modify the created pull request"
        },
        "token": {
          "minLength": 1,
          "type": "string",
          "description": "An authentication token. For Gitlab, this should be a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html). For Github, it should be a [Github personal access token](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line).",
          "markdownDescription": "An authentication token. For Gitlab, this should be a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html). For Github, it should be a [Github personal access token](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line)."
        }
      },
      "type": "object",
      "required": [
        "token"
      ]
    },
    "MessageConfig": {
      "properties": {
        "from": {
          "minLength": 1,
          "type": "string",
          "description": "Sender's email. Be aware that some providers (e.g. OBVH) will silently ignore sending the email when the sender address does not match the username.",
          "markdownDescription": "Sender's email. Be aware that some providers (e.g. OBVH) will silently ignore sending the email when the sender address does not match the username."
        },
        "to": {
          "type": "string",
          "minLength": 1,
          "description": "Recipient address(es)",
          "markdownDescription": "Recipient address(es)"
        },
        "subject": {
          "type": "string",
          "default": "Automated update of {{slug}} dependencies {{statusEmoji}}",
          "description": "Email subject\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n",
          "markdownDescription": "Email subject\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n"
        }
      },
      "type": "object",
      "required": [
        "from",
        "to"
      ]
    },
    "EmailActionConfig": {
      "properties": {
        "transportOptions": {
          "description": "Nodemailer [transport options](https://nodemailer.com/smtp/#general-options)",
          "markdownDescription": "Nodemailer [transport options](https://nodemailer.com/smtp/#general-options)"
        },
        "messageConfig": {
          "$ref": "#/$defs/MessageConfig",
          "description": "Nodemailer [message configuration](https://nodemailer.com/message/). Allows you to override message configuration properties, except `html` and `text`.",
          "markdownDescription": "Nodemailer [message configuration](https://nodemailer.com/message/). Allows you to override message configuration properties, except `html` and `text`."
        },
        "additionalText": {
          "type": "string",
          "description": "Additional text to embed in the email body",
          "markdownDescription": "Additional text to embed in the email body"
        }
      },
      "type": "object",
      "required": [
        "transportOptions",
        "messageConfig"
      ]
    },
    "MattermostActionConfig": {
      "properties": {
        "url": {
          "minLength": 1,
          "type": "string",
          "description": "Mattermost [incoming webhook URL](https://docs.mattermost.com/developer/webhooks-incoming.html#simple-incoming-webhook)",
          "markdownDescription": "Mattermost [incoming webhook URL](https://docs.mattermost.com/developer/webhooks-incoming.html#simple-incoming-webhook)"
        },
        "channels": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Channels where to send the message. Obsolete parameter when you have enabled **Lock to this channel** for the incoming webhook.",
          "markdownDescription": "Channels where to send the message. Obsolete parameter when you have enabled **Lock to this channel** for the incoming webhook."
        },
        "title": {
          "type": "string",
          "default": "Automated update of {{slug}} dependencies {{statusEmoji}}",
          "description": "Message title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n",
          "markdownDescription": "Message title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n"
        },
        "additionalText": {
          "type": "string",
          "description": "Additional text to embed in the message body",
          "markdownDescription": "Additional text to embed in the message body"
        }
      },
      "type": "object",
      "required": [
        "url"
      ]
    },
    "SlackActionConfig": {
      "properties": {
        "url": {
          "minLength": 1,
          "type": "string",
          "description": "Slack webhook URL.\n\nTo get this URL:\n1. [Create](https://api.slack.com/apps?new_app=1) a custom Slack App. Fill in the form as follows:\n    - *App Name*: `Pmbot`\n    - *Development Slack Workspace*: Workspace where you want Pmbot to be integrated to\n2. Click \"Create App\". You are redirected to your app's page.\n3. Under menu section *Features*, select *Incoming Webhooks*, then toggle on *Activate Incoming Webhooks*. A new section named *Webhook URLs for Your Workspace* appears.\n4. Under section *Webhook URLs for Your Workspace*, click *Add New Webhook To Workspace*, then select the channel to which you want messages to be sent, for example `#pmbot`.\n5. Once added, copy the webhook URL and configure this action with it\n  ",
          "markdownDescription": "Slack webhook URL.\n\nTo get this URL:\n1. [Create](https://api.slack.com/apps?new_app=1) a custom Slack App. Fill in the form as follows:\n    - *App Name*: `Pmbot`\n    - *Development Slack Workspace*: Workspace where you want Pmbot to be integrated to\n2. Click \"Create App\". You are redirected to your app's page.\n3. Under menu section *Features*, select *Incoming Webhooks*, then toggle on *Activate Incoming Webhooks*. A new section named *Webhook URLs for Your Workspace* appears.\n4. Under section *Webhook URLs for Your Workspace*, click *Add New Webhook To Workspace*, then select the channel to which you want messages to be sent, for example `#pmbot`.\n5. Once added, copy the webhook URL and configure this action with it\n  "
        },
        "title": {
          "type": "string",
          "default": "Automated update of {{slug}} dependencies {{statusEmoji}}",
          "description": "Slack message title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n",
          "markdownDescription": "Slack message title\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"slug\": \"myPm\",\n    \"status\": \"myStatus\",\n    \"statusEmoji\": \"✅\"\n}\n```\n"
        },
        "additionalText": {
          "type": "string",
          "description": "Additional text to embed in the slack message body",
          "markdownDescription": "Additional text to embed in the slack message body"
        }
      },
      "type": "object",
      "required": [
        "url"
      ]
    },
    "WebhookHeader": {
      "properties": {
        "name": {
          "minLength": 1,
          "type": "string",
          "description": "Header name",
          "markdownDescription": "Header name"
        },
        "value": {
          "minLength": 1,
          "type": "string",
          "description": "Header value",
          "markdownDescription": "Header value"
        }
      },
      "type": "object",
      "required": [
        "name",
        "value"
      ]
    },
    "WebhookActionConfig": {
      "properties": {
        "url": {
          "minLength": 1,
          "type": "string",
          "description": "Url to call",
          "markdownDescription": "Url to call"
        },
        "extraData": {
          "description": "Data that will be appended to the webhook payload in property \"extraData\"",
          "markdownDescription": "Data that will be appended to the webhook payload in property \"extraData\""
        },
        "headers": {
          "items": {
            "$ref": "#/$defs/WebhookHeader"
          },
          "type": "array",
          "description": "Additional headers to append to the HTTP request",
          "markdownDescription": "Additional headers to append to the HTTP request"
        }
      },
      "type": "object",
      "required": [
        "url"
      ]
    },
    "BumpRule": {
      "properties": {
        "pattern": {
          "type": "string",
          "description": "A Javascript regular expression.",
          "markdownDescription": "A Javascript regular expression."
        },
        "bump": {
          "enum": [
            "major",
            "minor",
            "patch"
          ],
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "pattern",
        "bump"
      ]
    },
    "GenericBumpConfig": {
      "properties": {
        "defaultBumpRule": {
          "enum": [
            "major",
            "minor",
            "patch"
          ],
          "type": "string",
          "description": "Default rule for bumping dependencies. Used unless a specific rule is configured.",
          "markdownDescription": "Default rule for bumping dependencies. Used unless a specific rule is configured."
        },
        "bumpRules": {
          "items": {
            "$ref": "#/$defs/BumpRule"
          },
          "type": "array",
          "default": [],
          "description": "Bump rules for specific dependencies. The first rule to match is used. When no custom rule is found here, we fallback the default rule.",
          "markdownDescription": "Bump rules for specific dependencies. The first rule to match is used. When no custom rule is found here, we fallback the default rule."
        }
      },
      "type": "object"
    },
    "GoPmaConfig": {
      "properties": {
        "bumpConfig": {
          "description": "Bump configuration. Patterns are matched against package names.",
          "markdownDescription": "Bump configuration. Patterns are matched against package names."
        }
      },
      "type": "object"
    },
    "MavenPmaConfig": {
      "properties": {
        "bumpConfig": {
          "description": "Bump configuration. Patterns are matched against dependency names formed as \"<groupId>:<artifactId>\" (e.g. \"javax.xml.bind:jaxb-api\").",
          "markdownDescription": "Bump configuration. Patterns are matched against dependency names formed as \"<groupId>:<artifactId>\" (e.g. \"javax.xml.bind:jaxb-api\")."
        },
        "settingsPath": {
          "description": "Path to a maven `settings.xml` file which contains credentials for private repositories.",
          "markdownDescription": "Path to a maven `settings.xml` file which contains credentials for private repositories."
        }
      },
      "type": "object"
    },
    "PmbotPluginDeclaration": {
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1
        },
        "config": {}
      },
      "type": "object",
      "required": [
        "name"
      ]
    },
    "ActionPluginDeclaration": {
      "properties": {
        "on": {
          "items": {
            "enum": [
              "running",
              "pending",
              "interrupted",
              "success",
              "partial",
              "failure",
              "unknown"
            ],
            "type": "string"
          },
          "type": "array",
          "default": [],
          "description": "When to trigger this action",
          "markdownDescription": "When to trigger this action"
        },
        "name": {
          "type": "string",
          "minLength": 1
        },
        "config": {}
      },
      "type": "object",
      "required": [
        "name"
      ]
    },
    "CiConfig": {
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": true,
          "description": "When false, all updates are made at once and we do not wait for CI feedback.",
          "markdownDescription": "When false, all updates are made at once and we do not wait for CI feedback."
        }
      },
      "type": "object"
    },
    "DependencyUpdateCommitMessageTemplateContext": {
      "properties": {
        "dependency": {
          "type": "string",
          "description": "Name of the dependency",
          "markdownDescription": "Name of the dependency"
        },
        "versionBefore": {
          "type": "string",
          "description": "Version of the dependency before it was updated",
          "markdownDescription": "Version of the dependency before it was updated"
        },
        "versionAfter": {
          "type": "string",
          "description": "Version of the dependency after it was updated",
          "markdownDescription": "Version of the dependency after it was updated"
        }
      },
      "type": "object",
      "required": [
        "dependency",
        "versionBefore",
        "versionAfter"
      ]
    },
    "PackageManagerUpdateConfig": {
      "properties": {
        "packageManager": {
          "$ref": "#/$defs/PmbotPluginDeclaration",
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "name": {
                  "const": "npm"
                },
                "config": {
                  "type": "object"
                }
              }
            },
            {
              "type": "object",
              "properties": {
                "name": {
                  "const": "maven"
                },
                "config": {
                  "$ref": "#/$defs/MavenPmaConfig"
                }
              }
            },
            {
              "type": "object",
              "properties": {
                "name": {
                  "const": "go"
                },
                "config": {
                  "$ref": "#/$defs/GoPmaConfig"
                }
              }
            },
            {
              "type": "object",
              "properties": {
                "name": {
                  "const": "composer"
                }
              }
            },
            {
              "type": "object",
              "properties": {
                "name": {
                  "const": "ruby"
                }
              }
            }
          ],
          "description": "Package manager to use for this update",
          "markdownDescription": "Package manager to use for this update"
        },
        "ci": {
          "$ref": "#/$defs/CiConfig",
          "description": "CI configuration for this update",
          "markdownDescription": "CI configuration for this update"
        },
        "branchPrefix": {
          "type": "string",
          "default": "update/",
          "description": "Prefix of the update branch",
          "markdownDescription": "Prefix of the update branch"
        },
        "commitMessage": {
          "type": "string",
          "default": "chore: update {{dependency}} from {{versionBefore}} to {{versionAfter}}",
          "maxLength": 128,
          "description": "Commit message template\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"dependency\": \"chalk\",\n    \"versionBefore\": \"1.0.0\",\n    \"versionAfter\": \"1.0.1\"\n}\n```\n",
          "markdownDescription": "Commit message template\n\nThis [handlebars](https://handlebarsjs.com/guide/#what-is-handlebars) template is passed the following context:\n\n```\n{\n    \"dependency\": \"chalk\",\n    \"versionBefore\": \"1.0.0\",\n    \"versionAfter\": \"1.0.1\"\n}\n```\n"
        },
        "ignore": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "default": [],
          "description": "List of dependencies to ignore. Each item should be a Javascript regular expression.",
          "markdownDescription": "List of dependencies to ignore. Each item should be a Javascript regular expression."
        },
        "actions": {
          "items": {
            "$ref": "#/$defs/ActionPluginDeclaration",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "create-issue"
                  },
                  "config": {
                    "$ref": "#/$defs/CreateIssueActionConfig"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "create-merge-request"
                  },
                  "config": {
                    "$ref": "#/$defs/CreateMergeRequestActionConfig"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "auto-merge"
                  },
                  "config": {
                    "$ref": "#/$defs/AutoMergeActionConfig"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "webhook"
                  },
                  "config": {
                    "$ref": "#/$defs/WebhookActionConfig"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "slack"
                  },
                  "config": {
                    "$ref": "#/$defs/SlackActionConfig"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "mattermost"
                  },
                  "config": {
                    "$ref": "#/$defs/MattermostActionConfig"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "email"
                  },
                  "config": {
                    "$ref": "#/$defs/EmailActionConfig"
                  }
                }
              }
            ]
          },
          "type": "array",
          "default": [],
          "description": "Actions to execute after the update",
          "markdownDescription": "Actions to execute after the update"
        },
        "keepUpdateBranchOnFailure": {
          "type": "boolean",
          "description": "When `true`, the update branch will **not** be deleted when the package manager update status is `failure`.",
          "markdownDescription": "When `true`, the update branch will **not** be deleted when the package manager update status is `failure`."
        }
      },
      "type": "object",
      "required": [
        "packageManager"
      ]
    }
  }
}
