Skip to content

ci: support semver breaking changes#6963

Merged
birkskyum merged 1 commit intomainfrom
ci--support-semver-"!"-commits-properly
Mar 18, 2026

Hidden character warning

The head ref may contain hidden characters: "ci--support-semver-"!"-commits-properly"
Merged

ci: support semver breaking changes#6963
birkskyum merged 1 commit intomainfrom
ci--support-semver-"!"-commits-properly

Conversation

@birkskyum
Copy link
Copy Markdown
Member

@birkskyum birkskyum commented Mar 18, 2026

This pr will make a proper "Breaking Changes" section if there are any. A breaking change is marked by exlcamation mark, like feat!:

Summary by CodeRabbit

  • Chores
    • Updated release notes generation to recognize and categorize breaking changes marked with an exclamation mark in conventional commit messages.
    • Breaking changes are now automatically placed in a dedicated section of generated release notes for improved visibility.
    • Extended conventional commit parsing to support the "type(scope)!: message" format.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 18, 2026

📝 Walkthrough

Walkthrough

The GitHub release script is updated to recognize breaking changes in conventional commits marked with trailing exclamation marks (e.g., type(scope)!: message), with a new 'breaking' category added to the release notes output and breaking commits separated into a dedicated grouping bucket.

Changes

Cohort / File(s) Summary
Breaking Changes Support
scripts/create-github-release.mjs
Extended conventional commits parsing to detect breaking changes via exclamation mark syntax; added 'breaking' to typeOrder and typeLabels; updated grouping logic to separate breaking commits into dedicated bucket; adjusted capture group indexing for message extraction.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 Breaking changes hop into view,
With exclamation marks shining through!
The script now sorts what's old from new,
Categorized and crystal clear—phew!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'ci: support semver breaking changes' clearly relates to the main change in the changeset, which adds support for detecting breaking changes (via the '!' marker in conventional commits) and creates a dedicated Breaking Changes section in release output.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci--support-semver-"!"-commits-properly
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@nx-cloud
Copy link
Copy Markdown
Contributor

nx-cloud bot commented Mar 18, 2026

View your CI Pipeline Execution ↗ for commit 6959a29

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded <1s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 4s View ↗

☁️ Nx Cloud last updated this comment at 2026-03-18 00:26:59 UTC

@github-actions
Copy link
Copy Markdown
Contributor

🚀 Changeset Version Preview

No changeset entries found. Merging this PR will not cause a version bump for any packages.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Mar 18, 2026

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/@tanstack/arktype-adapter@6963

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/@tanstack/eslint-plugin-router@6963

@tanstack/history

npm i https://pkg.pr.new/@tanstack/history@6963

@tanstack/nitro-v2-vite-plugin

npm i https://pkg.pr.new/@tanstack/nitro-v2-vite-plugin@6963

@tanstack/react-router

npm i https://pkg.pr.new/@tanstack/react-router@6963

@tanstack/react-router-devtools

npm i https://pkg.pr.new/@tanstack/react-router-devtools@6963

@tanstack/react-router-ssr-query

npm i https://pkg.pr.new/@tanstack/react-router-ssr-query@6963

@tanstack/react-start

npm i https://pkg.pr.new/@tanstack/react-start@6963

@tanstack/react-start-client

npm i https://pkg.pr.new/@tanstack/react-start-client@6963

@tanstack/react-start-server

npm i https://pkg.pr.new/@tanstack/react-start-server@6963

@tanstack/router-cli

npm i https://pkg.pr.new/@tanstack/router-cli@6963

@tanstack/router-core

npm i https://pkg.pr.new/@tanstack/router-core@6963

@tanstack/router-devtools

npm i https://pkg.pr.new/@tanstack/router-devtools@6963

@tanstack/router-devtools-core

npm i https://pkg.pr.new/@tanstack/router-devtools-core@6963

@tanstack/router-generator

npm i https://pkg.pr.new/@tanstack/router-generator@6963

@tanstack/router-plugin

npm i https://pkg.pr.new/@tanstack/router-plugin@6963

@tanstack/router-ssr-query-core

npm i https://pkg.pr.new/@tanstack/router-ssr-query-core@6963

@tanstack/router-utils

npm i https://pkg.pr.new/@tanstack/router-utils@6963

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/@tanstack/router-vite-plugin@6963

@tanstack/solid-router

npm i https://pkg.pr.new/@tanstack/solid-router@6963

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/@tanstack/solid-router-devtools@6963

@tanstack/solid-router-ssr-query

npm i https://pkg.pr.new/@tanstack/solid-router-ssr-query@6963

@tanstack/solid-start

npm i https://pkg.pr.new/@tanstack/solid-start@6963

@tanstack/solid-start-client

npm i https://pkg.pr.new/@tanstack/solid-start-client@6963

@tanstack/solid-start-server

npm i https://pkg.pr.new/@tanstack/solid-start-server@6963

@tanstack/start-client-core

npm i https://pkg.pr.new/@tanstack/start-client-core@6963

@tanstack/start-fn-stubs

npm i https://pkg.pr.new/@tanstack/start-fn-stubs@6963

@tanstack/start-plugin-core

npm i https://pkg.pr.new/@tanstack/start-plugin-core@6963

@tanstack/start-server-core

npm i https://pkg.pr.new/@tanstack/start-server-core@6963

@tanstack/start-static-server-functions

npm i https://pkg.pr.new/@tanstack/start-static-server-functions@6963

@tanstack/start-storage-context

npm i https://pkg.pr.new/@tanstack/start-storage-context@6963

@tanstack/valibot-adapter

npm i https://pkg.pr.new/@tanstack/valibot-adapter@6963

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/@tanstack/virtual-file-routes@6963

@tanstack/vue-router

npm i https://pkg.pr.new/@tanstack/vue-router@6963

@tanstack/vue-router-devtools

npm i https://pkg.pr.new/@tanstack/vue-router-devtools@6963

@tanstack/vue-router-ssr-query

npm i https://pkg.pr.new/@tanstack/vue-router-ssr-query@6963

@tanstack/vue-start

npm i https://pkg.pr.new/@tanstack/vue-start@6963

@tanstack/vue-start-client

npm i https://pkg.pr.new/@tanstack/vue-start-client@6963

@tanstack/vue-start-server

npm i https://pkg.pr.new/@tanstack/vue-start-server@6963

@tanstack/zod-adapter

npm i https://pkg.pr.new/@tanstack/zod-adapter@6963

commit: 6959a29

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/create-github-release.mjs (1)

163-179: ⚠️ Potential issue | 🔴 Critical

Breaking markers still get filtered out before grouping.

breaking: ... commits parse as type === 'breaking', and chore!: ... / ci!: ... commits parse as breaking, but both are dropped by the user-facing type check before they can reach the new breaking bucket. That means the release can still miss the exact breaking markers this PR is meant to surface.

Suggested fix
   const conventionalMatch = subject.match(/^(\w+)(?:\(([^)]*)\))?(!)?:\s*(.*)$/)
   const type = conventionalMatch ? conventionalMatch[1] : 'other'
-  const isBreaking = conventionalMatch ? !!conventionalMatch[3] : false
+  const isBreaking = conventionalMatch
+    ? type === 'breaking' || !!conventionalMatch[3]
+    : false
   const scope = conventionalMatch ? conventionalMatch[2] || '' : ''
   const message = conventionalMatch ? conventionalMatch[4] : subject
 
   // Only include user-facing change types
-  if (!['feat', 'fix', 'perf', 'refactor', 'build'].includes(type)) continue
+  if (
+    !isBreaking &&
+    !['feat', 'fix', 'perf', 'refactor', 'build'].includes(type)
+  ) {
+    continue
+  }
 
   // Extract PR number if present
   const prMatch = message.match(/\(#(\d+)\)/)
   const prNumber = prMatch ? prMatch[1] : null
 
   const bucket = isBreaking ? 'breaking' : type
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/create-github-release.mjs` around lines 163 - 179, The current filter
discards commits before grouping because it only allows types in
['feat','fix','perf','refactor','build'], so commits parsed as breaking
(type==='breaking') or commits with a '!' (isBreaking true) never reach the
"breaking" bucket; update the filter logic around
conventionalMatch/type/isBreaking so that you only continue (skip) when the
commit is neither one of the allowed user-facing types nor a breaking marker —
e.g., change the check that uses type and isBreaking to allow commits where
isBreaking is true or type === 'breaking' in addition to the existing allowed
list — then keep the existing bucket assignment (const bucket = isBreaking ?
'breaking' : type) and push into groups[bucket] as before.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@scripts/create-github-release.mjs`:
- Around line 163-179: The current filter discards commits before grouping
because it only allows types in ['feat','fix','perf','refactor','build'], so
commits parsed as breaking (type==='breaking') or commits with a '!' (isBreaking
true) never reach the "breaking" bucket; update the filter logic around
conventionalMatch/type/isBreaking so that you only continue (skip) when the
commit is neither one of the allowed user-facing types nor a breaking marker —
e.g., change the check that uses type and isBreaking to allow commits where
isBreaking is true or type === 'breaking' in addition to the existing allowed
list — then keep the existing bucket assignment (const bucket = isBreaking ?
'breaking' : type) and push into groups[bucket] as before.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 94e8d7c2-1a69-4c77-8c2e-08b6bf8d4b0a

📥 Commits

Reviewing files that changed from the base of the PR and between cd7116b and 6959a29.

📒 Files selected for processing (1)
  • scripts/create-github-release.mjs

@birkskyum birkskyum merged commit 1340197 into main Mar 18, 2026
7 checks passed
@birkskyum birkskyum deleted the ci--support-semver-"!"-commits-properly branch March 18, 2026 00:32
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