fix(plugins): normalize registry migration env flags

This commit is contained in:
Vincent Koc
2026-04-25 16:10:17 -07:00
parent c2ea0ce5a9
commit 73cacebac3
4 changed files with 55 additions and 2 deletions

View File

@@ -117,6 +117,11 @@ const BAILEYS_MEDIA_ONCE_IMPORT_RE = /import\s+\{\s*once\s*\}\s+from\s+['"]event
const BAILEYS_MEDIA_ASYNC_CONTEXT_RE =
/async\s+function\s+encryptedStream|encryptedStream\s*=\s*async/u;
function hasEnvFlag(env, key) {
const value = env?.[key]?.trim().toLowerCase();
return Boolean(value && value !== "0" && value !== "false" && value !== "no");
}
function readJson(filePath) {
return JSON.parse(readFileSync(filePath, "utf8"));
}
@@ -666,7 +671,7 @@ export async function runPluginRegistryPostinstallMigration(params = {}) {
const packageRoot = params.packageRoot ?? DEFAULT_PACKAGE_ROOT;
const env = params.env ?? process.env;
if (env[DISABLE_PLUGIN_REGISTRY_MIGRATION_ENV]?.trim()) {
if (hasEnvFlag(env, DISABLE_PLUGIN_REGISTRY_MIGRATION_ENV)) {
return { status: "disabled", migrated: false, reason: "disabled-env" };
}

View File

@@ -12,6 +12,7 @@ import {
makeTrackedTempDir,
} from "../../../plugins/test-helpers/fs-fixtures.js";
import {
DISABLE_PLUGIN_REGISTRY_MIGRATION_ENV,
FORCE_PLUGIN_REGISTRY_MIGRATION_ENV,
migratePluginRegistryForInstall,
preflightPluginRegistryInstallMigration,
@@ -268,4 +269,23 @@ describe("plugin registry install migration", () => {
],
});
});
it("treats falsey env flag strings as unset", async () => {
const stateDir = makeTempDir();
await writePersistedInstalledPluginIndex(createCurrentIndex(), { stateDir });
expect(
preflightPluginRegistryInstallMigration({
stateDir,
env: hermeticEnv({
[DISABLE_PLUGIN_REGISTRY_MIGRATION_ENV]: "0",
[FORCE_PLUGIN_REGISTRY_MIGRATION_ENV]: "false",
}),
}),
).toMatchObject({
action: "skip-existing",
force: false,
deprecationWarnings: [],
});
});
});

View File

@@ -57,7 +57,8 @@ export type PluginRegistryInstallMigrationParams = LoadInstalledPluginIndexParam
};
function hasEnvFlag(env: NodeJS.ProcessEnv | undefined, key: string): boolean {
return Boolean(env?.[key]?.trim());
const value = env?.[key]?.trim().toLowerCase();
return Boolean(value && value !== "0" && value !== "false" && value !== "no");
}
function forceDeprecationWarning(): string {

View File

@@ -349,6 +349,33 @@ describe("bundled plugin postinstall", () => {
expect(importModule).not.toHaveBeenCalled();
});
it("does not disable plugin registry migration for falsey env flag strings", async () => {
const migratePluginRegistryForInstall = vi.fn(async () => ({
status: "skip-existing",
migrated: false,
preflight: {},
}));
const importModule = vi.fn(async () => ({ migratePluginRegistryForInstall }));
await expect(
runPluginRegistryPostinstallMigration({
packageRoot: "/pkg",
env: { OPENCLAW_DISABLE_PLUGIN_REGISTRY_MIGRATION: "0" },
existsSync: vi.fn(() => true),
importModule,
log: { log: vi.fn(), warn: vi.fn() },
}),
).resolves.toMatchObject({
status: "skip-existing",
migrated: false,
});
expect(importModule).toHaveBeenCalledOnce();
expect(migratePluginRegistryForInstall).toHaveBeenCalledWith({
env: { OPENCLAW_DISABLE_PLUGIN_REGISTRY_MIGRATION: "0" },
packageRoot: "/pkg",
});
});
it("prunes stale dist files from packaged installs", async () => {
const packageRoot = await createTempDirAsync("openclaw-packaged-install-");
const currentFile = path.join(packageRoot, "dist", "channel-BOa4MfoC.js");