snyk-go-plugin
Version:
Snyk CLI Golang plugin
52 lines (46 loc) • 1.48 kB
text/typescript
import * as childProcess from 'child_process';
export function execute(
command: string,
args: string[],
options?: { cwd?: string; env?: any },
shell: boolean = false,
): Promise<string> {
const spawnOptions: childProcess.SpawnOptions = {
shell,
env: { ...process.env },
};
if (options?.cwd) {
spawnOptions.cwd = options.cwd;
}
if (options?.env) {
spawnOptions.env = { ...process.env, ...options.env };
}
// Before spawning an external process, we look if we need to restore the system proxy configuration,
// which overides the cli internal proxy configuration.
if (process.env.SNYK_SYSTEM_HTTP_PROXY !== undefined) {
spawnOptions.env.HTTP_PROXY = process.env.SNYK_SYSTEM_HTTP_PROXY;
}
if (process.env.SNYK_SYSTEM_HTTPS_PROXY !== undefined) {
spawnOptions.env.HTTPS_PROXY = process.env.SNYK_SYSTEM_HTTPS_PROXY;
}
if (process.env.SNYK_SYSTEM_NO_PROXY !== undefined) {
spawnOptions.env.NO_PROXY = process.env.SNYK_SYSTEM_NO_PROXY;
}
return new Promise((resolve, reject) => {
let stdout = '';
let stderr = '';
const proc = childProcess.spawn(command, args, spawnOptions);
proc.stdout.on('data', (data: Buffer) => {
stdout = stdout + data;
});
proc.stderr.on('data', (data: Buffer) => {
stderr = stderr + data;
});
proc.on('close', (code) => {
if (code !== 0) {
return reject(stdout || stderr);
}
resolve(stdout || stderr);
});
});
}