{
  "$defs": {
    "plugin-descriptions": {
      "items": {
        "properties": {
          "description": {
            "markdownDescription": "Value of `short_description` from plugin `DOCUMENTATION`.",
            "title": "Description",
            "type": "string"
          },
          "name": {
            "markdownDescription": "It must not be the FQCN, but the name inside the collection.",
            "pattern": "[a-zA-Z0-9_]+",
            "title": "Name",
            "type": "string"
          },
          "namespace": {
            "type": "null"
          }
        },
        "type": "object"
      },
      "type": "array"
    },
    "release": {
      "additionalProperties": false,
      "properties": {
        "changes": {
          "additionalProperties": true,
          "properties": {
            "breaking_changes": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "bugfixes": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "deprecated_features": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "known_issues": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "major_changes": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "minor_changes": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "release_summary": {
              "markdownDescription": "This must be valid [reStructuredText](https://en.wikipedia.org/wiki/ReStructuredText).",
              "title": "Release Summary",
              "type": "string"
            },
            "removed_features": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "security_fixes": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "trivial": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object"
        },
        "codename": {
          "type": "string"
        },
        "fragments": {
          "items": {
            "type": "string"
          },
          "markdownDescription": "List of strings representing filenames of changelog framents.",
          "type": "array"
        },
        "modules": {
          "items": {
            "properties": {
              "description": {
                "markdownDescription": "Value of `short_description` from plugin `DOCUMENTATION`.",
                "title": "Description",
                "type": "string"
              },
              "name": {
                "markdownDescription": "It must not be the FQCN, but the name inside the collection.",
                "pattern": "[a-zA-Z0-9_]+",
                "title": "Short module name",
                "type": "string"
              },
              "namespace": {
                "markdownDescription": "Must be `''` for modules directly in `plugins/modules/`, or the dot-separated list of directories the module is in inside the `plugins/modules/` directory. The namespace is used to group new modules by their namespace inside the collection.",
                "title": "Namespace",
                "type": "string"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "objects": {
          "additionalProperties": false,
          "properties": {
            "playbook": {
              "items": {
                "properties": {
                  "description": {
                    "markdownDescription": "A short description of what the playbook does.",
                    "title": "Description",
                    "type": "string"
                  },
                  "name": {
                    "markdownDescription": "It must not be the FQCN, but the name inside the collection.",
                    "pattern": "[a-zA-Z0-9_]+",
                    "title": "Short playbook name",
                    "type": "string"
                  },
                  "namespace": {
                    "type": "null"
                  }
                },
                "type": "object"
              },
              "type": "array"
            },
            "role": {
              "items": {
                "properties": {
                  "description": {
                    "markdownDescription": "Value of `short_description` from role's argument spec.",
                    "title": "Description",
                    "type": "string"
                  },
                  "name": {
                    "markdownDescription": "It must not be the FQCN, but the name inside the collection.",
                    "pattern": "[a-zA-Z0-9_]+",
                    "title": "Short role name",
                    "type": "string"
                  },
                  "namespace": {
                    "type": "null"
                  }
                },
                "type": "object"
              },
              "type": "array"
            }
          },
          "type": "object"
        },
        "plugins": {
          "additionalProperties": false,
          "properties": {
            "become": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "cache": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "callback": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "cliconf": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "connection": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "filter": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "httpapi": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "inventory": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "lookup": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "netconf": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "shell": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "strategy": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "test": {
              "$ref": "#/$defs/plugin-descriptions"
            },
            "vars": {
              "$ref": "#/$defs/plugin-descriptions"
            }
          },
          "type": "object"
        },
        "release_date": {
          "format": "date",
          "markdownDescription": "Use ISO-8601 date format, like 2020-12-31",
          "pattern": "\\d\\d\\d\\d-\\d\\d-\\d\\d",
          "title": "Date of the release.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "semver": {
      "pattern": "\\d+.\\d+.\\d+.*",
      "title": "Version string following SemVer specification.",
      "type": ["string", "null"]
    }
  },
  "$id": "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/changelog.json",
  "$schema": "http://json-schema.org/draft-07/schema",
  "additionalProperties": false,
  "examples": ["changelogs/changelog.yaml"],
  "markdownDescription": "Antsibull Changelog Schema is based on [changelog.yaml-format.md](https://github.com/ansible-community/antsibull-changelog/blob/main/docs/changelog.yaml-format.md).",
  "properties": {
    "ancestor": {
      "$ref": "#/$defs/semver"
    },
    "releases": {
      "patternProperties": {
        "\\d+.\\d+.\\d+.*": {
          "$ref": "#/$defs/release",
          "type": "object"
        }
      },
      "type": "object"
    }
  },
  "title": "Antsibull Changelog Schema",
  "type": "object"
}
