From 022d3378fdbefef645dbef3edfb9051c17f2066a Mon Sep 17 00:00:00 2001 From: Tideclaw Date: Mon, 1 Jun 2026 15:09:03 +0000 Subject: [PATCH] test: stabilize alpha plugin prerelease sweep (cherry picked from commit c6b84a66a6452af85338bca486d53559648af3ec) --- .../probe.mjs | 19 ++++++++++++------- .../bundled-plugin-install-uninstall/sweep.sh | 10 +++++----- ...led-plugin-install-uninstall-probe.test.ts | 6 +++--- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/scripts/e2e/lib/bundled-plugin-install-uninstall/probe.mjs b/scripts/e2e/lib/bundled-plugin-install-uninstall/probe.mjs index 8a98e19d8168..084ec5eb1593 100644 --- a/scripts/e2e/lib/bundled-plugin-install-uninstall/probe.mjs +++ b/scripts/e2e/lib/bundled-plugin-install-uninstall/probe.mjs @@ -101,23 +101,26 @@ function readPluginsList() { return Array.isArray(payload.plugins) ? payload.plugins : []; } -function pluginRequiresConfig(pluginDir) { +function pluginConfigRequirements(pluginDir) { const manifestPath = path.join(pluginDir, "openclaw.plugin.json"); if (!fs.existsSync(manifestPath)) { throw new Error(`missing bundled plugin manifest: ${manifestPath}`); } const manifest = readJson(manifestPath); const required = manifest.configSchema?.required; - if (Array.isArray(required) && required.some((value) => typeof value === "string")) { - return true; - } + const installRequiresConfig = + Array.isArray(required) && required.some((value) => typeof value === "string"); const channelEnvVars = manifest.channelEnvVars && typeof manifest.channelEnvVars === "object" ? Object.values(manifest.channelEnvVars) : []; - return channelEnvVars.some( + const runtimeRequiresConfig = channelEnvVars.some( (envVars) => Array.isArray(envVars) && envVars.some((value) => typeof value === "string"), ); + return { + installRequiresConfig, + runtimeRequiresConfig: installRequiresConfig || runtimeRequiresConfig, + }; } async function loadPackagedBundledEntries() { @@ -135,7 +138,7 @@ async function loadPackagedBundledEntries() { id, dir: path.basename(pluginDir), rootDir: pluginDir, - requiresConfig: pluginRequiresConfig(pluginDir), + ...pluginConfigRequirements(pluginDir), }; }) .filter(Boolean) @@ -257,7 +260,9 @@ function assertUninstalled(pluginId, pluginDir) { const [command, pluginId, pluginDir, requiresConfig] = process.argv.slice(2); if (command === "select") { for (const entry of await selectedManifestEntries()) { - console.log(`${entry.id}\t${entry.dir}\t${entry.requiresConfig ? "1" : "0"}\t${entry.rootDir}`); + console.log( + `${entry.id}\t${entry.dir}\t${entry.installRequiresConfig ? "1" : "0"}\t${entry.runtimeRequiresConfig ? "1" : "0"}\t${entry.rootDir}`, + ); } } else if (command === "assert-installed") { assertInstalled(pluginId, pluginDir, requiresConfig === "1"); diff --git a/scripts/e2e/lib/bundled-plugin-install-uninstall/sweep.sh b/scripts/e2e/lib/bundled-plugin-install-uninstall/sweep.sh index 31c21a2a2fa3..3dc8a958e3dd 100644 --- a/scripts/e2e/lib/bundled-plugin-install-uninstall/sweep.sh +++ b/scripts/e2e/lib/bundled-plugin-install-uninstall/sweep.sh @@ -60,14 +60,14 @@ while IFS= read -r plugin_entry; do done < /tmp/bundled-plugin-sweep-ids selected_labels=() for plugin_entry in "${plugin_entries[@]}"; do - IFS=$'\t' read -r plugin_id plugin_dir _requires_config _plugin_root <<<"$plugin_entry" + IFS=$'\t' read -r plugin_id plugin_dir _install_requires_config _runtime_requires_config _plugin_root <<<"$plugin_entry" selected_labels+=("${plugin_id}@${plugin_dir}") done echo "Selected ${#plugin_entries[@]} bundled plugins for shard ${OPENCLAW_BUNDLED_PLUGIN_SWEEP_INDEX:-0}/${OPENCLAW_BUNDLED_PLUGIN_SWEEP_TOTAL:-1}: ${selected_labels[*]}" plugin_index=0 for plugin_entry in "${plugin_entries[@]}"; do - IFS=$'\t' read -r plugin_id plugin_dir requires_config plugin_root <<<"$plugin_entry" + IFS=$'\t' read -r plugin_id plugin_dir install_requires_config runtime_requires_config plugin_root <<<"$plugin_entry" install_log="/tmp/openclaw-install-${plugin_index}.log" uninstall_log="/tmp/openclaw-uninstall-${plugin_index}.log" plugin_started_at="$(now_ms)" @@ -78,12 +78,12 @@ for plugin_entry in "${plugin_entries[@]}"; do cat "$install_log" fi install_finished_at="$(now_ms)" - node "$probe" assert-installed "$plugin_id" "$plugin_dir" "$requires_config" + node "$probe" assert-installed "$plugin_id" "$plugin_dir" "$install_requires_config" installed_asserted_at="$(now_ms)" if [[ "${OPENCLAW_BUNDLED_PLUGIN_RUNTIME_SMOKE:-1}" != "0" ]]; then echo "Running bundled plugin runtime smoke: $plugin_id ($plugin_dir)" - node "$runtime_smoke" plugin "$plugin_id" "$plugin_dir" "$requires_config" "$plugin_index" "$plugin_root" - node "$runtime_smoke" tts-global-disable "$plugin_id" "$plugin_dir" "$requires_config" "$plugin_index" "$plugin_root" "" + node "$runtime_smoke" plugin "$plugin_id" "$plugin_dir" "$runtime_requires_config" "$plugin_index" "$plugin_root" + node "$runtime_smoke" tts-global-disable "$plugin_id" "$plugin_dir" "$runtime_requires_config" "$plugin_index" "$plugin_root" "" if [[ "$plugin_id" == "${OPENCLAW_BUNDLED_PLUGIN_TTS_LIVE_PROVIDER:-openai}" ]]; then node "$runtime_smoke" tts-openai-live "$plugin_id" "$plugin_dir" "$requires_config" "$plugin_index" fi diff --git a/test/scripts/bundled-plugin-install-uninstall-probe.test.ts b/test/scripts/bundled-plugin-install-uninstall-probe.test.ts index 7dbb7a3b8123..d8d529c68b3a 100644 --- a/test/scripts/bundled-plugin-install-uninstall-probe.test.ts +++ b/test/scripts/bundled-plugin-install-uninstall-probe.test.ts @@ -1017,11 +1017,11 @@ describe("bundled plugin install/uninstall probe", () => { expect(result.status).toBe(0); expect(result.stdout.trim()).toBe( - `admin-http-rpc\tadmin-http-rpc\t1\t${path.join(root, "dist-runtime", "extensions", "admin-http-rpc")}`, + `admin-http-rpc\tadmin-http-rpc\t1\t1\t${path.join(root, "dist-runtime", "extensions", "admin-http-rpc")}`, ); }); - it("treats channel env vars as runtime smoke config requirements", () => { + it("treats channel env vars as runtime smoke config requirements only", () => { const root = makePackageRoot(); writePluginManifest(root, "dist-runtime/extensions/clickclack", { id: "clickclack", @@ -1039,7 +1039,7 @@ describe("bundled plugin install/uninstall probe", () => { expect(result.status).toBe(0); expect(result.stdout.trim()).toBe( - `clickclack\tclickclack\t1\t${path.join(root, "dist-runtime", "extensions", "clickclack")}`, + `clickclack\tclickclack\t0\t1\t${path.join(root, "dist-runtime", "extensions", "clickclack")}`, ); });