Skip to content

Commit 82b8260

Browse files
committed
fix: use 'close' event for seed process and deduplicate buildPerfServerEnv
- Change once(seedProcess, 'exit') to once(seedProcess, 'close') in appHarness.ts and open-perf-app.ts to ensure piped stdio buffers are fully drained before parsing stdout. - Extract buildPerfServerEnv into @t3tools/shared/perf/serverEnv to eliminate identical copies in serverPerfHarness.ts and web serverEnv.ts. Both consumers now import from the shared module.
1 parent 0be82d3 commit 82b8260

File tree

6 files changed

+39
-54
lines changed

6 files changed

+39
-54
lines changed

apps/server/integration/perf/serverPerfHarness.ts

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,11 @@ import type {
3333
PerfProviderScenarioId,
3434
PerfSeedScenarioId,
3535
} from "@t3tools/shared/perf/scenarioCatalog";
36+
import { buildPerfServerEnv } from "@t3tools/shared/perf/serverEnv";
3637
import { seedPerfState, type PerfSeededState } from "./seedPerfState.ts";
3738

3839
const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url));
3940
const PERF_ARTIFACT_DIR_ENV = "T3CODE_PERF_ARTIFACT_DIR";
40-
const PERF_PROVIDER_ENV = "T3CODE_PERF_PROVIDER";
41-
const PERF_SCENARIO_ENV = "T3CODE_PERF_SCENARIO";
42-
const AUTO_BOOTSTRAP_PROJECT_ENV = "T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD";
4341

4442
const makeWsRpcClient = RpcClient.make(WsRpcGroup);
4543
type WsRpcClient =
@@ -184,28 +182,6 @@ async function writeServerLogs(
184182
]);
185183
}
186184

187-
function buildPerfServerEnv(
188-
baseEnv: NodeJS.ProcessEnv,
189-
providerScenarioId?: PerfProviderScenarioId,
190-
): NodeJS.ProcessEnv {
191-
const env: NodeJS.ProcessEnv = {
192-
...baseEnv,
193-
[AUTO_BOOTSTRAP_PROJECT_ENV]: "false",
194-
};
195-
196-
if (!providerScenarioId) {
197-
delete env[PERF_PROVIDER_ENV];
198-
delete env[PERF_SCENARIO_ENV];
199-
return env;
200-
}
201-
202-
return {
203-
...env,
204-
[PERF_PROVIDER_ENV]: "1",
205-
[PERF_SCENARIO_ENV]: providerScenarioId,
206-
};
207-
}
208-
209185
export class PerfWsRpcClient {
210186
private readonly runtime: ManagedRuntime.ManagedRuntime<RpcClient.Protocol, never>;
211187
private readonly clientScope: Scope.Closeable;

apps/web/test/perf/appHarness.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ export async function startPerfAppHarness(
266266
seedProcess.stderr?.on("data", (chunk) => {
267267
stderr += chunk.toString();
268268
});
269-
const [exitCode] = (await once(seedProcess, "exit")) as [number | null];
269+
const [exitCode] = (await once(seedProcess, "close")) as [number | null];
270270
if (exitCode !== 0) {
271271
throw new Error(`Perf seed command failed with code ${exitCode ?? "unknown"}.\n${stderr}`);
272272
}

apps/web/test/perf/serverEnv.ts

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,5 @@
1-
import type { PerfProviderScenarioId } from "@t3tools/shared/perf/scenarioCatalog";
2-
3-
export const PERF_PROVIDER_ENV = "T3CODE_PERF_PROVIDER";
4-
export const PERF_SCENARIO_ENV = "T3CODE_PERF_SCENARIO";
5-
const AUTO_BOOTSTRAP_PROJECT_ENV = "T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD";
6-
7-
export function buildPerfServerEnv(
8-
baseEnv: NodeJS.ProcessEnv,
9-
providerScenarioId?: PerfProviderScenarioId,
10-
): NodeJS.ProcessEnv {
11-
const env: NodeJS.ProcessEnv = {
12-
...baseEnv,
13-
[AUTO_BOOTSTRAP_PROJECT_ENV]: "false",
14-
};
15-
16-
if (!providerScenarioId) {
17-
delete env[PERF_PROVIDER_ENV];
18-
delete env[PERF_SCENARIO_ENV];
19-
return env;
20-
}
21-
22-
return {
23-
...env,
24-
[PERF_PROVIDER_ENV]: "1",
25-
[PERF_SCENARIO_ENV]: providerScenarioId,
26-
};
27-
}
1+
export {
2+
buildPerfServerEnv,
3+
PERF_PROVIDER_ENV,
4+
PERF_SCENARIO_ENV,
5+
} from "@t3tools/shared/perf/serverEnv";

packages/shared/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
"./perf/artifact": {
5252
"types": "./src/perf/artifact.ts",
5353
"import": "./src/perf/artifact.ts"
54+
},
55+
"./perf/serverEnv": {
56+
"types": "./src/perf/serverEnv.ts",
57+
"import": "./src/perf/serverEnv.ts"
5458
}
5559
},
5660
"scripts": {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import type { PerfProviderScenarioId } from "./scenarioCatalog.ts";
2+
3+
export const PERF_PROVIDER_ENV = "T3CODE_PERF_PROVIDER";
4+
export const PERF_SCENARIO_ENV = "T3CODE_PERF_SCENARIO";
5+
const AUTO_BOOTSTRAP_PROJECT_ENV = "T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD";
6+
7+
export function buildPerfServerEnv(
8+
baseEnv: NodeJS.ProcessEnv,
9+
providerScenarioId?: PerfProviderScenarioId,
10+
): NodeJS.ProcessEnv {
11+
const env: NodeJS.ProcessEnv = {
12+
...baseEnv,
13+
[AUTO_BOOTSTRAP_PROJECT_ENV]: "false",
14+
};
15+
16+
if (!providerScenarioId) {
17+
delete env[PERF_PROVIDER_ENV];
18+
delete env[PERF_SCENARIO_ENV];
19+
return env;
20+
}
21+
22+
return {
23+
...env,
24+
[PERF_PROVIDER_ENV]: "1",
25+
[PERF_SCENARIO_ENV]: providerScenarioId,
26+
};
27+
}

scripts/open-perf-app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ async function seedPerfState(scenarioId: PerfSeedScenarioId): Promise<PerfSeeded
208208
stderr += chunk.toString();
209209
});
210210

211-
const [exitCode] = (await once(seedProcess, "exit")) as [number | null];
211+
const [exitCode] = (await once(seedProcess, "close")) as [number | null];
212212
if (exitCode !== 0) {
213213
throw new Error(`Perf seed command failed with code ${exitCode ?? "unknown"}.\n${stderr}`);
214214
}

0 commit comments

Comments
 (0)