diff --git a/packages/wb/src/commands/retry.ts b/packages/wb/src/commands/retry.ts index 0e1af1f3..d09a5d6a 100644 --- a/packages/wb/src/commands/retry.ts +++ b/packages/wb/src/commands/retry.ts @@ -48,6 +48,11 @@ export const retryCommand: CommandModule< // TODO: should we add single quotes around each argument? lastStatus = await runWithSpawn(cmdAndArgs.join(' '), project, argv, { exitIfFailed: false, + onSignal: (signal) => { + if (signal) { + process.exit(1); + } + }, }); if (lastStatus === 0) return; } diff --git a/packages/wb/src/scripts/execution/baseScripts.ts b/packages/wb/src/scripts/execution/baseScripts.ts index 5255455f..4cde2796 100644 --- a/packages/wb/src/scripts/execution/baseScripts.ts +++ b/packages/wb/src/scripts/execution/baseScripts.ts @@ -84,7 +84,8 @@ export abstract class BaseScripts { } async testStart(project: Project, argv: ScriptArgv): Promise { await checkAndKillPortProcess(project.env.PORT, project); - return `YARN concurrently --kill-others --raw --success first "${this.startDevProtected(project, argv)}" "${this.waitApp(project)}"`; + // Use empty NODE_ENV to avoid "production" mode in some frameworks like Blitz.js. + return `NODE_ENV="" YARN concurrently --kill-others --raw --success first "${this.startDevProtected(project, argv)}" "${this.waitApp(project)}"`; } async testE2EProtected( diff --git a/packages/wb/src/scripts/run.ts b/packages/wb/src/scripts/run.ts index 5fe302da..76ab30b9 100644 --- a/packages/wb/src/scripts/run.ts +++ b/packages/wb/src/scripts/run.ts @@ -10,6 +10,7 @@ import { isRunningOnBun, packageManagerWithRun } from '../utils/runtime.js'; interface Options { ci?: boolean; exitIfFailed?: boolean; + onSignal?: (signal: NodeJS.Signals | null) => void; forceColor?: boolean; timeout?: number; } @@ -43,6 +44,7 @@ export async function runWithSpawn( killOnExit: true, verbose: argv.verbose, }); + opts.onSignal?.(ret.signal); printFinishedAndExitIfNeeded(normalizedScript.printable, ret.status, opts); return ret.status ?? 1; } @@ -75,6 +77,7 @@ export function runWithSpawnInParallel( killOnExit: true, verbose: argv.verbose, }); + opts.onSignal?.(ret.signal); printStart(normalizedScript.printable, project, 'Started (log)'); if (argv.verbose) { printStart(normalizedScript.runnable, project, 'Started (raw)', true);