fix(release): cancel Discord cleanup bodies · openclaw/openclaw@257b533
vincentkoc
·
2026-06-19
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -2741,16 +2741,21 @@ async function postDiscordMessage(params) {
|
2741 | 2741 | } |
2742 | 2742 | } |
2743 | 2743 | |
2744 | | -async function deleteDiscordMessage(params) { |
| 2744 | +export async function deleteDiscordMessage(params) { |
2745 | 2745 | if (!params.messageId) { |
2746 | 2746 | return; |
2747 | 2747 | } |
2748 | | -await fetch( |
2749 | | -`https://discord.com/api/v10/channels/${params.channelId}/messages/${params.messageId}`, |
2750 | | -buildDiscordFetchInit(params.token, { |
2751 | | -method: "DELETE", |
2752 | | -}), |
2753 | | -).catch(() => undefined); |
| 2748 | +try { |
| 2749 | +const response = await fetch( |
| 2750 | +`https://discord.com/api/v10/channels/${params.channelId}/messages/${params.messageId}`, |
| 2751 | +buildDiscordFetchInit(params.token, { |
| 2752 | +method: "DELETE", |
| 2753 | +}), |
| 2754 | +); |
| 2755 | +await response.body?.cancel?.().catch(() => undefined); |
| 2756 | +} catch { |
| 2757 | +// Cleanup is best-effort; the smoke result should not fail after readback succeeds. |
| 2758 | +} |
2754 | 2759 | } |
2755 | 2760 | |
2756 | 2761 | async function waitForInstalledDiscordReadback(params) { |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -50,6 +50,7 @@ import {
|
50 | 50 | CROSS_OS_DISCORD_FETCH_TIMEOUT_MS, |
51 | 51 | CROSS_OS_AGENT_TURN_TIMEOUT_SECONDS, |
52 | 52 | CROSS_OS_COMMAND_HEARTBEAT_SECONDS, |
| 53 | +deleteDiscordMessage, |
53 | 54 | isImmutableReleaseRef, |
54 | 55 | isRecoverableWindowsPackagedUpgradeSwapCleanupFailure, |
55 | 56 | isRecoverableWindowsPackagedUpgradeTimeoutError, |
@@ -1470,6 +1471,31 @@ describe("scripts/openclaw-cross-os-release-checks", () => {
|
1470 | 1471 | expect(init.signal).toBeInstanceOf(AbortSignal); |
1471 | 1472 | }); |
1472 | 1473 | |
| 1474 | +it("cancels Discord delete response bodies", async () => { |
| 1475 | +let canceled = false; |
| 1476 | +const originalFetch = globalThis.fetch; |
| 1477 | +globalThis.fetch = (async () => |
| 1478 | +new Response( |
| 1479 | +new ReadableStream<Uint8Array>({ |
| 1480 | +cancel() { |
| 1481 | +canceled = true; |
| 1482 | +}, |
| 1483 | +}), |
| 1484 | +{ status: 200 }, |
| 1485 | +)) as typeof fetch; |
| 1486 | +try { |
| 1487 | +await deleteDiscordMessage({ |
| 1488 | +channelId: "channel-123", |
| 1489 | +messageId: "message-456", |
| 1490 | +token: "discord-token", |
| 1491 | +}); |
| 1492 | +} finally { |
| 1493 | +globalThis.fetch = originalFetch; |
| 1494 | +} |
| 1495 | + |
| 1496 | +expect(canceled).toBe(true); |
| 1497 | +}); |
| 1498 | + |
1473 | 1499 | it("keeps the dev-update lane for main only", () => { |
1474 | 1500 | expect(shouldRunMainChannelDevUpdate("main")).toBe(true); |
1475 | 1501 | expect(shouldRunMainChannelDevUpdate("08753a1d793c040b101c8a26c43445dbbab14995")).toBe(false); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。