website/blog/git-cliff-2.5.0.md
git-cliff is a command-line tool (written in Rust) that provides a highly customizable way to generate changelogs from git history.
It supports using custom regular expressions to alter changelogs which are mostly based on conventional commits. With a single configuration file, a wide variety of formats can be applied for a changelog, thanks to the Jinja2/Django-inspired template engine.
More information and examples can be found in the GitHub repository.
The full changelog can be found here.
Meet our powerful new command-line argument: --from-context.
# create a context
$ git cliff --context -o context.json
# generate changelog from context
$ git cliff --from-context context.json
This new extension point allows transformations on the context and can be especially useful when preprocessor/postprocessor/linkprocessor capabilities are limited.
One example use case is:
git-cliffIf you need additional data in the changelog, you can also use the newly added extra free-form metadata in the context:
{
"id": "5061081d6272b1da2146fab49d803c193db309d9",
"message": "commit message",
"extra": {
"note": "this can be anything"
}
}
git-cliff now supports grouping commits by arbitrary context fields instead of just a limited set. This means that you can use any context field for commit_parsers as field.
For example, to group by GitHub PR labels:
[git]
commit_parsers = [
{ field = "github.pr_labels", pattern = "breaking-change", group = "<!-- 0 --> 🏗️ Breaking changes" },
{ field = "github.pr_labels", pattern = "type/enhancement", group = "<!-- 1 --> 🚀 Features" },
{ field = "github.pr_labels", pattern = "type/bug", group = "<!-- 2 --> 🐛 Fixes" },
{ field = "github.pr_labels", pattern = "type/update", group = "<!-- 3 --> 🧪 Dependencies" },
{ field = "github.pr_labels", pattern = "type/refactor", group = "<!-- 4 --> 🏭 Refactor" },
{ field = "github.pr_labels", pattern = "area/documentation", group = "<!-- 5 --> 📝 Documentation" },
{ field = "github.pr_labels", pattern = ".*", group = "<!-- 6 --> 🌀 Miscellaneous" },
]
See the commit_parsers documentation for more information.
Now you can specify the semver type while using --bump:
$ git cliff --bump [major|minor|patch]
See the bump documentation for more information.
git-cliff now runs 258x faster for --include-path/--exclude-path arguments thanks to caching the commit retain checks.
Now: 0.080 s
Before: 20.633 s
We also improved handling of include/exclude patterns (e.g., by considering the first commit).
See the implementation for cool flamegraphs and more!
git-cliff now supports building with performance profiling instrumentation, which helps identify bottlenecks.
To create a flame graph SVG:
$ cargo run --profile=bench --features=profiler
See the documentation for more information.
Before this change, the only way to activate a remote integration (and fetch remote data) was by incorporating the related variables in a template.
This meant that the changelog context wouldn't contain GitHub-related fields unless you used something like github.contributors in your template.
Now we’ve added support for enabling the remote integration in the following cases:
[remote] table is configured.--github-repo).So, the following output will contain GitHub variables even with the default template (since the remote is set):
$ git cliff --context --github-repo orhun/git-cliff
Additionally, we fixed a bug where some of the GitHub-related variables were not recognized in the template.
count_tagsA new configuration option has been added to the [git] section!
[git]
count_tags = "v.*-beta.*"
:::info
count_tags works like an inverted version of ignore_tags, including all the commits but only counting the specific tags.
:::
See the implementation for more details and an example use case.
git-cliff won a prize for finishing second place in the KaiCode Open Source Festival!
The orhun/git-cliff project (8.3K★), a customizable changelog generator, impressed us with its excellent easy-to-read source code, build pipeline organization, integration testing, and active issue triaging. However, code coverage is rather low, some functions are too long, there is a lack of peer reviews, and a lack of clarity in the repository structure. $1024 was the reward.
--gitlab-repo (#807) - (6fbfdb5)--bumped-version without conventional commits (#806) - (e74080c)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!
If you liked git-cliff and/or my other projects on GitHub, consider donating to support my open source endeavors.
Have a fantastic day! ⛰️