in tool.ts [201:263]
export async function downloadTool(url: string, fileName?: string, handlers?: ifm.IRequestHandler[]): Promise<string> {
return new Promise<string>(async (resolve, reject) => {
try {
handlers = handlers || null;
let http: httpm.HttpClient = new httpm.HttpClient(userAgent, handlers, requestOptions);
tl.debug(fileName);
fileName = fileName || uuidV4();
// check if it's an absolute path already
var destPath: string;
if(path.isAbsolute(fileName))
{
destPath = fileName;
}
else
{
destPath = path.join(_getAgentTemp(), fileName);
}
// make sure that the folder exists
tl.mkdirP(path.dirname(destPath));
console.log(tl.loc('TOOL_LIB_Downloading', url));
tl.debug('destination ' + destPath);
if (fs.existsSync(destPath)) {
throw new Error("Destination file path already exists");
}
tl.debug('downloading');
let response: httpm.HttpClientResponse = await http.get(url);
if (response.message.statusCode != 200) {
let err: Error = new Error('Unexpected HTTP response: ' + response.message.statusCode);
err['httpStatusCode'] = response.message.statusCode;
tl.debug(`Failed to download "${fileName}" from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
throw err;
}
tl.debug('creating stream');
let file: NodeJS.WritableStream = fs.createWriteStream(destPath);
file.on('open', async (fd) => {
try {
let stream = response.message.pipe(file);
stream.on('close', () => {
tl.debug('download complete');
resolve(destPath);
});
}
catch (err) {
reject(err);
}
});
file.on('error', (err) => {
file.end();
reject(err);
})
}
catch (error) {
reject(error);
}
});
}