test: stabilize alpha plugin prerelease sweep

(cherry picked from commit c6b84a66a6)
This commit is contained in:
Tideclaw
2026-06-01 15:09:03 +00:00
parent fbcbfcc7b8
commit 022d3378fd
3 changed files with 20 additions and 15 deletions

View File

@@ -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");

View File

@@ -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

View File

@@ -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")}`,
);
});