ci(release): analyze commits with the conventionalcommits preset - #1837
Merged
Conversation
The `!` breaking-change marker was silently ignored. `@semantic-release/commit-analyzer` was configured with the angular preset, whose header pattern is `^(\w*)(?:\((.*)\))?: (.*)$` -- no slot for `!`, so a `feat(i18n)!:` header fails to match *entirely*, not just in its breaking marker. With `type` and `notes` both empty, neither the custom rules nor the built-in defaults (`breaking -> major`, `feat -> minor`) can match, and the analyzer reports "no release". That is what happened to 40cf062 (#1830): the Release run succeeded and published nothing. `release-notes-generator` in this same config already uses `conventionalcommits`, so the two plugins disagreed -- the notes would have rendered a breaking feature the analyzer never saw. And commitlint accepts the `!` form, so we lint for a convention the release pipeline cannot act on. Aligning the analyzer fixes all three. Verified by replaying both presets over the last 400 commits on `master` and `release-v10`: exactly one verdict changes, 40cf062 from `none` to `major`. The other 399 are identical. `conventional-changelog-conventionalcommits` is already a devDependency, on both branches.
oliverlaz
requested review from
MartinCupela,
isekovanic,
santhoshvai,
szuperaz and
vishalnarkhede
as code owners
August 20, 2026 13:42
|
🎉 This PR is included in version 10.0.0-rc.5 🎉 The release is available on: Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Run 32373483292 succeeded and released nothing:
@semantic-release/commit-analyzerwas configured with the angular preset, whose header pattern is:/^(\w*)(?:\((.*)\))?: (.*)$/There is no slot for
!between the scope and the colon, so afeat(i18n)!:header fails to match entirely — not just in its breaking marker. Parsing 40cf062 with each preset:typescopeangularundefinedundefinedconventionalcommitsfeati18nWith
typeandnotesboth empty nothing can match — not the customreleaseRules, and not the built-in defaults ({breaking: true → major},{type: 'feat' → minor}). Those defaults were reachable: custom rules are tried first and the built-ins are the fallback. There is noBREAKING CHANGE:footer in the body either, which is the only other thing angular's parser reads.Three things this reconciles
release-notes-generatorin this same config already usesconventionalcommits, so the two plugins disagreed. The notes would have rendered a breaking feature the analyzer never saw.!form — the "Validate PR Title" check passed on that exact title — so we lint for a convention the release pipeline cannot act on.!and aBREAKING CHANGE:footer, rather than only the footer.Verification
Replayed both presets through the real
analyzeCommitsover the last 400 commits onmasterandrelease-v10:Exactly one verdict changes; the other 399 are identical. Also confirmed the analyzer returns
majorwhen driven from.releaserc.jsonas written, so the preset resolves —conventional-changelog-conventionalcommitsis already a devDependency.After this merges
Re-running Release from
release-v10still finds only 40cf062 sincev10.0.0-rc.4, and will now cut10.0.0-rc.5. That is what unblocks stream-chat-react#3271 and stream-chat-react-native#3777, whose CI currently compiles against published rc.3 and so cannot see the./i18nsubpath.mastercarries the identical angular config and the same latent bug, but no!commit has hit it yet. Worth the same one-line change there before one does.