fix(release): repair full validation gates

This commit is contained in:
Peter Steinberger
2026-05-09 15:13:39 +01:00
parent 877e257269
commit 16f3350b84
6 changed files with 32 additions and 38 deletions

View File

@@ -390,7 +390,6 @@ jobs:
if [[ "$LIVE_MODELS_ONLY" != "true" ]]; then
add_suite live-cache
add_suite openai-ws-stream-live-e2e
add_profile_suite native-live-src-agents "stable full"
add_profile_suite native-live-src-gateway-core "minimum stable full"
@@ -531,7 +530,7 @@ jobs:
validate_special_e2e:
needs: validate_selected_ref
if: (inputs.include_repo_e2e || (inputs.include_live_suites && !inputs.live_models_only)) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == 'openshell-e2e' || inputs.live_suite_filter == 'openai-ws-stream-live-e2e')
if: inputs.include_repo_e2e && (inputs.live_suite_filter == '' || inputs.live_suite_filter == 'openshell-e2e')
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: ${{ matrix.timeout_minutes }}
strategy:
@@ -544,12 +543,6 @@ jobs:
timeout_minutes: 120
requires_repo_e2e: true
requires_live_suites: false
- suite_id: openai-ws-stream-live-e2e
label: OpenAI WebSocket live E2E
command: pnpm test:e2e src/agents/openai-ws-stream.e2e.test.ts
timeout_minutes: 90
requires_repo_e2e: false
requires_live_suites: true
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENCLAW_E2E_WORKERS: "1"
@@ -583,9 +576,7 @@ jobs:
run: |
set -euo pipefail
case "${{ matrix.suite_id }}" in
openai-ws-stream-live-e2e)
echo "OPENAI_LIVE_TEST=1" >> "$GITHUB_ENV"
echo "OPENCLAW_LIVE_TEST=1" >> "$GITHUB_ENV"
openshell-e2e)
;;
esac
@@ -595,11 +586,7 @@ jobs:
run: |
set -euo pipefail
case "${{ matrix.suite_id }}" in
openai-ws-stream-live-e2e)
[[ -n "${OPENAI_API_KEY:-}" ]] || {
echo "OPENAI_API_KEY is required for the OpenAI WebSocket live E2E suite." >&2
exit 1
}
openshell-e2e)
;;
esac

View File

@@ -145,10 +145,7 @@ final class OnboardingWizardModel {
self.sessionId = res.sessionid
self.status = wizardStatusString(res.status) ?? (res.done ? "done" : "running")
self.errorMessage = res.error
self.currentStep = decodeWizardStep(res.step)
if self.currentStep == nil, res.step != nil {
onboardingWizardLogger.error("wizard step decode failed")
}
self.currentStep = res.step
if res.done { self.currentStep = nil }
self.restartAttempts = 0
}
@@ -157,10 +154,7 @@ final class OnboardingWizardModel {
let status = wizardStatusString(res.status)
self.status = status ?? self.status
self.errorMessage = res.error
self.currentStep = decodeWizardStep(res.step)
if self.currentStep == nil, res.step != nil {
onboardingWizardLogger.error("wizard step decode failed")
}
self.currentStep = res.step
if res.done { self.currentStep = nil }
if res.done || status == "done" || status == "cancelled" || status == "error" {
self.sessionId = nil

View File

@@ -63,6 +63,8 @@ describe("transcodeAudioBufferToOpus", () => {
"48000",
"-ac",
"1",
"-f",
"opus",
capturedOutputPath,
],
{ timeoutMs: 1234 },

View File

@@ -85,6 +85,8 @@ export async function transcodeAudioBufferToOpus(params: {
String(params.sampleRateHz ?? DEFAULT_OPUS_SAMPLE_RATE_HZ),
"-ac",
String(params.channels ?? DEFAULT_OPUS_CHANNELS),
"-f",
"opus",
outputPath,
],
{ timeoutMs: params.timeoutMs },

View File

@@ -429,6 +429,13 @@ function filterManifestRegistryForInstalledIndex(params: {
};
}
function createPluginPlanningTestEnv(overrides: NodeJS.ProcessEnv = {}): NodeJS.ProcessEnv {
return {
OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY: "1",
...overrides,
};
}
function useManifestRegistryFixture(
registry: PluginManifestRegistry = createManifestRegistryFixture(),
) {
@@ -451,7 +458,7 @@ function expectStartupPluginIds(params: {
? { activationSourceConfig: params.activationSourceConfig }
: {}),
workspaceDir: "/tmp",
env: params.env ?? process.env,
env: createPluginPlanningTestEnv(params.env),
}),
).toEqual(params.expected);
expect(loadPluginManifestRegistry).toHaveBeenCalled();
@@ -1156,18 +1163,18 @@ describe("resolveGatewayStartupPluginIds", () => {
expectStartupPluginIdsCase({
config,
env: {
env: createPluginPlanningTestEnv({
DEMO_CHANNEL_ANYTHING: "1",
} as NodeJS.ProcessEnv,
}),
expected: ["demo-channel", "browser", "memory-core"],
});
expect(
resolveConfiguredDeferredChannelPluginIds({
config,
workspaceDir: "/tmp",
env: {
env: createPluginPlanningTestEnv({
DEMO_CHANNEL_ANYTHING: "1",
} as NodeJS.ProcessEnv,
}),
}),
).toStrictEqual([]);
});
@@ -1187,7 +1194,7 @@ describe("resolveGatewayStartupPluginIds", () => {
},
} as OpenClawConfig,
workspaceDir: "/tmp",
env: {},
env: createPluginPlanningTestEnv(),
}),
).toEqual(["workspace-demo-channel-plugin"]);
});
@@ -1204,7 +1211,7 @@ describe("resolveGatewayStartupPluginIds", () => {
allow: ["browser"],
},
} as OpenClawConfig,
env: {},
env: createPluginPlanningTestEnv(),
expected: ["demo-channel", "browser"],
});
});
@@ -1219,7 +1226,7 @@ describe("resolveGatewayStartupPluginIds", () => {
},
},
} as OpenClawConfig,
env: {},
env: createPluginPlanningTestEnv(),
expected: ["browser", "memory-core"],
});
});
@@ -1235,9 +1242,9 @@ describe("resolveGatewayStartupPluginIds", () => {
expectStartupPluginIdsCase({
config: {} as OpenClawConfig,
env: {
env: createPluginPlanningTestEnv({
OPENCLAW_STATE_DIR: "/tmp/openclaw-with-persisted-demo-channel",
} as NodeJS.ProcessEnv,
}),
expected: ["browser", "memory-core"],
});
});
@@ -1260,9 +1267,9 @@ describe("resolveGatewayStartupPluginIds", () => {
},
} as OpenClawConfig,
workspaceDir: "/tmp",
env: {
env: createPluginPlanningTestEnv({
OPENCLAW_STATE_DIR: "/tmp/openclaw-with-persisted-demo-channel",
} as NodeJS.ProcessEnv,
}),
}),
).toStrictEqual([]);
});
@@ -1282,7 +1289,7 @@ describe("resolveGatewayStartupPluginIds", () => {
},
} as OpenClawConfig,
workspaceDir: "/tmp",
env: {},
env: createPluginPlanningTestEnv(),
});
expect(plan.channelPluginIds).toContain("demo-channel");
@@ -1309,7 +1316,7 @@ describe("resolveGatewayStartupPluginIds", () => {
},
} as OpenClawConfig,
workspaceDir: "/tmp",
env: {},
env: createPluginPlanningTestEnv(),
}),
).toStrictEqual([]);
});

View File

@@ -359,6 +359,8 @@ describe("package artifact reuse", () => {
expect(workflow).toContain(
"inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id",
);
expect(workflow).not.toContain("openai-ws-stream-live-e2e");
expect(workflow).not.toContain("src/agents/openai-ws-stream.e2e.test.ts");
expect(workflow).toContain("suite_id: live-gateway-advisory-docker-deepseek-fireworks");
expect(workflow).toContain("suite_id: live-gateway-advisory-docker-opencode-openrouter");
expect(workflow).toContain("suite_id: live-gateway-advisory-docker-xai-zai");