{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://json.schemastore.org/git-cliff.json","x-tombi-toml-version":"v1.0.0","title":"git-cliff configuration","description":"Configuration for git-cliff, a changelog generator that follows Conventional Commits.\nhttps://git-cliff.org/docs/configuration/","type":"object","additionalProperties":true,"properties":{"$schema":{"description":"Optional schema URL for editor integrations.","type":"string"},"changelog":{"$ref":"#/definitions/changelog"},"git":{"$ref":"#/definitions/git"},"remote":{"$ref":"#/definitions/remoteConfig"},"bump":{"$ref":"#/definitions/bump"}},"definitions":{"changelog":{"description":"Configuration options for changelog generation.","type":"object","additionalProperties":true,"properties":{"header":{"$ref":"#/definitions/optionalString","description":"Header template rendered at the beginning of the changelog."},"body":{"description":"Body template rendered for each release.","type":"string"},"footer":{"$ref":"#/definitions/optionalString","description":"Footer template rendered at the end of the changelog."},"trim":{"description":"Whether to remove leading and trailing whitespace from the changelog body.","type":"boolean"},"render_always":{"description":"Whether to render the body template even if there are no releases to process.","type":"boolean"},"postprocessors":{"description":"Regex-based processors applied after changelog rendering.","type":"array","items":{"$ref":"#/definitions/textProcessor"}},"output":{"$ref":"#/definitions/optionalString","description":"Output file path for the changelog."}}},"git":{"description":"Git parsing and filtering options.","type":"object","additionalProperties":true,"properties":{"processing_order":{"description":"Custom commit processing pipeline.","oneOf":[{"type":"array","items":{"type":"string","enum":["commit_preprocessors","split_commits","conventional_commits","commit_parsers","link_parsers"]}},{"type":"null"}]},"conventional_commits":{"description":"Whether to parse commits according to the Conventional Commits specification.","type":"boolean"},"require_conventional":{"description":"Whether all included commits must be conventional.","type":"boolean"},"filter_unconventional":{"description":"Whether to exclude commits that are not conventional.","type":"boolean"},"split_commits":{"description":"Whether each line of a commit should be processed as an individual commit message.","type":"boolean"},"commit_preprocessors":{"description":"Regex-based processors applied before commit parsing.","type":"array","items":{"$ref":"#/definitions/textProcessor"}},"commit_parsers":{"description":"Commit parser rules that classify, scope, or skip commits.","type":"array","items":{"$ref":"#/definitions/commitParser"}},"protect_breaking_commits":{"description":"Whether breaking changes are protected from being skipped by commit parsers.","type":"boolean"},"link_parsers":{"description":"Regex-based parsers that extract links from commit messages.","type":"array","items":{"$ref":"#/definitions/linkParser"}},"filter_commits":{"description":"Whether commits not matched by a commit parser are filtered out.","type":"boolean"},"fail_on_unmatched_commit":{"description":"Whether git-cliff should fail when an included commit is not matched by any parser.","type":"boolean"},"tag_pattern":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern for selecting release tags."},"skip_tags":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern for tags to skip."},"ignore_tags":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern for tags to ignore."},"count_tags":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern for tags to count."},"use_branch_tags":{"description":"Whether to include only tags that belong to the current branch.","type":"boolean"},"topo_order":{"description":"Whether releases are processed in topological order instead of chronological order.","type":"boolean"},"topo_order_commits":{"description":"Whether commits are processed in topological order instead of chronological order.","type":"boolean"},"sort_commits":{"description":"Ordering for commits inside each release section.","type":"string","enum":["oldest","newest"]},"limit_commits":{"description":"Maximum number of commits included in the generated changelog.","type":["integer","null"],"minimum":1},"recurse_submodules":{"$ref":"#/definitions/optionalBoolean","description":"Whether to read and process submodule commits."},"include_paths":{"$ref":"#/definitions/stringArray","description":"Glob patterns for paths whose commits should be included."},"exclude_paths":{"$ref":"#/definitions/stringArray","description":"Glob patterns for paths whose commits should be excluded."}}},"remoteConfig":{"description":"Git remote integration options.","type":"object","additionalProperties":true,"properties":{"offline":{"description":"Whether to disable external calls even when remotes are configured.","type":"boolean"},"github":{"$ref":"#/definitions/remote"},"gitlab":{"$ref":"#/definitions/remote"},"gitea":{"$ref":"#/definitions/remote"},"bitbucket":{"$ref":"#/definitions/remote"},"azure_devops":{"$ref":"#/definitions/remote"}}},"remote":{"type":"object","additionalProperties":true,"required":["owner","repo"],"properties":{"owner":{"description":"Remote owner or organization.","type":"string"},"repo":{"description":"Remote repository name.","type":"string"},"token":{"$ref":"#/definitions/optionalString","description":"Access token for the remote."},"api_url":{"$ref":"#/definitions/optionalString","description":"API URL for the remote."},"native_tls":{"$ref":"#/definitions/optionalBoolean","description":"Whether to use the platform native certificate store."}}},"bump":{"description":"Version bumping options.","type":"object","additionalProperties":true,"properties":{"features_always_bump_minor":{"$ref":"#/definitions/optionalBoolean","description":"Whether feature commits always trigger a minor version bump."},"breaking_always_bump_major":{"$ref":"#/definitions/optionalBoolean","description":"Whether breaking changes always trigger a major version bump."},"initial_tag":{"$ref":"#/definitions/optionalString","description":"Initial version used when no tags are found."},"custom_major_increment_regex":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern for custom commit types that trigger major increments."},"custom_minor_increment_regex":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern for custom commit types that trigger minor increments."},"no_increment_regex":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern for commit types that do not increment the version."},"bump_type":{"description":"Forced version bump type.","oneOf":[{"type":"string","enum":["major","minor","patch"]},{"type":"null"}]}}},"textProcessor":{"type":"object","additionalProperties":true,"required":["pattern"],"properties":{"pattern":{"description":"Rust regex pattern to match text.","type":"string"},"replace":{"$ref":"#/definitions/optionalString","description":"Replacement text."},"replace_command":{"$ref":"#/definitions/optionalString","description":"Command used to transform the matched text."}}},"commitParser":{"type":"object","additionalProperties":true,"properties":{"sha":{"$ref":"#/definitions/optionalString","description":"Commit SHA to match."},"message":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern matched against the commit message."},"body":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern matched against the commit body."},"footer":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern matched against the commit footer."},"group":{"$ref":"#/definitions/optionalString","description":"Changelog group assigned to matching commits."},"default_scope":{"$ref":"#/definitions/optionalString","description":"Default scope assigned when a matching commit has no scope."},"scope":{"$ref":"#/definitions/optionalString","description":"Scope assigned to matching commits."},"skip":{"$ref":"#/definitions/optionalBoolean","description":"Whether to skip matching commits."},"field":{"$ref":"#/definitions/optionalString","description":"Commit context field to match."},"pattern":{"$ref":"#/definitions/optionalString","description":"Rust regex pattern matched against the configured field."}}},"linkParser":{"type":"object","additionalProperties":true,"required":["pattern","href"],"properties":{"pattern":{"description":"Rust regex pattern used to find links in commit messages.","type":"string"},"href":{"description":"URL template for generated links.","type":"string"},"text":{"$ref":"#/definitions/optionalString","description":"Optional text template for generated links."}}},"stringArray":{"type":"array","items":{"type":"string"}},"optionalString":{"type":["string","null"]},"optionalBoolean":{"type":["boolean","null"]}}}