mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 05:51:15 +08:00
test: stabilize alpha plugin prerelease sweep
(cherry picked from commit c6b84a66a6)
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")}`,
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user