Skip to content

fix(release): repair the release pipeline - #68

Merged
axelhamil merged 1 commit into
mainfrom
dev
Sep 1, 2026
Merged

fix(release): repair the release pipeline#68
axelhamil merged 1 commit into
mainfrom
dev

Conversation

@axelhamil

Copy link
Copy Markdown
Owner

The merge of #67 landed on main, but the Release workflow failed before cutting a tag — main is at b33c9dec with the last tag still v1.23.0. Two config defects, no code involved.

A wrapped prose line declared a breaking change. .releaserc.json listed a bare "BREAKING" in noteKeywords next to the two spec keywords. The conventional-commits parser reads a note keyword at the start of a paragraph as a breaking-change declaration, and 22730338's body wraps onto a line beginning breaking one assertion (exit=1)…. That is why the run announced 2.0.0. Nine commits in the range use "breaking" as an ordinary word; none of them means it.

The changelog preset outran its writer. conventional-changelog-conventionalcommits floated on ^10, whose preset needs conventional-changelog-writer@9. semantic-release 25 still bundles writer 8 in both commit-analyzer and release-notes-generator, so generateNotes died on a missing Handlebars helper — after the version had been decided, which is why the log shows a version and then an error. Pinned to ^9.

Verified with semantic-release --dry-run --no-ci: the notes render and the release type is minor. Merging this re-triggers the workflow on main, which should cut v1.24.0.

Merge commit, not squash.

The release of the whole backlog computed `2.0.0` and then failed. Both
halves were config, not code.

`noteKeywords` carried a bare `"BREAKING"` alongside the two keywords the
Conventional Commits spec defines. The parser treats a note keyword at the
start of a paragraph as a breaking-change declaration, so
`22730338`'s body — which wraps onto a line beginning "breaking one
assertion (exit=1), then restoring it (exit=0)." — declared one. Nine
commits in this range contain the word "breaking" in ordinary prose; any of
them could have done it, and none of them means it. The bare keyword buys
nothing the spec keywords don't already cover and costs a major version to
a line wrap, so it goes.

`conventional-changelog-conventionalcommits` was floating on `^10`, whose
preset requires `conventional-changelog-writer@9`; semantic-release 25 still
bundles writer 8 through both `commit-analyzer` and
`release-notes-generator`, so `generateNotes` died on a missing Handlebars
helper after the version had already been decided. Pinned to `^9`, which is
the major that matches the writer actually installed. `@commitlint/config-
conventional` keeps its own nested 10 — it uses the parser, never the
writer.

Verified with `semantic-release --dry-run`: notes render, and the release
type is minor.
@axelhamil
axelhamil merged commit d46fb7c into main Sep 1, 2026
1 check passed
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

🎉 This PR is included in version 1.24.0 🎉

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