From fa5fd39c11ff67ad0e2d6c37d76de65d460d5030 Mon Sep 17 00:00:00 2001 From: Imants Date: Wed, 17 Jun 2026 21:10:31 +0300 Subject: [PATCH] fix: accept an uppercase status token in changelog release headers --- scripts/linters/lint-changelog.ts | 6 +++--- scripts/linters/lint-readme.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/linters/lint-changelog.ts b/scripts/linters/lint-changelog.ts index 23be66301..aff1abe51 100644 --- a/scripts/linters/lint-changelog.ts +++ b/scripts/linters/lint-changelog.ts @@ -156,10 +156,10 @@ const promoteBoldChangeTypeLabels = (lines: string[]): string[] => const normaliseReleaseHeaders = (lines: string[], errors: string[]): string[] => lines.map(line => { - const bracketed = /^## \[(?[^\]]+)\]\s*\((?\d{4}-\d{2}-\d{2})\)/.exec(line) + const bracketed = /^## \[(?[^\]]+)\]\s*\((?\d{4}-\d{2}-\d{2}|[A-Z][A-Z0-9-]*)\)/.exec(line) if (bracketed?.groups) {return `## [${bracketed.groups.ver}] (${bracketed.groups.date})`} - const bracketedMissingClose = /^## \[(?[^\]]+)\]\s*\((?\d{4}-\d{2}-\d{2})$/.exec(line) + const bracketedMissingClose = /^## \[(?[^\]]+)\]\s*\((?\d{4}-\d{2}-\d{2}|[A-Z][A-Z0-9-]*)$/.exec(line) if (bracketedMissingClose?.groups) { return `## [${bracketedMissingClose.groups.ver}] (${bracketedMissingClose.groups.date})` } @@ -170,7 +170,7 @@ const normaliseReleaseHeaders = (lines: string[], errors: string[]): string[] => return line } - const plain = /^## (?\d[^\s(]+)\s*(?:\((?\d{4}-\d{2}-\d{2})\))?/.exec(line) + const plain = /^## (?\d[^\s(]+)\s*(?:\((?\d{4}-\d{2}-\d{2}|[A-Z][A-Z0-9-]*)\))?/.exec(line) if (!plain?.groups) {return line} if (plain.groups.date) {return `## [${plain.groups.ver}] (${plain.groups.date})`} errors.push(`CHANGELOG.md: Release header missing date: ${line}`) diff --git a/scripts/linters/lint-readme.ts b/scripts/linters/lint-readme.ts index 5f52d6536..3f51746c2 100644 --- a/scripts/linters/lint-readme.ts +++ b/scripts/linters/lint-readme.ts @@ -20,7 +20,7 @@ * Screenshots, Changelog, Upgrade Notice * * Changelog section (inside readme.txt) - * - Version sub-headers: = X.Y.Z (YYYY-MM-DD) = + * - Version sub-headers: = X.Y.Z (YYYY-MM-DD) = or an uppercase status token, e.g. = X.Y.Z (UPCOMING) = * - Change-type labels: __Added__, __Changed__, __Fixed__, __Removed__, * __Deprecated__, __Security__ * (### headings and **Bold** variants are demoted / normalised) @@ -51,7 +51,7 @@ const CLI_ARGS_START_INDEX = 2 const SUBSECTION_TITLECASE_MAX_WORDS = 2 const LIST_MARKER_LENGTH = 2 -const RE_DATE_SRC = '\\d{4}-\\d{2}-\\d{2}' +const RE_DATE_SRC = '(?:\\d{4}-\\d{2}-\\d{2}|[A-Z][A-Z0-9-]*)' const RE_VERSION_SRC = '\\d+\\.\\d+(?:\\.\\d+)*(?:-[a-zA-Z0-9.]+)?' /** Known == Section == names (canonical capitalisation). */