How do I add a releaseRule that also respects the `!` for a breaking change? (conventionalcommits preset)
We’re using the conventionalcommits preset. In this preset, adding an exclamation after the type triggers a breaking change/major version bump.
Using the default releaseRules this works. feat!:, fix!: and perf!: are recognized as major/breaking changes.
In fact, anything with an exclamation triggers a major/breaking change, such as docs!: or even allGloryToTheHypnoToad!:
Now we want to add refactor as a type.
plugins: [
[
'@semantic-release/commit-analyzer',
{
preset: 'conventionalcommits'
releaseRules: [{ type: 'refactor', release: 'patch' }]
}
],
After adding this, refactor: triggers a patch change, as expected.
But refactor!: no longer triggers a major version bump.
How do we get this to work?
Edit to add version info: semantic-release 19.0.5, @semantic-release/commit-analyzer 9.0.2, Node 16.19.0
I had the same issue like you.
But I found a solution by adding {breaking: true, release: 'major'} on my releaseRules
{
preset: 'conventionalcommits',
releaseRules: [
{ breaking: true, release: 'major' },
{ type: 'feat', release: 'minor' },
{ type: 'feature', release: 'minor' },
{ type: 'fix', release: 'patch' },
{ type: 'style', release: 'patch' },
{ type: 'refactor', release: 'patch' },
{ type: 'perf', release: 'patch' },
{ type: 'build', release: 'patch' },
{ type: 'chore', release: 'patch' },
{ type: 'revert', release: 'patch' }
]
}
I also had the same issue when I tried to commit a perf commit with BREAKING CHANGE: in the body, I was expecting a major release but instead it triggers the patch.
"@semantic-release/commit-analyzer",
{
"preset": "conventionalcommits",
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
},
"releaseRules": [
{ "type": "docs", "release": "patch" },
{ "type": "refactor", "release": "patch" },
{ "type": "style", "release": "patch" },
{ "type": "test", "release": "patch" },
{ "type": "ci", "release": "patch" },
{ "type": "chore", "release": "patch" },
{ "type": "perf", "release": "patch" }
]
}
Is there is any way to add multiple types with multiple release?
Or something to override the rules if it found the BREAKING CHANGE: word in the body of the commit message?
I had the same issue like you.
But I found a solution by adding
{breaking: true, release: 'major'}on my releaseRules{ preset: 'conventionalcommits', releaseRules: [ { breaking: true, release: 'major' }, { type: 'feat', release: 'minor' }, { type: 'feature', release: 'minor' }, { type: 'fix', release: 'patch' }, { type: 'style', release: 'patch' }, { type: 'refactor', release: 'patch' }, { type: 'perf', release: 'patch' }, { type: 'build', release: 'patch' }, { type: 'chore', release: 'patch' }, { type: 'revert', release: 'patch' } ] }