fix: remove stale dist plugin dirs

This commit is contained in:
Peter Steinberger
2026-03-16 02:10:28 +00:00
parent 7d2ddf70c1
commit 70a6d40d37
2 changed files with 28 additions and 21 deletions

View File

@@ -135,13 +135,6 @@ export function copyBundledPluginMetadata(params = {}) {
}
const sourcePluginDirs = new Set();
const removeGeneratedPluginArtifacts = (distPluginDir) => {
removeFileIfExists(path.join(distPluginDir, "openclaw.plugin.json"));
removeFileIfExists(path.join(distPluginDir, "package.json"));
removePathIfExists(path.join(distPluginDir, GENERATED_BUNDLED_SKILLS_DIR));
removePathIfExists(path.join(distPluginDir, "node_modules"));
};
for (const dirent of fs.readdirSync(extensionsRoot, { withFileTypes: true })) {
if (!dirent.isDirectory()) {
continue;
@@ -154,7 +147,7 @@ export function copyBundledPluginMetadata(params = {}) {
const distManifestPath = path.join(distPluginDir, "openclaw.plugin.json");
const distPackageJsonPath = path.join(distPluginDir, "package.json");
if (!fs.existsSync(manifestPath)) {
removeGeneratedPluginArtifacts(distPluginDir);
removePathIfExists(distPluginDir);
continue;
}
@@ -203,7 +196,7 @@ export function copyBundledPluginMetadata(params = {}) {
continue;
}
const distPluginDir = path.join(distExtensionsRoot, dirent.name);
removeGeneratedPluginArtifacts(distPluginDir);
removePathIfExists(distPluginDir);
}
}

View File

@@ -258,6 +258,11 @@ describe("copyBundledPluginMetadata", () => {
"node_modules",
);
fs.mkdirSync(staleNodeModulesDir, { recursive: true });
fs.writeFileSync(
path.join(repoRoot, "dist", "extensions", "removed-plugin", "index.js"),
"export default {}\n",
"utf8",
);
writeJson(path.join(repoRoot, "dist", "extensions", "removed-plugin", "openclaw.plugin.json"), {
id: "removed-plugin",
configSchema: { type: "object" },
@@ -270,17 +275,26 @@ describe("copyBundledPluginMetadata", () => {
copyBundledPluginMetadata({ repoRoot });
expect(
fs.existsSync(
path.join(repoRoot, "dist", "extensions", "removed-plugin", "openclaw.plugin.json"),
),
).toBe(false);
expect(
fs.existsSync(path.join(repoRoot, "dist", "extensions", "removed-plugin", "package.json")),
).toBe(false);
expect(
fs.existsSync(path.join(repoRoot, "dist", "extensions", "removed-plugin", "bundled-skills")),
).toBe(false);
expect(fs.existsSync(staleNodeModulesDir)).toBe(false);
expect(fs.existsSync(path.join(repoRoot, "dist", "extensions", "removed-plugin"))).toBe(false);
});
it("removes stale dist outputs when a source extension directory no longer has a manifest", () => {
const repoRoot = makeRepoRoot("openclaw-bundled-plugin-manifestless-source-");
const sourcePluginDir = path.join(repoRoot, "extensions", "google-gemini-cli-auth");
fs.mkdirSync(path.join(sourcePluginDir, "node_modules"), { recursive: true });
const staleDistDir = path.join(repoRoot, "dist", "extensions", "google-gemini-cli-auth");
fs.mkdirSync(staleDistDir, { recursive: true });
fs.writeFileSync(path.join(staleDistDir, "index.js"), "export default {}\n", "utf8");
writeJson(path.join(staleDistDir, "openclaw.plugin.json"), {
id: "google-gemini-cli-auth",
configSchema: { type: "object" },
});
writeJson(path.join(staleDistDir, "package.json"), {
name: "@openclaw/google-gemini-cli-auth",
});
copyBundledPluginMetadata({ repoRoot });
expect(fs.existsSync(staleDistDir)).toBe(false);
});
});