mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 06:10:44 +00:00
ci: stabilize release validation lanes
This commit is contained in:
@@ -1521,9 +1521,33 @@ jobs:
|
||||
timeout_minutes: 90
|
||||
needs_ffmpeg: false
|
||||
profile_env_only: false
|
||||
- suite_id: native-live-src-gateway-profiles-other
|
||||
label: Native live gateway profiles other providers
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=deepseek,opencode-go,openrouter,xai,zai node scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
- suite_id: native-live-src-gateway-profiles-deepseek
|
||||
label: Native live gateway profiles DeepSeek
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=deepseek node scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
timeout_minutes: 90
|
||||
needs_ffmpeg: false
|
||||
profile_env_only: false
|
||||
- suite_id: native-live-src-gateway-profiles-opencode-go
|
||||
label: Native live gateway profiles OpenCode Go
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=opencode-go node scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
timeout_minutes: 90
|
||||
needs_ffmpeg: false
|
||||
profile_env_only: false
|
||||
- suite_id: native-live-src-gateway-profiles-openrouter
|
||||
label: Native live gateway profiles OpenRouter
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=openrouter node scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
timeout_minutes: 90
|
||||
needs_ffmpeg: false
|
||||
profile_env_only: false
|
||||
- suite_id: native-live-src-gateway-profiles-xai
|
||||
label: Native live gateway profiles xAI
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=xai node scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
timeout_minutes: 90
|
||||
needs_ffmpeg: false
|
||||
profile_env_only: false
|
||||
- suite_id: native-live-src-gateway-profiles-zai
|
||||
label: Native live gateway profiles Z.ai
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=zai node scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
timeout_minutes: 90
|
||||
needs_ffmpeg: false
|
||||
profile_env_only: false
|
||||
|
||||
@@ -254,6 +254,7 @@ jobs:
|
||||
suite_profile: custom
|
||||
docker_lanes: bundled-channel-deps-compat plugins-offline
|
||||
telegram_mode: mock-openai
|
||||
telegram_scenarios: telegram-help-command,telegram-commands-command,telegram-tools-compact-command,telegram-whoami-command,telegram-context-command,telegram-mention-gating
|
||||
secrets:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
|
||||
|
||||
11
.github/workflows/package-acceptance.yml
vendored
11
.github/workflows/package-acceptance.yml
vendored
@@ -73,6 +73,11 @@ on:
|
||||
- none
|
||||
- mock-openai
|
||||
- live-frontier
|
||||
telegram_scenarios:
|
||||
description: Optional comma-separated Telegram scenario ids
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
workflow_call:
|
||||
inputs:
|
||||
workflow_ref:
|
||||
@@ -129,6 +134,11 @@ on:
|
||||
required: false
|
||||
default: none
|
||||
type: string
|
||||
telegram_scenarios:
|
||||
description: Optional comma-separated Telegram scenario ids
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
secrets:
|
||||
OPENAI_API_KEY:
|
||||
required: false
|
||||
@@ -482,6 +492,7 @@ jobs:
|
||||
package_label: openclaw@${{ needs.resolve_package.outputs.package_version }}
|
||||
harness_ref: ${{ inputs.source == 'ref' && inputs.package_ref || inputs.workflow_ref }}
|
||||
provider_mode: ${{ needs.resolve_package.outputs.telegram_mode }}
|
||||
scenario: ${{ inputs.telegram_scenarios }}
|
||||
secrets:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
OPENCLAW_QA_CONVEX_SITE_URL: ${{ secrets.OPENCLAW_QA_CONVEX_SITE_URL }}
|
||||
|
||||
@@ -118,6 +118,7 @@ export type TelegramQaRunResult = {
|
||||
reportPath: string;
|
||||
summaryPath: string;
|
||||
observedMessagesPath: string;
|
||||
gatewayDebugDirPath?: string;
|
||||
scenarios: TelegramQaScenarioResult[];
|
||||
};
|
||||
|
||||
@@ -664,6 +665,7 @@ function renderTelegramQaMarkdown(params: {
|
||||
credentialSource: "convex" | "env";
|
||||
redactMetadata: boolean;
|
||||
groupId: string;
|
||||
gatewayDebugDirPath?: string;
|
||||
startedAt: string;
|
||||
finishedAt: string;
|
||||
scenarios: TelegramQaScenarioResult[];
|
||||
@@ -690,6 +692,12 @@ function renderTelegramQaMarkdown(params: {
|
||||
}
|
||||
lines.push("");
|
||||
}
|
||||
if (params.gatewayDebugDirPath) {
|
||||
lines.push("## Gateway Debug");
|
||||
lines.push("");
|
||||
lines.push(`- Preserved at: \`${params.gatewayDebugDirPath}\``);
|
||||
lines.push("");
|
||||
}
|
||||
if (params.cleanupIssues.length > 0) {
|
||||
lines.push("## Cleanup");
|
||||
lines.push("");
|
||||
@@ -1094,6 +1102,8 @@ export async function runTelegramQaLive(params: {
|
||||
const startedAt = new Date().toISOString();
|
||||
const scenarioResults: TelegramQaScenarioResult[] = [];
|
||||
const cleanupIssues: string[] = [];
|
||||
const gatewayDebugDirPath = path.join(outputDir, "gateway-debug");
|
||||
let preservedGatewayDebugArtifacts = false;
|
||||
let canaryFailure: string | null = null;
|
||||
try {
|
||||
if (params.sutOpenClawCommand && params.preflightInstalledOnboarding === true) {
|
||||
@@ -1296,7 +1306,13 @@ export async function runTelegramQaLive(params: {
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
await gatewayHarness.stop();
|
||||
const shouldPreserveGatewayDebugArtifacts = scenarioResults.some(
|
||||
(scenario) => scenario.status === "fail",
|
||||
);
|
||||
await gatewayHarness.stop(
|
||||
shouldPreserveGatewayDebugArtifacts ? { preserveToDir: gatewayDebugDirPath } : undefined,
|
||||
);
|
||||
preservedGatewayDebugArtifacts = shouldPreserveGatewayDebugArtifacts;
|
||||
} catch (error) {
|
||||
appendLiveLaneIssue(cleanupIssues, "live gateway cleanup", error);
|
||||
}
|
||||
@@ -1352,6 +1368,7 @@ export async function runTelegramQaLive(params: {
|
||||
credentialSource: credentialLease.source,
|
||||
redactMetadata: redactPublicMetadata,
|
||||
groupId: redactPublicMetadata ? "<redacted>" : runtimeEnv.groupId,
|
||||
gatewayDebugDirPath: preservedGatewayDebugArtifacts ? gatewayDebugDirPath : undefined,
|
||||
startedAt,
|
||||
finishedAt,
|
||||
scenarios: scenarioResults,
|
||||
@@ -1379,6 +1396,7 @@ export async function runTelegramQaLive(params: {
|
||||
report: reportPath,
|
||||
summary: summaryPath,
|
||||
observedMessages: observedMessagesPath,
|
||||
...(preservedGatewayDebugArtifacts ? { gatewayDebug: gatewayDebugDirPath } : {}),
|
||||
};
|
||||
if (canaryFailure) {
|
||||
throw new Error(
|
||||
@@ -1403,6 +1421,7 @@ export async function runTelegramQaLive(params: {
|
||||
reportPath,
|
||||
summaryPath,
|
||||
observedMessagesPath,
|
||||
...(preservedGatewayDebugArtifacts ? { gatewayDebugDirPath } : {}),
|
||||
scenarios: scenarioResults,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -48,6 +48,8 @@ describe("package acceptance workflow", () => {
|
||||
expect(workflow).toContain(
|
||||
"package_artifact_name: ${{ needs.resolve_package.outputs.package_artifact_name }}",
|
||||
);
|
||||
expect(workflow).toContain("telegram_scenarios:");
|
||||
expect(workflow).toContain("scenario: ${{ inputs.telegram_scenarios }}");
|
||||
expect(workflow).toContain(
|
||||
"package_label: openclaw@${{ needs.resolve_package.outputs.package_version }}",
|
||||
);
|
||||
@@ -103,6 +105,14 @@ describe("package artifact reuse", () => {
|
||||
expect(workflow).toContain("command: node scripts/test-live-shard.mjs native-live-src-agents");
|
||||
expect(workflow).toContain("suite_id: native-live-src-gateway-core");
|
||||
expect(workflow).toContain("suite_id: native-live-src-gateway-backends");
|
||||
expect(workflow).toContain("suite_id: native-live-src-gateway-profiles-deepseek");
|
||||
expect(workflow).toContain("suite_id: native-live-src-gateway-profiles-opencode-go");
|
||||
expect(workflow).toContain("suite_id: native-live-src-gateway-profiles-openrouter");
|
||||
expect(workflow).toContain("suite_id: native-live-src-gateway-profiles-xai");
|
||||
expect(workflow).toContain("suite_id: native-live-src-gateway-profiles-zai");
|
||||
expect(workflow).not.toContain(
|
||||
"OPENCLAW_LIVE_GATEWAY_PROVIDERS=deepseek,opencode-go,openrouter,xai,zai",
|
||||
);
|
||||
expect(workflow).toContain("suite_id: native-live-extensions-a-k");
|
||||
expect(workflow).toContain("suite_id: native-live-extensions-l-n");
|
||||
expect(workflow).toContain("suite_id: native-live-extensions-openai");
|
||||
@@ -140,6 +150,9 @@ describe("package artifact reuse", () => {
|
||||
expect(workflow).toContain("suite_profile: custom");
|
||||
expect(workflow).toContain("docker_lanes: bundled-channel-deps-compat plugins-offline");
|
||||
expect(workflow).toContain("telegram_mode: mock-openai");
|
||||
expect(workflow).toContain(
|
||||
"telegram_scenarios: telegram-help-command,telegram-commands-command,telegram-tools-compact-command,telegram-whoami-command,telegram-context-command,telegram-mention-gating",
|
||||
);
|
||||
expect(workflow).toContain("ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}");
|
||||
expect(workflow).toContain("ANTHROPIC_API_TOKEN: ${{ secrets.ANTHROPIC_API_TOKEN }}");
|
||||
expect(workflow).toContain(
|
||||
|
||||
Reference in New Issue
Block a user