Skip to content

fix(release): consolidate release config and pin conventionalcommits preset to v9 - #128

Merged
dawsontoth merged 1 commit into
mainfrom
fix/release-notes-consistency
Jul 27, 2026
Merged

fix(release): consolidate release config and pin conventionalcommits preset to v9#128
dawsontoth merged 1 commit into
mainfrom
fix/release-notes-consistency

Conversation

@dawsontoth

Copy link
Copy Markdown
Contributor

Why

Our semantic-release repos generate GitHub release notes with the conventionalcommits preset, but the behavior had drifted and, in several repos, notes were coming out empty. Two separate causes:

  1. Preset v10 breaks rendering. @semantic-release/release-notes-generator@14 still bundles the Handlebars-based conventional-changelog-writer@8. The conventional-changelog-conventionalcommits v10 preset rewrote its templates as JS functions for the newer @conventional-changelog/template engine (writer@9); fed to writer@8 only the header survives, so every release note collapses to just its ## [x.y.z]… line.
  2. presetConfig.types drift. Types like chore/chore(deps)/ci/build/style were hidden or missing, so dependency-only releases (the common Renovate case) produced empty notes.

This PR makes the repo consistent with studio's canonical release config (which surfaces every commit type) and holds the preset on v9 where relevant. Reference: HarperFast/studio#1560.

What changed

  • Resolved config shadowing: .releaserc.json (which had no presetConfig) was silently overriding release.config.js (cosmiconfig loads the first match), so the preset fell back to defaults and hid chore(deps) — dependency-only releases (e.g. v1.11.1) came out empty. Moved the presetConfig into .releaserc.json and deleted the dead release.config.js.
  • Aligned presetConfig.types to studio's superset.
  • conventional-changelog-conventionalcommits devDependency ^10.0.0^9.3.1 (+ regenerated package-lock.json) — hygiene so it can't bite if extra_plugins is ever added.
  • Added the Renovate guard.

Canonical presetConfig.types (matches studio)

feat→Features, fix→Bug Fixes, perf→Performance Improvements, refactor→Refactoring, chore(deps)→Dependency Updates, chore→Chores, docs→Documentation, style→Styles, test→Tests, build→Build System, ci→Continuous Integration, revert→Reverts — nothing hidden, so no release comes out empty.

Renovate guard

Added a packageRules entry pinning conventional-changelog-conventionalcommits to <10 so Renovate won't re-introduce the v10 breakage. Remove once @semantic-release/release-notes-generator ships a writer@9-based major.

Verification

  • .releaserc.json is valid JSON; renovate-config-validator passes.
  • Lockfile regenerated (--package-lock-only); npm ci passes under npm 10.8.2 (the Node 20/22 CI matrix version). Lock diff is limited to the preset 10→9 swap — no unrelated churn.

🤖 Generated with Claude Code

…preset to v9

- **Resolved config shadowing:** `.releaserc.json` (which had no `presetConfig`) was silently overriding `release.config.js` (cosmiconfig loads the first match), so the preset fell back to defaults and hid `chore(deps)` — dependency-only releases (e.g. v1.11.1) came out empty. Moved the `presetConfig` into `.releaserc.json` and **deleted the dead `release.config.js`**.
- Aligned `presetConfig.types` to studio's superset.
- `conventional-changelog-conventionalcommits` devDependency `^10.0.0` → `^9.3.1` (+ regenerated `package-lock.json`) — hygiene so it can't bite if `extra_plugins` is ever added.
- Added the Renovate guard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@dawsontoth
dawsontoth requested a review from a team as a code owner July 27, 2026 16:58

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

Copy link
Copy Markdown

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 configures the @semantic-release/release-notes-generator in .releaserc.json and downgrades conventional-changelog-conventionalcommits to ^9.3.1 (with a corresponding pinning rule in renovate.json) to avoid empty release notes due to compatibility issues with conventional-changelog-writer@8. Feedback points out that the conventionalcommits preset does not support filtering or grouping by scope (such as "scope": "deps"). As a result, the first "chore" entry will match all chore commits, rendering the second entry unreachable and misgrouping all chores under "Dependency Updates". It is recommended to combine these entries.

Comment thread .releaserc.json
@dawsontoth
dawsontoth merged commit 6afaa65 into main Jul 27, 2026
33 checks passed
@dawsontoth
dawsontoth deleted the fix/release-notes-consistency branch July 27, 2026 17:11
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 1.11.2 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant