diff --git a/CLAUDE.md b/CLAUDE.md index 22912ea..57e9dbf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,7 +13,7 @@ Transcript-based shell integration test runner. Bun + TypeScript. - `--path ` — prepend to `$PATH` (repeatable) - `--timeout ` — per-command timeout (default `10s`) - `-v, --verbose` — print each command as it runs - - `--port-from ` — auto-assign `$PORT` starting from n + - `--port-from ` — auto-assign `$PORT` starting from n (default `5400`) - `--parallel` — run files in parallel ## Architecture diff --git a/src/cli/index.ts b/src/cli/index.ts index 63e4c63..34f4277 100755 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -79,7 +79,7 @@ program .option("--path ", "Prepend to PATH (repeatable)", (val: string, acc: string[]) => [...acc, val], []) .option("--timeout ", "Per-command timeout", "10s") .option("-v, --verbose", "Print each command as it runs") - .option("--port-from ", "Auto-assign $PORT starting from ") + .option("--port-from ", "Auto-assign $PORT starting from ", "5400") .option("--parallel", "Run files in parallel") .action(async (fileArgs: string[], opts) => { const timeoutMs = parseDuration(opts.timeout) @@ -94,14 +94,14 @@ program const start = performance.now() const results: TestResult[] = [] const cwd = process.cwd() - const portFrom = opts.portFrom ? parseInt(opts.portFrom, 10) : undefined - if (portFrom !== undefined && Number.isNaN(portFrom)) { + const portFrom = parseInt(opts.portFrom, 10) + if (Number.isNaN(portFrom)) { console.error("--port-from must be an integer") process.exit(1) } let nextPort = portFrom - const runOne = async (filePath: string, port: number | undefined) => { + const runOne = async (filePath: string, port: number) => { const content = await readFile(filePath, "utf-8") const parsed = parse(relative(cwd, filePath), content) @@ -125,7 +125,7 @@ program } } Object.assign(envVars, setupEnvVars, userEnvVars) - if (port !== undefined && !("PORT" in userEnvVars) && !("PORT" in setupEnvVars)) { + if (!("PORT" in userEnvVars) && !("PORT" in setupEnvVars)) { envVars["PORT"] = String(port) } const merged: ShoutFile = { ...parsed, commands: [...setupCommands, ...parsed.commands] } @@ -205,7 +205,7 @@ program } if (opts.parallel) { - const all = await Promise.all(files.map(f => runOne(f, nextPort !== undefined ? nextPort++ : undefined))) + const all = await Promise.all(files.map(f => runOne(f, nextPort++))) for (const r of all) { printDots(r) results.push(r) @@ -213,7 +213,7 @@ program process.stdout.write("\n") } else { for (const filePath of files) { - const r = await runOne(filePath, nextPort !== undefined ? nextPort++ : undefined) + const r = await runOne(filePath, nextPort++) printDots(r) results.push(r) }