snyk-go-plugin
Version:
Snyk CLI Golang plugin
69 lines • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.runGo = exports.execute = void 0;
const childProcess = require("child_process");
const debug_1 = require("./debug");
async function execute(command, args, options, shell = false) {
const spawnOptions = {
shell,
env: { ...process.env },
};
if (options === null || options === void 0 ? void 0 : options.cwd) {
spawnOptions.cwd = options.cwd;
}
if (options === null || options === void 0 ? void 0 : options.env) {
spawnOptions.env = { ...process.env, ...options.env };
}
// Ensure env is defined (it always is due to initialization above)
const env = spawnOptions.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) {
env.HTTP_PROXY = process.env.SNYK_SYSTEM_HTTP_PROXY;
}
if (process.env.SNYK_SYSTEM_HTTPS_PROXY !== undefined) {
env.HTTPS_PROXY = process.env.SNYK_SYSTEM_HTTPS_PROXY;
}
if (process.env.SNYK_SYSTEM_NO_PROXY !== undefined) {
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);
if (proc.stdout) {
proc.stdout.on('data', (data) => {
stdout = stdout + data;
});
}
if (proc.stderr) {
proc.stderr.on('data', (data) => {
stderr = stderr + data;
});
}
proc.on('close', (code) => {
if (code !== 0) {
return reject(stdout || stderr);
}
resolve(stdout || stderr);
});
});
}
exports.execute = execute;
async function runGo(args, options, additionalGoCommands = []) {
try {
return await execute('go', args, options);
}
catch (err) {
const [command] = /(go mod download)|(go get [^"]*)/.exec(err) || [];
if (command && !additionalGoCommands.includes(command)) {
(0, debug_1.debug)('running command:', command);
const newArgs = command.split(' ').slice(1);
await execute('go', newArgs, options);
return runGo(args, options, additionalGoCommands.concat(command));
}
throw err;
}
}
exports.runGo = runGo;
//# sourceMappingURL=sub-process.js.map