From 1161146b1a1a5c41a6a4f82322575f55b68bd09f Mon Sep 17 00:00:00 2001 From: Sarah Dayan <5370675+sarahdayan@users.noreply.github.com> Date: Thu, 5 Feb 2026 12:54:35 +0100 Subject: [PATCH 1/4] fix: handle tag in changelog extraction conventional-changelog wraps patch version headers in tags, e.g., `## 0.28.1 (2026-02-05)`. The regex wasn't matching this format, causing GitHub releases to have empty bodies. Co-Authored-By: Claude Opus 4.5 --- .../extractSpecificChangelog.spec.js | 31 +++++++++++++++++++ .../src/helper/extractSpecificChangelog.js | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js b/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js index d9ea47c75..4c40386d7 100644 --- a/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js +++ b/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js @@ -125,4 +125,35 @@ describe('extractSpecificChangelog', () => { `); }); }); + + describe('patch releases with tag', () => { + it('works with tag around version', () => { + const changelog = `## 0.28.1 (2026-02-05) + +### Bug fixes + +* fix something (#123) + +# [0.28.0](https://github.com/example/repo/compare/v0.27.0...v0.28.0) (2026-02-03) + +### Features + +* add feature (#100) +`; + expect( + extractSpecificChangelog({ + changelog, + version: '0.28.1', + }) + ).toMatchInlineSnapshot(` + "## 0.28.1 (2026-02-05) + + ### Bug fixes + + * fix something (#123) + + " + `); + }); + }); }); diff --git a/packages/shipjs/src/helper/extractSpecificChangelog.js b/packages/shipjs/src/helper/extractSpecificChangelog.js index 241556446..108328a47 100644 --- a/packages/shipjs/src/helper/extractSpecificChangelog.js +++ b/packages/shipjs/src/helper/extractSpecificChangelog.js @@ -4,7 +4,7 @@ export default function extractSpecificChangelog({ changelog, version }) { } const escapedVersion = version.replace(/\./g, '\\.'); const regex = new RegExp( - `(#+?\\s\\[?v?${escapedVersion}\\]?[\\s\\S]*?)(#+?\\s\\[?v?\\d+?\\.\\d+?\\.\\d+?\\]?)`, + `(#+?\\s(?:)?\\[?v?${escapedVersion}\\]?[\\s\\S]*?)(#+?\\s(?:)?\\[?v?\\d+?\\.\\d+?\\.\\d+?\\]?)`, 'g' ); const matches = regex.exec(changelog); From 7f61d2148b436ba07cca9c5eea590ddbc0c9a78e Mon Sep 17 00:00:00 2001 From: Sarah Dayan <5370675+sarahdayan@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:00:09 +0100 Subject: [PATCH 2/4] Revert "fix: handle tag in changelog extraction" This reverts commit 1161146b1a1a5c41a6a4f82322575f55b68bd09f. --- .../extractSpecificChangelog.spec.js | 31 ------------------- .../src/helper/extractSpecificChangelog.js | 2 +- 2 files changed, 1 insertion(+), 32 deletions(-) diff --git a/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js b/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js index 4c40386d7..d9ea47c75 100644 --- a/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js +++ b/packages/shipjs/src/helper/__tests__/extractSpecificChangelog.spec.js @@ -125,35 +125,4 @@ describe('extractSpecificChangelog', () => { `); }); }); - - describe('patch releases with tag', () => { - it('works with tag around version', () => { - const changelog = `## 0.28.1 (2026-02-05) - -### Bug fixes - -* fix something (#123) - -# [0.28.0](https://github.com/example/repo/compare/v0.27.0...v0.28.0) (2026-02-03) - -### Features - -* add feature (#100) -`; - expect( - extractSpecificChangelog({ - changelog, - version: '0.28.1', - }) - ).toMatchInlineSnapshot(` - "## 0.28.1 (2026-02-05) - - ### Bug fixes - - * fix something (#123) - - " - `); - }); - }); }); diff --git a/packages/shipjs/src/helper/extractSpecificChangelog.js b/packages/shipjs/src/helper/extractSpecificChangelog.js index 108328a47..241556446 100644 --- a/packages/shipjs/src/helper/extractSpecificChangelog.js +++ b/packages/shipjs/src/helper/extractSpecificChangelog.js @@ -4,7 +4,7 @@ export default function extractSpecificChangelog({ changelog, version }) { } const escapedVersion = version.replace(/\./g, '\\.'); const regex = new RegExp( - `(#+?\\s(?:)?\\[?v?${escapedVersion}\\]?[\\s\\S]*?)(#+?\\s(?:)?\\[?v?\\d+?\\.\\d+?\\.\\d+?\\]?)`, + `(#+?\\s\\[?v?${escapedVersion}\\]?[\\s\\S]*?)(#+?\\s\\[?v?\\d+?\\.\\d+?\\.\\d+?\\]?)`, 'g' ); const matches = regex.exec(changelog); From ff8c3aa5265aea4dedc927da171333255c291d66 Mon Sep 17 00:00:00 2001 From: Sarah Dayan <5370675+sarahdayan@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:00:37 +0100 Subject: [PATCH 3/4] fix: pass preset parserOpts and writerOpts to conventional-changelog The angular preset's header template (with links and proper formatting) wasn't being used because parserOpts and writerOpts from the loaded preset weren't being passed to conventional-changelog-core. This caused changelog entries to use the default writer template which: - Wraps patch versions in tags - Omits the compare link on versions Now the preset's templates are properly applied, producing consistent changelog entries like: ## [0.28.1](https://github.com/.../compare/v0.28.0...v0.28.1) (date) Co-Authored-By: Claude Opus 4.5 --- packages/shipjs/src/step/prepare/updateChangelog.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/shipjs/src/step/prepare/updateChangelog.js b/packages/shipjs/src/step/prepare/updateChangelog.js index 123c2636d..5391c0cc9 100644 --- a/packages/shipjs/src/step/prepare/updateChangelog.js +++ b/packages/shipjs/src/step/prepare/updateChangelog.js @@ -164,12 +164,13 @@ function runConventionalChangelog({ fs.writeFileSync(args.outfile, ''); } + const { parserOpts, writerOpts } = args.config || {}; const changelogStream = conventionalChangelogCore( args, templateContext, { ...gitRawCommitsOpts, path: dir }, - undefined, - undefined, + parserOpts, + writerOpts, { path: dir, cwd: dir } ).on('error', reject); From 6070f44a30c659560ca72ce337388c8ac03a12a0 Mon Sep 17 00:00:00 2001 From: Sarah Dayan <5370675+sarahdayan@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:05:49 +0100 Subject: [PATCH 4/4] docs: fix v0.28.1 changelog header format Co-Authored-By: Claude Opus 4.5 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6efffcb93..50a995e51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.28.1 (2026-02-05) +## [0.28.1](https://github.com/algolia/shipjs/compare/v0.28.0...v0.28.1) (2026-02-05) ### Bug fixes