From cf07f287e5d19f67042245069e98283d677b2e37 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 28 May 2026 01:26:59 +0800 Subject: [PATCH] Update changelog related scripts (#19226) --- scripts/changelog-for-patch.js | 23 +++++++++++++---------- scripts/draft-blog-post.js | 23 ++++++++++++++--------- scripts/generate-changelog.js | 2 +- scripts/lint-changelog.js | 2 +- scripts/utilities/changelog-categories.js | 22 ---------------------- scripts/utilities/changelog.js | 15 ++++----------- 6 files changed, 33 insertions(+), 54 deletions(-) delete mode 100644 scripts/utilities/changelog-categories.js diff --git a/scripts/changelog-for-patch.js b/scripts/changelog-for-patch.js index 764a40e70..048bc7fb3 100644 --- a/scripts/changelog-for-patch.js +++ b/scripts/changelog-for-patch.js @@ -1,12 +1,12 @@ #!/usr/bin/env node +import fs from "node:fs"; import path from "node:path"; import { parseArgs } from "node:util"; import semver from "semver"; import { categories, - changelogUnreleasedDirPath, - changelogUnreleasedDirs, + changelogUnreleasedDirectory, getEntries, printEntries, replaceVersions, @@ -14,16 +14,19 @@ import { const { previousVersion, newVersion } = parseArguments(); -const entries = changelogUnreleasedDirs.flatMap((dir) => { - const dirPath = path.join(changelogUnreleasedDirPath, dir.name); - const { title } = categories.find((category) => category.dir === dir.name); +const entries = fs + .readdirSync(changelogUnreleasedDirectory, { withFileTypes: true }) + .filter((entry) => entry.isDirectory()) + .flatMap((dir) => { + const dirPath = path.join(dir.path, dir.name); + const { title } = categories.find((category) => category.dir === dir.name); - return getEntries(dirPath).map((entry) => { - const content = - entry.content.slice(0, 4) + ` ${title}:` + entry.content.slice(4); - return { ...entry, content }; + return getEntries(dirPath).map((entry) => { + const content = + entry.content.slice(0, 4) + ` ${title}:` + entry.content.slice(4); + return { ...entry, content }; + }); }); -}); console.log( replaceVersions( diff --git a/scripts/draft-blog-post.js b/scripts/draft-blog-post.js index 09e96971d..238d631fe 100644 --- a/scripts/draft-blog-post.js +++ b/scripts/draft-blog-post.js @@ -7,8 +7,7 @@ import fg from "fast-glob"; import semver from "semver"; import { categories, - changelogUnreleasedDirPath, - changelogUnreleasedDirs, + changelogUnreleasedDirectory, getEntries, printEntries, replaceVersions, @@ -16,11 +15,11 @@ import { const { __dirname, require } = createEsmUtils(import.meta); const blogDir = path.join(__dirname, "../website/blog"); -const introTemplateFile = path.join( - changelogUnreleasedDirPath, +const introTemplateFile = new URL( "BLOG_POST_INTRO_TEMPLATE.md", + changelogUnreleasedDirectory, ); -const introFile = path.join(changelogUnreleasedDirPath, "blog-post-intro.md"); +const introFile = new URL("blog-post-intro.md", changelogUnreleasedDirectory); if (!fs.existsSync(introFile)) { fs.copyFileSync(introTemplateFile, introFile); } @@ -41,12 +40,18 @@ const categoriesByDir = new Map( categories.map((category) => [category.dir, category]), ); -for (const dir of changelogUnreleasedDirs) { - const dirPath = path.join(changelogUnreleasedDirPath, dir.name); - const category = categoriesByDir.get(dir.name); +for (const entry of fs.readdirSync(changelogUnreleasedDirectory, { + withFileTypes: true, +})) { + if (!entry.isDirectory()) { + continue; + } + + const dirPath = path.join(entry.path, entry.name); + const category = categoriesByDir.get(entry.name); if (!category) { - throw new Error("Unknown category: " + dir.name); + throw new Error("Unknown category: " + entry.name); } category.entries = getEntries(dirPath, { useFriendlyHeadingId: true }); diff --git a/scripts/generate-changelog.js b/scripts/generate-changelog.js index 81cfcde0a..e3d78565e 100755 --- a/scripts/generate-changelog.js +++ b/scripts/generate-changelog.js @@ -12,7 +12,7 @@ import fs from "node:fs/promises"; import enquirer from "enquirer"; import openEditor from "open-editor"; -import { CHANGELOG_CATEGORIES } from "./utilities/changelog-categories.js"; +import { CHANGELOG_CATEGORIES } from "./utilities/changelog.js"; const prNumberPrompt = new enquirer.NumberPrompt({ message: "Input your Pull Request number:", diff --git a/scripts/lint-changelog.js b/scripts/lint-changelog.js index 9f5d61868..a96348951 100644 --- a/scripts/lint-changelog.js +++ b/scripts/lint-changelog.js @@ -6,7 +6,7 @@ import indexToPosition from "index-to-position"; import { outdent } from "outdent"; import remarkParse from "remark-parse"; import unified from "unified"; -import { CHANGELOG_CATEGORIES } from "./utilities/changelog-categories.js"; +import { CHANGELOG_CATEGORIES } from "./utilities/changelog.js"; const CHANGELOG_DIR = "changelog_unreleased"; const TEMPLATE_FILE = "TEMPLATE.md"; diff --git a/scripts/utilities/changelog-categories.js b/scripts/utilities/changelog-categories.js deleted file mode 100644 index da74b1d41..000000000 --- a/scripts/utilities/changelog-categories.js +++ /dev/null @@ -1,22 +0,0 @@ -export const CHANGELOG_CATEGORIES = [ - "angular", - "api", - "cli", - "css", - "flow", - "graphql", - "handlebars", - "html", - "javascript", - "json", - "less", - "lwc", - "mjml", - "markdown", - "mdx", - "scss", - "typescript", - "vue", - "yaml", - "misc", -]; diff --git a/scripts/utilities/changelog.js b/scripts/utilities/changelog.js index ad352c7f1..ba2409947 100644 --- a/scripts/utilities/changelog.js +++ b/scripts/utilities/changelog.js @@ -1,13 +1,10 @@ import fs from "node:fs"; import path from "node:path"; -import createEsmUtils from "esm-utils"; import semver from "semver"; -const { __dirname } = createEsmUtils(import.meta); - -export const changelogUnreleasedDirPath = path.join( - __dirname, - "../../changelog_unreleased", +export const changelogUnreleasedDirectory = new URL( + "../../changelog_unreleased/", + import.meta.url, ); export const categories = [ @@ -33,11 +30,7 @@ export const categories = [ { dir: "misc", title: "Miscellaneous" }, ]; -export const changelogUnreleasedDirs = fs - .readdirSync(changelogUnreleasedDirPath, { - withFileTypes: true, - }) - .filter((entry) => entry.isDirectory()); +export const CHANGELOG_CATEGORIES = categories.map(({ dir }) => dir); export function getEntries(dirPath, options) { const fileNames = fs