What's new in 2.11.0? π

git-cliff is a command-line tool that provides a highly customizable way to generate changelogs from the Git history.
What's new? β°οΈβ
The full changelog can be found here.
This is going to be the last release of 2025!
Wishing you all a fantastic new year ahead filled with Git commits, automated changelogs and cliff jumps! πβ°οΈ
π Azure DevOps Integrationβ
git-cliff now supports Azure Devops for remote integration, enabling changelog generation with metadata from Azure DevOps repositories (commits, pull requests, and contributors). π₯³
Simply configure your cliff.toml for your own repository as follows:
# Azure DevOps integration for fetching commit metadata.
[remote.azure_devops]
owner = "shiftme/gitcliff"
repo = "git-cliff-readme-example"
And then update your [changelog].body with the relevant template variables, e.g. {{ commit.remote.pr_number }}, {{ commit.remote.username }} and so on.
e.g. results in:
## What's Changed in v1.0.0
- Initial commit by @orhun
- docs(project): add README.md by @orhun
- feat(parser): add ability to parse arrays by @orhun
- fix(args): rename help argument due to conflict by @orhun
- docs(example)!: add tested usage example by @orhun
### New Contributors
- @orhun made their first contribution
For more information, see the documentation.
Thanks to @amd989 for the implementation in #1283!
β Failing on unmatched commitsβ
A new configuration variable was added for enforcing that all commits are matched by a commit parser:
[git]
commit_parsers = [
{ message = "^feat", group = "Should be matched" },
]
fail_on_unmatched_commit = true
If fail_on_unmatched_commit is set to true, git-cliff will fail when any commit included in the changelog is not matched by any of the configured commit_parsers.
π§© New built-in filtersβ
git-cliff now has new custom filters you can use inside templates:
-
upper_first: Converts the first character of a string to uppercase.{{ "hello" | upper_first }} β Hello -
find_regex: Finds all occurrences of a regex pattern in a string.{{ "hello world, hello universe" | find_regex(pat="hello") }} β [hello, hello] -
replace_regex: Replaces all occurrences of a regex pattern with a string.{{ "hello world" | replace_regex(from="o", to="a") }} β hella warld -
split_regex: Splits a string by a regex pattern.{{ "hello world, hello universe" | split_regex(pat=" ") }} β [hello, world,, hello, universe]
π Increased log verbosityβ
We have evaluated and increased the verbosity of some log messages to provide better insights into the internal workings of git-cliff.
To get more detailed logs, provide one or multiple -v flags when running:
$ git cliff -vv
β¨ Better include-path handlingβ
-
The
--include_path's behavior has been revised and several reported issues have been addressed in #1290 thanks to @ognis1205! -
--include-pathis now automatically set to the value of--workdirif the latter is provided. This ensures that commit parsing works as expected when a different working directory is specified.
Before:
git cliff --workdir my_crate --include-path my_crate
After:
git cliff --workdir my_crate
π¦ Better APIβ
The git-cliff library crates (git_cliff & git_cliff_core) has been improved with several new features and enhancements!
git_cliff::runnow returns the generatedgit_cliff_core::changelog::Changelog,git_cliff::write_changeloghelper writes it to a file or stdout,git_cliff::init_configfunction handles config creation,git_cliff::check_new_versionis now public.
Breaking changes:
Changelog::new/Changelog::from_contexttakeConfigby value
Here is how you can create a minimal git-cliff application in Rust:
use clap::Parser;
use git_cliff::args::Opt;
use git_cliff_core::error::Result;
fn main() -> Result<()> {
let args = Opt::parse();
let changelog = git_cliff::run(args.clone())?;
git_cliff::write_changelog(&args, changelog, std::io::stdout())?;
Ok(())
}
π§° Otherβ
- (bump) Write bumped version to stdout even when output config is set (#1307) - (314ff57)
- (args) Group remote-related CLI arguments under REMOTE OPTIONS heading (#1271) - (0b6af12)
- (remote) Expose commits and PRs as streams (#1272) - (b82221a)
- (ci) Stabilize lychee link checking in CI (#1295) - (7ed1db0)
New Contributors β€οΈβ
- @Lewiscowles1986 made their first contribution in #1226
- @OpenSauce made their first contribution in #1314
- @amd989 made their first contribution in #1283
- @asweet-confluent made their first contribution in #1272
- @linus-skold made their first contribution in #1287
- @simoncdn made their first contribution in #1305
- @haidaraM made their first contribution in #1285
- @ritoban23 made their first contribution in #1271
Any contribution is highly appreciated! See the contribution guidelines for getting started.
Feel free to submit issues and join our Discord / Matrix for discussion!
Follow git-cliff on Twitter & Mastodon to not miss any news!
Support πβ
If you liked git-cliff and/or my other projects on GitHub, consider donating to support my open source endeavors.
- π GitHub Sponsors: @orhun
- β Buy Me A Coffee: https://www.buymeacoffee.com/orhun
Have a fantastic day! β°οΈ
