返回 DeepSeek-Reasonix
validate-stable-release-record.mjs
根目录 / scripts / validate-stable-release-record.mjs
1 #!/usr/bin/env node
2
3 import { readFileSync } from "node:fs";
4 import { isDeepStrictEqual } from "node:util";
5 import { releaseForVersion, validateCatalog } from "./release-notes.mjs";
6
7 const [catalogPath, version, previousCatalogPath] = process.argv.slice(2);
8 if (!catalogPath || !/^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/.test(version || "")) {
9 throw new Error("usage: validate-stable-release-record.mjs CATALOG MAJOR.MINOR.PATCH [PREVIOUS_CATALOG]");
10 }
11
12 const catalog = validateCatalog(JSON.parse(readFileSync(catalogPath, "utf8")));
13 const release = releaseForVersion(catalog, version);
14 if (release.version !== version || release.channel !== "stable" || release.status !== "reviewed") {
15 throw new Error(`v${version} must have one reviewed Stable release record`);
16 }
17
18 if (previousCatalogPath) {
19 const previousCatalog = validateCatalog(JSON.parse(readFileSync(previousCatalogPath, "utf8")));
20 const previousRelease = previousCatalog.releases.find((entry) => entry.version === version);
21 if (previousRelease && isDeepStrictEqual(previousRelease, release)) {
22 throw new Error(`v${version} reviewed Stable record was not introduced or changed by the candidate commit`);
23 }
24 }
25
26 console.log(`reviewed Stable release record verified: v${version}`);
27
27 lines Plain Text