From d36cfc44b21d6b2897ff1ff55f0c252eb66b2aa1 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sun, 18 Oct 2026 17:58:04 +0700 Subject: [PATCH] ci(changelog): suggest .md when an added file has no type --- scripts/ci/check-changelog.py | 5 ++++- scripts/ci/test_check_changelog.py | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/ci/check-changelog.py b/scripts/ci/check-changelog.py index 191feb2133..e2cb467253 100755 --- a/scripts/ci/check-changelog.py +++ b/scripts/ci/check-changelog.py @@ -172,7 +172,10 @@ def pull_request_problems(number: int, title: str, base: str, files: List[Change if changed.status != "added" or owner is None or changed.filename[len(FRAGMENTS) + 1:] in IGNORED: continue if owner != str(number) and owner not in removed: - rest = changed.filename[len(FRAGMENTS) + 1:].partition(".")[2] or ".md" + rest = changed.filename[len(FRAGMENTS) + 1:].partition(".")[2] + # A rest with no dot holds no type, so towncrier would refuse it as a suffix. + if "." not in rest: + rest = ".md" problems.append(f"{changed.filename} is not named for this pull request. " f"Name it {FRAGMENTS}/{number}.{rest}") return problems diff --git a/scripts/ci/test_check_changelog.py b/scripts/ci/test_check_changelog.py index 8821d945bc..2004f7b499 100644 --- a/scripts/ci/test_check_changelog.py +++ b/scripts/ci/test_check_changelog.py @@ -238,9 +238,12 @@ def test_an_orphan_fragment_on_main_is_refused(self): problems = self.problems([changed("changelog.d/+theme.fixed.md")]) self.assertIn("Name it changelog.d/3600.fixed.md", problems[0]) - def test_a_file_that_is_not_a_fragment_is_refused(self): - self.assertEqual(len(self.problems([changed("changelog.d/notes.txt")])), 1) - self.assertIn("Name it changelog.d/3600..md", self.problems([changed("changelog.d/notes")])[0]) + def test_a_file_that_is_not_a_fragment_gets_the_type_placeholder(self): + for name in ("notes.txt", "README.md", "notes"): + with self.subTest(name=name): + problems = self.problems([changed(f"changelog.d/{name}")]) + self.assertEqual(len(problems), 1) + self.assertIn("Name it changelog.d/3600..md", problems[0]) def test_gitkeep_is_not_a_fragment(self): self.assertEqual(self.problems([changed("changelog.d/.gitkeep")]), [])