Skip to content

Commit 04575a9

Browse files
committed
fix(qa): avoid telegram proof artifact collisions
1 parent 318f954 commit 04575a9

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

scripts/e2e/telegram-user-crabbox-proof.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
spawnSync,
88
type SpawnOptionsWithoutStdio,
99
} from "node:child_process";
10+
import { randomUUID } from "node:crypto";
1011
import fs from "node:fs";
1112
import os from "node:os";
1213
import path from "node:path";
@@ -270,6 +271,10 @@ function parseTcpPort(value: string, label: string) {
270271
return parsed;
271272
}
272273

274+
function createTelegramProofRunId() {
275+
return `${new Date().toISOString().replace(/[:.]/gu, "-")}-${randomUUID().slice(0, 8)}`;
276+
}
277+
273278
export function parseArgs(argvInput: string[]): Options {
274279
let argv = argvInput;
275280
argv = argv[0] === "--" ? argv.slice(1) : argv;
@@ -285,7 +290,6 @@ export function parseArgs(argvInput: string[]): Options {
285290
"view",
286291
]);
287292
const command = commands.has(argv[0] ?? "") ? (argv.shift() as Options["command"]) : "probe";
288-
const stamp = new Date().toISOString().replace(/[:.]/gu, "-");
289293
const opts: Options = {
290294
crabboxClass: "standard",
291295
command,
@@ -299,7 +303,7 @@ export function parseArgs(argvInput: string[]): Options {
299303
keepBox: false,
300304
mockResponseText: "OPENCLAW_E2E_OK",
301305
mockPort: 19_882,
302-
outputDir: path.join(DEFAULT_OUTPUT_ROOT, stamp),
306+
outputDir: path.join(DEFAULT_OUTPUT_ROOT, createTelegramProofRunId()),
303307
previewCropWidth: TELEGRAM_PROOF_CROP.cropWidth,
304308
previewFps: 24,
305309
previewWidth: 1920,

test/scripts/telegram-user-crabbox-proof.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,20 @@ describe("telegram user Crabbox proof log polling", () => {
157157
expect(parseArgs(["--text", "-ping"]).text).toBe("-ping");
158158
});
159159

160+
it("uses unique default output dirs", () => {
161+
const firstOutputDir = parseArgs([]).outputDir;
162+
const secondOutputDir = parseArgs([]).outputDir;
163+
164+
expect(path.dirname(firstOutputDir)).toBe(
165+
path.join(".artifacts", "qa-e2e", "telegram-user-crabbox"),
166+
);
167+
expect(path.basename(firstOutputDir)).toMatch(
168+
/^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z-[a-f0-9]{8}$/u,
169+
);
170+
expect(secondOutputDir).not.toBe(firstOutputDir);
171+
expect(parseArgs(["--output-dir", ".artifacts/custom"]).outputDir).toBe(".artifacts/custom");
172+
});
173+
160174
it("clamps proof timeout args before they reach Node timers", () => {
161175
expect(parseArgs(["--timeout-ms", String(MAX_TIMER_TIMEOUT_MS + 1)]).timeoutMs).toBe(
162176
MAX_TIMER_TIMEOUT_MS,

0 commit comments

Comments
 (0)