Files

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

112 lines
2.9 KiB
JavaScript
Raw Permalink Normal View History

2020-03-21 22:24:23 +02:00
#!/usr/bin/env node
2021-05-15 20:09:52 +08:00
import fs from "node:fs";
2026-05-28 01:45:35 +08:00
import { createRequire } from "node:module";
2021-05-15 20:09:52 +08:00
import path from "node:path";
2022-10-23 22:23:30 +09:00
import fg from "fast-glob";
2026-09-23 13:09:12 +08:00
import * as verkit from "verkit";
2021-06-26 16:29:30 +09:00
import {
categories,
2026-05-28 01:26:59 +08:00
changelogUnreleasedDirectory,
getEntries,
2021-06-26 16:29:30 +09:00
printEntries,
replaceVersions,
2025-12-01 07:25:25 +08:00
} from "./utilities/changelog.js";
2020-03-21 22:24:23 +02:00
2026-05-28 01:45:35 +08:00
const require = createRequire(import.meta.url);
const blogDir = path.join(import.meta.dirname, "../website/blog");
2026-05-28 01:26:59 +08:00
const introTemplateFile = new URL(
"BLOG_POST_INTRO_TEMPLATE.md",
2026-05-28 01:26:59 +08:00
changelogUnreleasedDirectory,
);
2026-05-28 01:26:59 +08:00
const introFile = new URL("blog-post-intro.md", changelogUnreleasedDirectory);
if (!fs.existsSync(introFile)) {
fs.copyFileSync(introTemplateFile, introFile);
}
const prevVersion = require("../node_modules/prettier/package.json").version;
const { version } = require("../package.json");
2026-09-23 13:09:12 +08:00
const nextVersion = verkit.truncate(version, "patch");
const postGlob = path.join(blogDir, `????-??-??-${nextVersion}.md`);
2020-03-21 22:24:23 +02:00
const postFile = path.join(
blogDir,
`${new Date().toISOString().replace(/T.+/, "")}-${nextVersion}.md`,
2020-03-21 22:24:23 +02:00
);
2021-05-24 06:26:00 +08:00
const categoriesByDir = new Map(
categories.map((category) => [category.dir, category]),
);
2020-03-21 22:24:23 +02:00
2026-05-28 01:26:59 +08:00
for (const entry of fs.readdirSync(changelogUnreleasedDirectory, {
withFileTypes: true,
})) {
if (!entry.isDirectory()) {
continue;
}
2026-06-27 18:28:48 +08:00
const dirPath = path.join(entry.parentPath, entry.name);
2026-05-28 01:26:59 +08:00
const category = categoriesByDir.get(entry.name);
2020-03-21 22:24:23 +02:00
if (!category) {
2026-05-28 01:26:59 +08:00
throw new Error("Unknown category: " + entry.name);
2020-03-21 22:24:23 +02:00
}
category.entries = getEntries(dirPath, { useFriendlyHeadingId: true });
2020-03-21 22:24:23 +02:00
}
2022-10-23 22:23:30 +09:00
for (const filePath of fg.sync(postGlob)) {
fs.rmSync(filePath);
}
2020-03-21 22:24:23 +02:00
2022-03-16 13:25:48 +09:00
const introFileData = fs.readFileSync(introFile, "utf8").trim();
const TRUNCATE_COMMENT = "<!-- truncate -->";
2022-09-07 18:11:10 +09:00
const shouldPrintTruncate = !introFileData.includes(TRUNCATE_COMMENT);
2022-03-16 13:25:48 +09:00
2020-03-21 22:24:23 +02:00
fs.writeFileSync(
postFile,
replaceVersions(
[
2022-03-16 13:25:48 +09:00
introFileData,
shouldPrintTruncate ? TRUNCATE_COMMENT : "",
2021-06-26 16:29:30 +09:00
...printEntriesWithTitle({
title: "Highlights",
2021-05-10 00:15:27 +03:00
filter: (entry) => entry.section === "highlight",
}),
2021-06-26 16:29:30 +09:00
...printEntriesWithTitle({
2021-05-10 00:15:27 +03:00
title: "Breaking Changes",
filter: (entry) => entry.section === "breaking",
}),
2021-06-26 16:29:30 +09:00
...printEntriesWithTitle({
2021-05-10 00:15:27 +03:00
title: "Formatting Improvements",
filter: (entry) => entry.section === "improvement",
}),
2021-06-26 16:29:30 +09:00
...printEntriesWithTitle({
2021-05-10 00:15:27 +03:00
title: "Other Changes",
filter: (entry) => !entry.section,
}),
2022-03-16 13:25:48 +09:00
]
.filter(Boolean)
.join("\n\n") + "\n",
prevVersion,
nextVersion,
),
2020-03-21 22:24:23 +02:00
);
2021-06-26 16:29:30 +09:00
function printEntriesWithTitle({ title, filter }) {
2020-03-21 22:24:23 +02:00
const result = [];
for (const { entries = [], title } of categories) {
const filteredEntries = entries.filter(filter);
if (filteredEntries.length > 0) {
2021-09-05 22:51:23 +09:00
result.push("### " + title, ...printEntries(filteredEntries));
2020-03-21 22:24:23 +02:00
}
}
if (result.length > 0) {
2020-03-21 22:24:23 +02:00
result.unshift("## " + title);
}
return result;
}