diff --git a/scripts/lib/plugin-npm-release.ts b/scripts/lib/plugin-npm-release.ts index 2f117581577..c540f16b484 100644 --- a/scripts/lib/plugin-npm-release.ts +++ b/scripts/lib/plugin-npm-release.ts @@ -250,8 +250,8 @@ export function collectPublishablePluginPackages( const validationErrors: string[] = []; const selectedExtensionIds = new Set(filters.extensionIds ?? []); const selectedPackageNames = new Set(filters.packageNames ?? []); - const hasSelectedExtensionIds = selectedExtensionIds.size > 0; - const hasSelectedPackageNames = selectedPackageNames.size > 0; + const hasSelectedExtensionIds = Array.isArray(filters.extensionIds); + const hasSelectedPackageNames = Array.isArray(filters.packageNames); for (const candidate of collectExtensionPackageJsonCandidates(rootDir)) { const { extensionId, packageDir, packageJson } = candidate; @@ -467,8 +467,11 @@ export function collectPluginReleasePlan(params?: { }) : []; const allPublishable = collectPublishablePluginPackages(params?.rootDir, { - extensionIds: params?.selectionMode === "all-publishable" ? [] : changedExtensionIds, - packageNames: params?.selection, + extensionIds: + params?.selectionMode === "all-publishable" || !params?.gitRange + ? undefined + : changedExtensionIds, + packageNames: params?.selection && params.selection.length > 0 ? params.selection : undefined, }); const selectedPublishable = params?.selectionMode === "all-publishable" diff --git a/scripts/plugin-npm-release-check.ts b/scripts/plugin-npm-release-check.ts index dddc71036da..6476cb441e7 100644 --- a/scripts/plugin-npm-release-check.ts +++ b/scripts/plugin-npm-release-check.ts @@ -18,8 +18,11 @@ export function runPluginNpmReleaseCheck(argv: string[]) { }) : []; const publishable = collectPublishablePluginPackages(".", { - extensionIds: selectionMode === "all-publishable" ? [] : changedExtensionIds, - packageNames: selection, + extensionIds: + selectionMode === "all-publishable" || !(baseRef && headRef) + ? undefined + : changedExtensionIds, + packageNames: selection.length > 0 ? selection : undefined, }); const selected = selectionMode === "all-publishable" diff --git a/test/plugin-npm-release.test.ts b/test/plugin-npm-release.test.ts index feb4ef99fbb..c54adc03b6b 100644 --- a/test/plugin-npm-release.test.ts +++ b/test/plugin-npm-release.test.ts @@ -196,6 +196,28 @@ describe("collectPublishablePluginPackages", () => { }), ]); }); + + it("treats an explicit empty extension filter as no candidates", () => { + const repoDir = makeTempRepoRoot(tempDirs, "openclaw-plugin-npm-release-"); + mkdirSync(join(repoDir, "extensions", "private-plugin"), { recursive: true }); + writeJsonFile(join(repoDir, "extensions", "private-plugin", "package.json"), { + name: "@openclaw/private-plugin", + version: "2026.4.10-beta.1", + private: true, + openclaw: { + extensions: ["./index.ts"], + release: { + publishToNpm: true, + }, + }, + }); + + expect( + collectPublishablePluginPackages(repoDir, { + extensionIds: [], + }), + ).toEqual([]); + }); }); describe("resolveSelectedPublishablePluginPackages", () => {