in packages/amplify-codegen-e2e-core/src/utils/nexpect.ts [591:654]
export function nspawn(command: string | string[], params: string[] = [], options: SpawnOptions = {}) {
if (Array.isArray(command)) {
params = command;
command = params.shift();
} else if (typeof command === 'string') {
const parsedPath = parse(command);
const parsedArgs = parsedPath.base.split(' ');
command = join(parsedPath.dir, parsedArgs[0]);
params = params || parsedArgs.slice(1);
}
let childEnv = undefined;
let pushEnv = undefined;
// For push operations in E2E we have to explicitly disable the Amplify Console App creation
// as for the tests that need it, it is already enabled for init, setting the env var here
// disables the post push check we have in the CLI.
if (params.length > 0 && params[0].toLowerCase() === 'push') {
pushEnv = {
CLI_DEV_INTERNAL_DISABLE_AMPLIFY_APP_CREATION: '1',
};
}
// If we have an environment passed in we've to add the current process' environment, otherwised the forked
// process would not have $PATH and others that is required to run amplify-cli successfully.
// to be able to disable CI detection we do need to pass in a childEnv
if (options.env || pushEnv || options.disableCIDetection === true) {
childEnv = {
...process.env,
...pushEnv,
...options.env,
};
// Undo ci-info detection, required for some tests
if (options.disableCIDetection === true) {
delete childEnv.CI;
delete childEnv.CONTINUOUS_INTEGRATION;
delete childEnv.BUILD_NUMBER;
delete childEnv.TRAVIS;
delete childEnv.GITHUB_ACTIONS;
delete childEnv.CIRCLECI;
delete childEnv.CIRCLE_PULL_REQUEST;
}
}
let context: Context = {
command: command,
cwd: options.cwd || undefined,
env: childEnv || undefined,
ignoreCase: options.ignoreCase || true,
noOutputTimeout: options.noOutputTimeout || DEFAULT_NO_OUTPUT_TIMEOUT,
params: params,
queue: [],
stripColors: options.stripColors,
process: undefined,
getRecording: () => {
if (context.process) {
return context.process.getRecording();
}
},
};
return chain(context);
}