fix: stabilize release validation lanes

This commit is contained in:
Peter Steinberger
2026-05-02 07:39:43 +01:00
parent 77f4fb0713
commit 4a4aad8935
4 changed files with 38 additions and 7 deletions

View File

@@ -20,7 +20,7 @@ export {
searchQaBusMessages,
sendQaBusMessage,
setQaChannelRuntime,
} from "@openclaw/qa-channel/api.js";
} from "openclaw/plugin-sdk/qa-channel";
export type {
QaBusAttachment,
QaBusConversation,

View File

@@ -79,6 +79,9 @@ export default definePluginEntry({
name: "OpenClaw Kitchen Sink",
channels: ["kitchen-sink-channel"],
providers: ["kitchen-sink-provider"],
contracts: {
tools: ["kitchen-sink-tool"],
},
configSchema: {
type: "object",
properties: {},

View File

@@ -1866,6 +1866,20 @@ async function runInstalledModelsSet(params) {
});
}
if (typeof params.providerConfig.timeoutSeconds === "number") {
await runInstalledCli({
cliPath: params.cliPath,
args: [
"config",
"set",
`models.providers.${params.providerConfig.extensionId}.models`,
"[]",
"--strict-json",
],
cwd: params.cwd,
env: params.env,
logPath: params.logPath,
timeoutMs: 2 * 60 * 1000,
});
if (typeof params.providerConfig.baseUrl === "string") {
await runInstalledCli({
cliPath: params.cliPath,
@@ -2690,6 +2704,19 @@ async function runModelsSet(params) {
});
}
if (typeof params.providerConfig.timeoutSeconds === "number") {
await runOpenClaw({
lane: params.lane,
env: params.env,
args: [
"config",
"set",
`models.providers.${params.providerConfig.extensionId}.models`,
"[]",
"--strict-json",
],
logPath: params.logPath,
timeoutMs: 2 * 60 * 1000,
});
if (typeof params.providerConfig.baseUrl === "string") {
await runOpenClaw({
lane: params.lane,

View File

@@ -4,7 +4,8 @@ import * as net from "node:net";
import { afterEach, describe, expect, it } from "vitest";
import { WebSocketServer } from "ws";
const CHILD_PROCESS_TIMEOUT_MS = process.env.CI ? 30_000 : 10_000;
const CHILD_PROCESS_TIMEOUT_MS = process.env.CI ? 45_000 : 15_000;
const PROBE_TIMEOUT_MS = process.env.CI ? 15_000 : 5_000;
async function listenOnLoopback(server: Server): Promise<number> {
return new Promise((resolve, reject) => {
@@ -216,7 +217,7 @@ describe("SSRF external proxy routing", () => {
resolve({ status: response.statusCode, body });
});
});
req.setTimeout(5000, () => {
req.setTimeout(${PROBE_TIMEOUT_MS}, () => {
req.destroy(new Error("node:http request timed out"));
});
req.on("error", reject);
@@ -238,7 +239,7 @@ describe("SSRF external proxy routing", () => {
response.resume();
response.on("end", resolve);
});
req.setTimeout(5000, () => {
req.setTimeout(${PROBE_TIMEOUT_MS}, () => {
req.destroy(new Error("node:https request timed out"));
});
req.on("error", reject);
@@ -247,7 +248,7 @@ describe("SSRF external proxy routing", () => {
async function websocketProbe(url) {
return new Promise((resolve, reject) => {
const ws = new WebSocket(url, { handshakeTimeout: 5000 });
const ws = new WebSocket(url, { handshakeTimeout: ${PROBE_TIMEOUT_MS} });
ws.once("open", () => {
ws.close();
reject(new Error("proxied websocket unexpectedly opened"));
@@ -259,7 +260,7 @@ describe("SSRF external proxy routing", () => {
async function gatewayLoopbackBypassProbe(url) {
return new Promise((resolve, reject) => {
const ws = dangerouslyBypassManagedProxyForGatewayLoopbackControlPlane(url, () =>
new WebSocket(url, { handshakeTimeout: 5000 }),
new WebSocket(url, { handshakeTimeout: ${PROBE_TIMEOUT_MS} }),
);
ws.once("open", () => {
ws.close();
@@ -275,7 +276,7 @@ describe("SSRF external proxy routing", () => {
}
try {
const response = await undiciFetch(process.env.OPENCLAW_TEST_TARGET_URL, {
signal: AbortSignal.timeout(5000),
signal: AbortSignal.timeout(${PROBE_TIMEOUT_MS}),
});
const body = await response.text();
const nodeHttp = await nodeHttpGet(process.env.OPENCLAW_TEST_NODE_HTTP_TARGET_URL);