1d931506d6
Restored the released coding-agent changelog sections that the previous pre-publish fix run flattened into Unreleased. The local checkout only had tags through v15.5.15, so fix-changelogs compared against an old tag and promoted entire newly-added release sections. - Kept newly-added release-section hunks out of collectPromotableAddedItemLines so the fixer still promotes individual new items added under an existing released section, but does not rewrite whole release blocks. - Added regression coverage for the release-section case. - Restored the coding-agent changelog history and kept only the #2582 entry under Unreleased. Fixes #2582
109 lines
2.6 KiB
TypeScript
109 lines
2.6 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|
import { collectPromotableAddedItemLines, fixChangelogContent } from "./fix-changelogs";
|
|
|
|
describe("collectPromotableAddedItemLines", () => {
|
|
it("keeps new changelog item additions while ignoring moves and edits", () => {
|
|
const diff = [
|
|
"diff --git a/packages/example/CHANGELOG.md b/packages/example/CHANGELOG.md",
|
|
"--- a/packages/example/CHANGELOG.md",
|
|
"+++ b/packages/example/CHANGELOG.md",
|
|
"@@ -10,0 +11,2 @@",
|
|
"+",
|
|
"+- Added after the latest tag in a released section.",
|
|
"@@ -20 +22 @@",
|
|
"-- Moved historical entry.",
|
|
"+- Moved historical entry.",
|
|
"@@ -30 +32,2 @@",
|
|
"-- Historical entry with old wording.",
|
|
"+- Historical entry with new wording.",
|
|
"+- Another brand-new item in the same hunk.",
|
|
].join("\n");
|
|
|
|
const lines = collectPromotableAddedItemLines(diff);
|
|
|
|
expect(lines.get("packages/example/CHANGELOG.md")).toEqual(new Set([12, 33]));
|
|
});
|
|
|
|
it("does not promote items from newly added release sections", () => {
|
|
const diff = [
|
|
"diff --git a/packages/example/CHANGELOG.md b/packages/example/CHANGELOG.md",
|
|
"--- a/packages/example/CHANGELOG.md",
|
|
"+++ b/packages/example/CHANGELOG.md",
|
|
"@@ -1,0 +1,8 @@",
|
|
"+# Changelog",
|
|
"+",
|
|
"+## [1.0.0] - 2026-01-01",
|
|
"+",
|
|
"+### Fixed",
|
|
"+",
|
|
"+- Released fix.",
|
|
"+- Another released fix.",
|
|
].join("\n");
|
|
|
|
const lines = collectPromotableAddedItemLines(diff);
|
|
|
|
expect(lines.get("packages/example/CHANGELOG.md")).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("fixChangelogContent", () => {
|
|
it("moves added released-section items to Unreleased and merges duplicate category headings", () => {
|
|
const content = [
|
|
"# Changelog",
|
|
"",
|
|
"## [Unreleased]",
|
|
"### Fixed",
|
|
"",
|
|
"- Existing fix.",
|
|
"",
|
|
"### Fixed",
|
|
"",
|
|
"- Second fix.",
|
|
"",
|
|
"## [1.0.0] - 2026-01-01",
|
|
"",
|
|
"### Added",
|
|
"",
|
|
"- Historical addition.",
|
|
"- New addition in released section.",
|
|
"",
|
|
"### Fixed",
|
|
"",
|
|
"- Historical fix.",
|
|
"- New fix in released section.",
|
|
"",
|
|
].join("\n");
|
|
|
|
const result = fixChangelogContent(content, new Set([17, 22]));
|
|
|
|
expect(result.promotedItems).toBe(2);
|
|
expect(result.mergedDuplicateHeadings).toBe(1);
|
|
expect(result.content).toBe([
|
|
"# Changelog",
|
|
"",
|
|
"## [Unreleased]",
|
|
"",
|
|
"### Added",
|
|
"",
|
|
"- New addition in released section.",
|
|
"",
|
|
"### Fixed",
|
|
"",
|
|
"- Existing fix.",
|
|
"- Second fix.",
|
|
"- New fix in released section.",
|
|
"",
|
|
"## [1.0.0] - 2026-01-01",
|
|
"",
|
|
"### Added",
|
|
"",
|
|
"- Historical addition.",
|
|
"",
|
|
"### Fixed",
|
|
"",
|
|
"- Historical fix.",
|
|
"",
|
|
].join("\n"));
|
|
});
|
|
});
|