




















@@ -14,7 +14,13 @@ const lines = original.split("\n");
1414const prPattern = new RegExp(`(?:\\(#${pr}\\)|openclaw#${pr})`, "i");
15151616function findActiveSectionIndex(arr) {
17- return arr.findIndex((line) => line.trim() === "## Unreleased");
17+ const versionUnreleasedIndex = arr.findIndex((line) =>
18+ /^##\s+.+\(\s*unreleased\s*\)\s*$/i.test(line.trim()),
19+ );
20+ if (versionUnreleasedIndex !== -1) {
21+ return versionUnreleasedIndex;
22+ }
23+ return arr.findIndex((line) => line.trim().toLowerCase() === "## unreleased");
1824}
19252026function findSectionEnd(arr, start) {
@@ -96,15 +102,15 @@ function sectionTailInsertIndex(arr, subsectionIndex) {
96102 return insertAt;
97103}
9810499-ensureActiveSection(lines);
105+const activeHeading = lines[ensureActiveSection(lines)]?.trim() || "## Unreleased";
100106101107const moved = [];
102108for (let i = 0; i < lines.length; i += 1) {
103109 if (!prPattern.test(lines[i])) {
104110 continue;
105111 }
106112 const ctx = contextFor(lines, i);
107- if (ctx.major === "## Unreleased") {
113+ if (ctx.major === activeHeading) {
108114 continue;
109115 }
110116 moved.push({
@@ -221,6 +227,28 @@ FNR == NR {
221227 file_line_count = FNR
222228}
223229END {
230+ active_release_line = 0
231+ bare_release_line = 0
232+ active_release_name = "unreleased"
233+ for (i = 1; i <= file_line_count; i++) {
234+ if (changelog[i] !~ /^## /) {
235+ continue
236+ }
237+ heading = tolower(changelog[i])
238+ if (heading ~ /^##[[:space:]]+.+\([[:space:]]*unreleased[[:space:]]*\)[[:space:]]*$/) {
239+ active_release_line = i
240+ active_release_name = changelog[i]
241+ break
242+ }
243+ if (heading == "## unreleased" && bare_release_line == 0) {
244+ bare_release_line = i
245+ }
246+ }
247+ if (active_release_line == 0 && bare_release_line != 0) {
248+ active_release_line = bare_release_line
249+ active_release_name = changelog[bare_release_line]
250+ }
251+224252 for (idx = 1; idx <= pr_added_count; idx++) {
225253 entry_line = pr_added_lines[idx]
226254 release_line = 0
@@ -235,8 +263,8 @@ END {
235263 break
236264 }
237265 }
238- if (release_line == 0 || changelog[release_line] != "## Unreleased") {
239- printf "CHANGELOG.md PR-linked entry must be in ## Unreleased: line %d: %s\n", entry_line, pr_added_text[entry_line]
266+ if (release_line == 0 || release_line != active_release_line) {
267+ printf "CHANGELOG.md PR-linked entry must be in %s: line %d: %s\n", active_release_name, entry_line, pr_added_text[entry_line]
240268 issue_count++
241269 continue
242270 }
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。