Skip to content

fix: bump major version for breaking changes in release automation#544

Merged
jdx merged 1 commit intomainfrom
fix/cliff-breaking-version
Mar 13, 2026
Merged

fix: bump major version for breaking changes in release automation#544
jdx merged 1 commit intomainfrom
fix/cliff-breaking-version

Conversation

@jdx
Copy link
Copy Markdown
Owner

@jdx jdx commented Mar 13, 2026

Summary

  • Adds [bump] section to cliff.toml with breaking_always_bump_major = true
  • Without this, git cliff --bumped-version ignored the ! breaking change indicator in conventional commits (e.g. feat!(spec):) and only bumped the minor version instead of major
  • This caused the release PR chore: release v3.0.0 #527 to incorrectly version as v2.18.3 instead of v3.0.0

Test plan

  • Verify git cliff --bumped-version returns a major bump when breaking commits exist

🤖 Generated with Claude Code


Note

Low Risk
Low risk: a config-only change that affects release/changelog version bumping, with no runtime code paths impacted.

Overview
Updates cliff.toml to add a [bump] configuration enabling breaking_always_bump_major = true, so git cliff --bumped-version treats conventional-commit breaking changes (e.g., !/footer) as a major version bump during release automation.

Written by Cursor Bugbot for commit bc3395c. This will update automatically on new commits. Configure here.

git-cliff was not configured to bump the major version when commits
use the conventional commit `!` breaking change indicator (e.g.
`feat!:` or `feat!(scope):`). Add `[bump]` config with
`breaking_always_bump_major = true`.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request resolves an issue in the release automation process where git cliff was failing to correctly identify and apply major version bumps for breaking changes indicated by the ! marker in conventional commits. By adding breaking_always_bump_major = true to the [bump] section of cliff.toml, the system will now accurately increment the major version, preventing incorrect versioning in future releases.

Highlights

  • Release Automation: Configured cliff.toml to ensure major version bumps for breaking changes, addressing an issue where git cliff previously only bumped minor versions despite conventional commit breaking change indicators.
Changelog
  • cliff.toml
    • Added [bump] section with breaking_always_bump_major = true to ensure correct major version bumping for breaking changes.
Activity
  • Author provided a test plan to verify git cliff --bumped-version returns a major bump when breaking commits exist.
  • The pull request was generated with Claude Code.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@jdx jdx merged commit 6eecb6e into main Mar 13, 2026
8 of 10 checks passed
@jdx jdx deleted the fix/cliff-breaking-version branch March 13, 2026 14:16
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a configuration change to cliff.toml to fix an issue with version bumping in the release automation. By setting breaking_always_bump_major = true, it ensures that conventional commits with breaking changes correctly trigger a major version increment. The change is simple, effective, and includes a helpful comment. The implementation is correct and I have no suggestions for improvement.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Mar 13, 2026

Greptile Summary

This PR fixes a bug in the release automation where git cliff --bumped-version was bumping only the minor version instead of major when breaking conventional commits (e.g. feat!(spec):) were present. The root cause was that git-cliff's default behavior ignores the ! breaking-change marker for version bumping unless breaking_always_bump_major = true is explicitly set in a [bump] config section.

Key changes:

  • Adds a [bump] section to cliff.toml with breaking_always_bump_major = true, directly fixing the version calculation used in tasks/release-plz.
  • The fix is minimal, targeted, and correct — the [bump] section is well-supported by the "cargo:git-cliff" = "latest" tooling declared in mise.toml.
  • One minor note: protect_breaking_commits remains false, which means breaking-change commits that happen to match a skip = true commit parser could theoretically bypass the bump logic; this is low risk given the current skip patterns.

Confidence Score: 5/5

  • This PR is safe to merge — it is a single-line config addition that correctly fixes a version-bumping bug with no side effects.
  • The change is minimal (3 lines added to a TOML config), well-understood, and directly corresponds to git-cliff's documented [bump] API. The fix has been verified against the release script (tasks/release-plz) that calls git cliff --bumped-version. No code logic, tests, or other tooling is affected.
  • No files require special attention.

Important Files Changed

Filename Overview
cliff.toml Adds [bump] section with breaking_always_bump_major = true — a correct, minimal fix ensuring git-cliff bumps the major version for breaking conventional commits (feat!, fix!, etc.).

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Push to main] --> B[release-plz workflow triggered]
    B --> C{Current version already released?}
    C -- Yes --> D[Run: git cliff --bumped-version]
    C -- No --> E[Publish crates & tag current version]
    D --> F{Commits contain breaking change?\ne.g. feat!}
    F -- Before fix\nbreaking_always_bump_major=false --> G[Bump MINOR version\ne.g. v2.18.2 → v2.18.3 ❌]
    F -- After fix\nbreaking_always_bump_major=true --> H[Bump MAJOR version\ne.g. v2.x.x → v3.0.0 ✅]
    G --> I[Create/update release PR with wrong version]
    H --> J[Create/update release PR with correct version]
Loading

Comments Outside Diff (1)

  1. cliff.toml, line 109 (link)

    Consider enabling protect_breaking_commits

    With breaking_always_bump_major = true now active, a breaking-change commit that also happens to match one of the skip = true parsers (e.g. a chore(release)!: automated commit) would still be silently excluded from the bump calculation because protect_breaking_commits = false allows filtered commits to disappear before the bump logic runs.

    For this repo the current skip patterns (^chore\(release\):, ^chore\(pr\), etc.) are unlikely to carry a ! marker, so there is no immediate bug — but enabling the flag is a low-cost belt-and-suspenders measure to guarantee that no breaking change is ever silently dropped:

Fix All in Claude Code

Last reviewed commit: bc3395c

jdx added a commit that referenced this pull request Mar 13, 2026
…545)

## Summary
- `breaking_always_bump_major` from #544 didn't work — `git cliff
--bumped-version` still returned `v2.18.3` instead of `v3.0.0`
- Adds `custom_major_increment_regex` to explicitly match the `!`
breaking change indicator in conventional commits (`feat!:`,
`feat(scope)!:`, etc.)
- This is a belt-and-suspenders fix alongside
`breaking_always_bump_major`

Follow-up to #544

## Test plan
- [ ] After merge, verify release automation updates PR #527 to v3.0.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk config-only change that affects version bumping; main risk is
unintended major bumps if the regex matches more commit messages than
expected.
> 
> **Overview**
> **Adjusts git-cliff bumping behavior** to more reliably detect
breaking changes from conventional commits.
> 
> Adds `custom_major_increment_regex` in `cliff.toml` to explicitly
treat `feat!:` / `type(scope)!:` style messages as major-version
increments, complementing `breaking_always_bump_major`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e77f510. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 4.6 <[email protected]>
jdx pushed a commit that referenced this pull request Mar 13, 2026
### 🚀 Features

- **(spec)** **breaking** add support for license, before/after help
metadata by [@jdx](https://github.com/jdx) in
[#542](#542)

### 🐛 Bug Fixes

- **(cobra)** escape newlines, tabs, and carriage returns in
kdlQuoteAlways by [@thecodesmith](https://github.com/thecodesmith) in
[#539](#539)
- bump major version for breaking changes in release automation by
[@jdx](https://github.com/jdx) in
[#544](#544)
- add custom_major_increment_regex for breaking change detection by
[@jdx](https://github.com/jdx) in
[#545](#545)
- handle all breaking change commit formats in major bump regex by
[@jdx](https://github.com/jdx) in
[27e1ab1](27e1ab1)
- normalize breaking change commit format in preprocessor by
[@jdx](https://github.com/jdx) in
[aa72b92](aa72b92)

### 📚 Documentation

- add argparse-usage integration by [@jdx](https://github.com/jdx) in
[#531](#531)
- mark KDL code blocks as KDL and use correct inline-comment `//` by
[@muzimuzhi](https://github.com/muzimuzhi) in
[#536](#536)
- fix include syntax to match implementation by
[@jdx](https://github.com/jdx) in
[#540](#540)
- consolidate integration list to single source by
[@jdx](https://github.com/jdx) in
[#541](#541)
- fix link to integrations by [@muzimuzhi](https://github.com/muzimuzhi)
in [#543](#543)

### 🛡️ Security

- **(deps)** update dependency eslint to v10 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#526](#526)

### 🔍 Other Changes

- Added an integration with ruby's OptionParser by
[@packrat386](https://github.com/packrat386) in
[#533](#533)

### 📦️ Dependency Updates

- update actions/setup-node digest to 53b8394 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#525](#525)
- update jdx/mise-action action to v3 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#528](#528)
- update rust crate roff to v1 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#529](#529)

### New Contributors

- @thecodesmith made their first contribution in
[#539](#539)
- @packrat386 made their first contribution in
[#533](#533)
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Apr 2, 2026
⚠️ **CAUTION: this is a major update, indicating a breaking change!** ⚠️

This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [usage](https://github.com/jdx/usage) | major | `2.18.2` → `3.2.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>jdx/usage (usage)</summary>

### [`v3.2.0`](https://github.com/jdx/usage/blob/HEAD/CHANGELOG.md#320---2026-03-23)

[Compare Source](jdx/usage@v3.1.0...v3.2.0)

##### 🚀 Features

- Support env-backed choices with `choices env=...` by [@&#8203;mustafa0x](https://github.com/mustafa0x) in [#&#8203;548](jdx/usage#548)

##### 🐛 Bug Fixes

- **(zsh)** escape parentheses and brackets in completion descriptions by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;559](jdx/usage#559)

##### New Contributors

- [@&#8203;mustafa0x](https://github.com/mustafa0x) made their first contribution in [#&#8203;548](jdx/usage#548)

### [`v3.1.0`](https://github.com/jdx/usage/blob/HEAD/CHANGELOG.md#310---2026-03-22)

[Compare Source](jdx/usage@v3.0.0...v3.1.0)

##### 🚀 Features

- **(cli)** render all doc-related fields in --help output by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;554](jdx/usage#554)
- **(cli)** support reading spec from stdin via --file - by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;555](jdx/usage#555)

##### 🐛 Bug Fixes

- **(zsh)** remove trailing space from completions and add directory slash by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;556](jdx/usage#556)
- use field assignment for non-exhaustive Spec in benchmarks by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;552](jdx/usage#552)

##### 📦️ Dependency Updates

- update apple-actions/import-codesign-certs digest to [`fe74d46`](jdx/usage@fe74d46) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;550](jdx/usage#550)
- update codecov/codecov-action digest to [`1af5884`](jdx/usage@1af5884) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;551](jdx/usage#551)
- lock file maintenance by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;547](jdx/usage#547)

### [`v3.0.0`](https://github.com/jdx/usage/blob/HEAD/CHANGELOG.md#300---2026-03-13)

[Compare Source](jdx/usage@v2.18.2...v3.0.0)

##### 🚀 Features

- **(spec)** **breaking** add support for license, before/after help metadata by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;542](jdx/usage#542)

##### 🐛 Bug Fixes

- **(cobra)** escape newlines, tabs, and carriage returns in kdlQuoteAlways by [@&#8203;thecodesmith](https://github.com/thecodesmith) in [#&#8203;539](jdx/usage#539)
- bump major version for breaking changes in release automation by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;544](jdx/usage#544)
- add custom\_major\_increment\_regex for breaking change detection by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;545](jdx/usage#545)
- handle all breaking change commit formats in major bump regex by [@&#8203;jdx](https://github.com/jdx) in [27e1ab1](jdx/usage@27e1ab1)
- normalize breaking change commit format in preprocessor by [@&#8203;jdx](https://github.com/jdx) in [aa72b92](jdx/usage@aa72b92)

##### 📚 Documentation

- add argparse-usage integration by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;531](jdx/usage#531)
- mark KDL code blocks as KDL and use correct inline-comment `//` by [@&#8203;muzimuzhi](https://github.com/muzimuzhi) in [#&#8203;536](jdx/usage#536)
- fix include syntax to match implementation by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;540](jdx/usage#540)
- consolidate integration list to single source by [@&#8203;jdx](https://github.com/jdx) in [#&#8203;541](jdx/usage#541)
- fix link to integrations by [@&#8203;muzimuzhi](https://github.com/muzimuzhi) in [#&#8203;543](jdx/usage#543)

##### 🛡️ Security

- **(deps)** update dependency eslint to v10 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;526](jdx/usage#526)

##### 🔍 Other Changes

- Added an integration with ruby's OptionParser by [@&#8203;packrat386](https://github.com/packrat386) in [#&#8203;533](jdx/usage#533)

##### 📦️ Dependency Updates

- update actions/setup-node digest to [`53b8394`](jdx/usage@53b8394) by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;525](jdx/usage#525)
- update jdx/mise-action action to v3 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;528](jdx/usage#528)
- update rust crate roff to v1 by [@&#8203;renovate\[bot\]](https://github.com/renovate\[bot]) in [#&#8203;529](jdx/usage#529)

##### New Contributors

- [@&#8203;thecodesmith](https://github.com/thecodesmith) made their first contribution in [#&#8203;539](jdx/usage#539)
- [@&#8203;packrat386](https://github.com/packrat386) made their first contribution in [#&#8203;533](jdx/usage#533)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuMTAiLCJ1cGRhdGVkSW5WZXIiOiI0My4xMDIuMTAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbIlJlbm92YXRlIEJvdCIsImF1dG9tYXRpb246Ym90LWF1dGhvcmVkIiwiZGVwZW5kZW5jeS10eXBlOjptYWpvciJdfQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant