fix(core): forward process execArgv when using the native runner (#23195)
This commit is contained in:
parent
0f71685b2b
commit
1ab1fa5e0b
4
packages/nx/src/native/index.d.ts
vendored
4
packages/nx/src/native/index.d.ts
vendored
@ -150,12 +150,12 @@ export class ChildProcess {
|
||||
}
|
||||
export class RustPseudoTerminal {
|
||||
constructor()
|
||||
runCommand(command: string, commandDir?: string | undefined | null, jsEnv?: Record<string, string> | undefined | null, quiet?: boolean | undefined | null, tty?: boolean | undefined | null): ChildProcess
|
||||
runCommand(command: string, commandDir?: string | undefined | null, jsEnv?: Record<string, string> | undefined | null, execArgv?: Array<string> | undefined | null, quiet?: boolean | undefined | null, tty?: boolean | undefined | null): ChildProcess
|
||||
/**
|
||||
* This allows us to run a pseudoterminal with a fake node ipc channel
|
||||
* this makes it possible to be backwards compatible with the old implementation
|
||||
*/
|
||||
fork(id: string, forkScript: string, pseudoIpcPath: string, commandDir: string | undefined | null, jsEnv: Record<string, string> | undefined | null, quiet: boolean): ChildProcess
|
||||
fork(id: string, forkScript: string, pseudoIpcPath: string, commandDir: string | undefined | null, jsEnv: Record<string, string> | undefined | null, execArgv: Array<string> | undefined | null, quiet: boolean): ChildProcess
|
||||
}
|
||||
export class HashPlanner {
|
||||
constructor(nxJson: NxJson, projectGraph: ExternalObject<ProjectGraph>)
|
||||
|
||||
@ -24,11 +24,12 @@ impl RustPseudoTerminal {
|
||||
command: String,
|
||||
command_dir: Option<String>,
|
||||
js_env: Option<HashMap<String, String>>,
|
||||
exec_argv: Option<Vec<String>>,
|
||||
quiet: Option<bool>,
|
||||
tty: Option<bool>,
|
||||
) -> napi::Result<ChildProcess> {
|
||||
let pseudo_terminal = create_pseudo_terminal()?;
|
||||
run_command(&pseudo_terminal, command, command_dir, js_env, quiet, tty)
|
||||
run_command(&pseudo_terminal, command, command_dir, js_env, exec_argv, quiet, tty)
|
||||
}
|
||||
|
||||
/// This allows us to run a pseudoterminal with a fake node ipc channel
|
||||
@ -41,6 +42,7 @@ impl RustPseudoTerminal {
|
||||
pseudo_ipc_path: String,
|
||||
command_dir: Option<String>,
|
||||
js_env: Option<HashMap<String, String>>,
|
||||
exec_argv: Option<Vec<String>>,
|
||||
quiet: bool,
|
||||
) -> napi::Result<ChildProcess> {
|
||||
let command = format!(
|
||||
@ -51,6 +53,6 @@ impl RustPseudoTerminal {
|
||||
);
|
||||
|
||||
trace!("nx_fork command: {}", &command);
|
||||
self.run_command(command, command_dir, js_env, Some(quiet), Some(true))
|
||||
self.run_command(command, command_dir, js_env, exec_argv, Some(quiet), Some(true))
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,6 +29,7 @@ impl RustPseudoTerminal {
|
||||
command: String,
|
||||
command_dir: Option<String>,
|
||||
js_env: Option<HashMap<String, String>>,
|
||||
exec_argv: Option<Vec<String>>,
|
||||
quiet: Option<bool>,
|
||||
tty: Option<bool>,
|
||||
) -> napi::Result<ChildProcess> {
|
||||
@ -37,6 +38,7 @@ impl RustPseudoTerminal {
|
||||
command,
|
||||
command_dir,
|
||||
js_env,
|
||||
exec_argv,
|
||||
quiet,
|
||||
tty,
|
||||
)
|
||||
@ -52,6 +54,7 @@ impl RustPseudoTerminal {
|
||||
pseudo_ipc_path: String,
|
||||
command_dir: Option<String>,
|
||||
js_env: Option<HashMap<String, String>>,
|
||||
exec_argv: Option<Vec<String>>,
|
||||
quiet: bool,
|
||||
) -> napi::Result<ChildProcess> {
|
||||
let command = format!(
|
||||
@ -62,6 +65,6 @@ impl RustPseudoTerminal {
|
||||
);
|
||||
|
||||
trace!("nx_fork command: {}", &command);
|
||||
self.run_command(command, command_dir, js_env, Some(quiet), Some(true))
|
||||
self.run_command(command, command_dir, js_env, exec_argv, Some(quiet), Some(true))
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,6 +117,7 @@ pub fn run_command(
|
||||
command: String,
|
||||
command_dir: Option<String>,
|
||||
js_env: Option<HashMap<String, String>>,
|
||||
exec_argv: Option<Vec<String>>,
|
||||
quiet: Option<bool>,
|
||||
tty: Option<bool>,
|
||||
) -> napi::Result<ChildProcess> {
|
||||
@ -138,6 +139,10 @@ pub fn run_command(
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(exec_argv) = exec_argv {
|
||||
cmd.env("NX_PSEUDO_TERMINAL_EXEC_ARGV", exec_argv.join("|"));
|
||||
}
|
||||
|
||||
let (exit_to_process_tx, exit_to_process_rx) = bounded(1);
|
||||
let mut child = pair.slave.spawn_command(cmd)?;
|
||||
pseudo_terminal.running.store(true, Ordering::SeqCst);
|
||||
|
||||
@ -7,8 +7,16 @@ const forkId = process.argv[3];
|
||||
|
||||
const script = join(__dirname, '../../bin/run-executor.js');
|
||||
|
||||
let execArgv: string[] | undefined;
|
||||
if (process.env['NX_PSEUDO_TERMINAL_EXEC_ARGV']) {
|
||||
execArgv = process.env['NX_PSEUDO_TERMINAL_EXEC_ARGV'].split('|');
|
||||
delete process.env['NX_PSEUDO_TERMINAL_EXEC_ARGV'];
|
||||
}
|
||||
|
||||
const childProcess = fork(script, {
|
||||
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
|
||||
env: process.env,
|
||||
execArgv,
|
||||
});
|
||||
|
||||
const pseudoIPC = new PseudoIPCClient(pseudoIPCPath);
|
||||
|
||||
@ -220,6 +220,7 @@ export class ForkedProcessTaskRunner {
|
||||
const childId = task.id;
|
||||
const p = await this.pseudoTerminal.fork(childId, forkScript, {
|
||||
cwd: process.cwd(),
|
||||
execArgv: process.execArgv,
|
||||
jsEnv: env,
|
||||
quiet: !streamOutput,
|
||||
});
|
||||
|
||||
@ -41,18 +41,27 @@ export class PseudoTerminal {
|
||||
command: string,
|
||||
{
|
||||
cwd,
|
||||
execArgv,
|
||||
jsEnv,
|
||||
quiet,
|
||||
tty,
|
||||
}: {
|
||||
cwd?: string;
|
||||
execArgv?: string[];
|
||||
jsEnv?: Record<string, string>;
|
||||
quiet?: boolean;
|
||||
tty?: boolean;
|
||||
} = {}
|
||||
) {
|
||||
return new PseudoTtyProcess(
|
||||
this.rustPseudoTerminal.runCommand(command, cwd, jsEnv, quiet, tty)
|
||||
this.rustPseudoTerminal.runCommand(
|
||||
command,
|
||||
cwd,
|
||||
jsEnv,
|
||||
execArgv,
|
||||
quiet,
|
||||
tty
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -61,10 +70,12 @@ export class PseudoTerminal {
|
||||
script: string,
|
||||
{
|
||||
cwd,
|
||||
execArgv,
|
||||
jsEnv,
|
||||
quiet,
|
||||
}: {
|
||||
cwd?: string;
|
||||
execArgv?: string[];
|
||||
jsEnv?: Record<string, string>;
|
||||
quiet?: boolean;
|
||||
}
|
||||
@ -79,6 +90,7 @@ export class PseudoTerminal {
|
||||
this.pseudoIPCPath,
|
||||
cwd,
|
||||
jsEnv,
|
||||
execArgv,
|
||||
quiet
|
||||
),
|
||||
id,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user