test(ci): harden release failure paths · openclaw/openclaw@5580d89
steipete
·
2026-04-29
·
via Recent Commits to openclaw:main
File tree
extensions/qa-matrix/src/runners/contract
| Original file line number | Diff line number | Diff line change |
|---|
@@ -656,6 +656,7 @@ jobs:
|
656 | 656 | shell: bash |
657 | 657 | env: |
658 | 658 | OPENCLAW_QA_REDACT_PUBLIC_METADATA: "1" |
| 659 | +OPENCLAW_QA_MATRIX_CANARY_TIMEOUT_MS: "90000" |
659 | 660 | OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS: "3000" |
660 | 661 | run: | |
661 | 662 | set -euo pipefail |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -99,6 +99,7 @@ Pass `--scenario <id>` (repeatable) to run a hand-picked set; combine with `--pr
|
99 | 99 | | Variable | Default | Effect | |
100 | 100 | | --------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
101 | 101 | | `OPENCLAW_QA_MATRIX_TIMEOUT_MS` | `1800000` (30 min) | Hard upper bound on the entire run. | |
| 102 | +| `OPENCLAW_QA_MATRIX_CANARY_TIMEOUT_MS` | `45000` | Bound for the initial canary reply. Release CI raises this on shared runners so a slow first gateway turn does not fail before scenario coverage starts. | |
102 | 103 | | `OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS` | `8000` | Quiet window for negative no-reply assertions. Clamped to `≤` the run timeout. | |
103 | 104 | | `OPENCLAW_QA_MATRIX_CLEANUP_TIMEOUT_MS` | `90000` | Bound for Docker teardown. Failure surfaces include the recovery `docker compose ... down --remove-orphans` command. | |
104 | 105 | | `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` | `ghcr.io/matrix-construct/tuwunel:v1.5.1` | Override the homeserver image when validating against a different Tuwunel version. | |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -943,9 +943,8 @@ export async function runMatrixQaLive(params: {
|
943 | 943 | } finally { |
944 | 944 | if (gatewayHarness) { |
945 | 945 | try { |
946 | | -const shouldPreserveGatewayDebugArtifacts = scenarioResults.some( |
947 | | -(scenario) => scenario?.status === "fail", |
948 | | -); |
| 946 | +const shouldPreserveGatewayDebugArtifacts = |
| 947 | +scenarioResults.some((scenario) => scenario?.status === "fail") || canaryFailed; |
949 | 948 | preservedGatewayDebugDirPath = shouldPreserveGatewayDebugArtifacts |
950 | 949 | ? path.join(outputDir, "gateway-debug") |
951 | 950 | : undefined; |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -112,7 +112,19 @@ describe("doctor command", () => {
|
112 | 112 | }, |
113 | 113 | ]); |
114 | 114 | |
115 | | -await doctorCommand(createDoctorRuntime(), { yes: true }); |
| 115 | +const previousConfigWriteSupport = |
| 116 | +process.env.OPENCLAW_UPDATE_PARENT_SUPPORTS_DOCTOR_CONFIG_WRITE; |
| 117 | +process.env.OPENCLAW_UPDATE_PARENT_SUPPORTS_DOCTOR_CONFIG_WRITE = "1"; |
| 118 | +try { |
| 119 | +await doctorCommand(createDoctorRuntime(), { yes: true }); |
| 120 | +} finally { |
| 121 | +if (previousConfigWriteSupport === undefined) { |
| 122 | +delete process.env.OPENCLAW_UPDATE_PARENT_SUPPORTS_DOCTOR_CONFIG_WRITE; |
| 123 | +} else { |
| 124 | +process.env.OPENCLAW_UPDATE_PARENT_SUPPORTS_DOCTOR_CONFIG_WRITE = |
| 125 | +previousConfigWriteSupport; |
| 126 | +} |
| 127 | +} |
116 | 128 | |
117 | 129 | const written = writeConfigFile.mock.calls.at(-1)?.[0] as Record<string, unknown>; |
118 | 130 | const profiles = (written.auth as { profiles: Record<string, unknown> }).profiles; |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。