Skip to content

Commit 4dad7bd

Browse files
committed
fix(release): tolerate npm README metadata lag
1 parent 26913e6 commit 4dad7bd

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

scripts/verify-plugin-npm-published-runtime.mjs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,12 +306,26 @@ function readPackedPackage(tarballPath, extractDir) {
306306
tar.x({ file: tarballPath, cwd: extractDir, sync: true });
307307
const packageDir = path.join(extractDir, "package");
308308
const packageJson = JSON.parse(fs.readFileSync(path.join(packageDir, "package.json"), "utf8"));
309+
const files = listFiles(packageDir);
309310
return {
310311
packageJson,
311-
files: listFiles(packageDir),
312+
files,
313+
readme: readPackedPackageReadme(packageDir, files),
312314
};
313315
}
314316

317+
export function findPackedPackageReadmePath(files) {
318+
return files.find((file) => /^readme(?:\.(?:md|markdown|txt|rst))?$/iu.test(file)) ?? "";
319+
}
320+
321+
function readPackedPackageReadme(packageDir, files) {
322+
const readmePath = findPackedPackageReadmePath(files);
323+
if (!readmePath) {
324+
return "";
325+
}
326+
return fs.readFileSync(path.join(packageDir, readmePath), "utf8").trim();
327+
}
328+
315329
export async function verifyPublishedPluginRuntime(spec) {
316330
const workingDir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-plugin-npm-runtime."));
317331
try {
@@ -326,7 +340,18 @@ export async function verifyPublishedPluginRuntime(spec) {
326340
if (errors.length > 0) {
327341
throw new Error(errors.join("\n"));
328342
}
329-
const readme = await verifyPublishedPackageReadme(spec);
343+
let readme;
344+
try {
345+
readme = await verifyPublishedPackageReadme(spec);
346+
} catch (error) {
347+
if (!packedPackage.readme) {
348+
throw error;
349+
}
350+
console.error(
351+
`npm readme metadata for ${spec} was unavailable; verified README from published tarball instead.`,
352+
);
353+
readme = packedPackage.readme;
354+
}
330355
return {
331356
packageName: packedPackage.packageJson.name,
332357
version: packedPackage.packageJson.version,

test/scripts/verify-plugin-npm-published-runtime.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { describe, expect, it } from "vitest";
22
import {
33
collectPluginNpmPublishedRuntimeErrors,
4+
findPackedPackageReadmePath,
45
parseNpmReadmeMetadata,
56
readPositiveIntEnv,
67
resolveNpmPackFilename,
@@ -210,6 +211,15 @@ describe("resolveNpmPackFilename", () => {
210211
});
211212
});
212213

214+
describe("findPackedPackageReadmePath", () => {
215+
it("finds a root package README without accepting nested documentation files", () => {
216+
expect(
217+
findPackedPackageReadmePath(["package.json", "docs/README.md", "README.md", "dist/index.js"]),
218+
).toBe("README.md");
219+
expect(findPackedPackageReadmePath(["package.json", "docs/README.md"])).toBe("");
220+
});
221+
});
222+
213223
describe("parseNpmReadmeMetadata", () => {
214224
it("accepts non-empty npm readme metadata", () => {
215225
expect(parseNpmReadmeMetadata(JSON.stringify("# Plugin\n\nInstall it."))).toBe(

0 commit comments

Comments
 (0)