azure-pipelines-task-lib 5.0.0-preview.0 → 5.0.1-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,7 +36,7 @@ This Azure Pipelines extension (azure-pipelines-task-lib) is based on or incorpo
36
36
  30. semver (git+https://github.com/npm/node-semver.git)
37
37
  31. shelljs (git://github.com/arturadib/shelljs.git)
38
38
  32. string_decoder (git://github.com/rvagg/string_decoder.git)
39
- 33. sync-request (git+https://github.com/ForbesLindesay/sync-request.git)
39
+ 33. nodejs-file-downloader (git://github.com/ibrod83/nodejs-file-downloader.git)
40
40
  34. then-request (git+https://github.com/then/then-request.git)
41
41
  35. typedarray (git://github.com/substack/typedarray.git)
42
42
  36. typescript (git+https://github.com/Microsoft/TypeScript.git)
@@ -889,7 +889,8 @@ IN THE SOFTWARE.
889
889
  =========================================
890
890
  END OF string_decoder NOTICES, INFORMATION, AND LICENSE
891
891
 
892
- %% sync-request NOTICES, INFORMATION, AND LICENSE BEGIN HERE
892
+
893
+ %% nodejs-file-downloader NOTICES, INFORMATION, AND LICENSE BEGIN HERE
893
894
  =========================================
894
895
  Copyright (c) 2014 Forbes Lindesay
895
896
 
@@ -911,7 +912,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
911
912
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
912
913
  THE SOFTWARE.
913
914
  =========================================
914
- END OF sync-request NOTICES, INFORMATION, AND LICENSE
915
+ END OF nodejs-file-downloader NOTICES, INFORMATION, AND LICENSE
916
+
915
917
 
916
918
  %% then-request NOTICES, INFORMATION, AND LICENSE BEGIN HERE
917
919
  =========================================
package/mock-test.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare class MockTestRunner {
2
- constructor(testPath: string, taskJsonPath?: string);
2
+ constructor(testPath?: string, taskJsonPath?: string);
3
3
  private _testPath;
4
4
  private _taskJsonPath;
5
5
  nodePath: string;
@@ -10,13 +10,14 @@ export declare class MockTestRunner {
10
10
  succeeded: boolean;
11
11
  errorIssues: string[];
12
12
  warningIssues: string[];
13
+ LoadAsync(testPath?: string, taskJsonPath?: string): Promise<MockTestRunner>;
13
14
  get failed(): boolean;
14
15
  ran(cmdline: string): boolean;
15
16
  createdErrorIssue(message: string): boolean;
16
17
  createdWarningIssue(message: string): boolean;
17
18
  stdOutContained(message: string): boolean;
18
19
  stdErrContained(message: string): boolean;
19
- run(nodeVersion?: number): void;
20
+ runAsync(nodeVersion?: number): Promise<void>;
20
21
  private getNodePath;
21
22
  private getNodeVersion;
22
23
  private getTaskJsonPath;
package/mock-test.js CHANGED
@@ -1,14 +1,49 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
2
38
  Object.defineProperty(exports, "__esModule", { value: true });
3
39
  exports.MockTestRunner = void 0;
4
40
  var cp = require("child_process");
5
41
  var fs = require("fs");
6
- var ncp = require("child_process");
7
42
  var os = require("os");
8
43
  var path = require("path");
9
44
  var cmdm = require("./taskcommand");
10
45
  var shelljs = require("shelljs");
11
- var sync_request_1 = require("sync-request");
46
+ var Downloader = require("nodejs-file-downloader");
12
47
  var COMMAND_TAG = '[command]';
13
48
  var COMMAND_LENGTH = COMMAND_TAG.length;
14
49
  var downloadDirectory = path.join(process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE, 'azure-pipelines-task-lib', '_download');
@@ -24,10 +59,42 @@ var MockTestRunner = /** @class */ (function () {
24
59
  this.succeeded = false;
25
60
  this.errorIssues = [];
26
61
  this.warningIssues = [];
62
+ if (testPath === undefined)
63
+ return;
27
64
  this._taskJsonPath = taskJsonPath || '';
28
65
  this._testPath = testPath;
29
- this.nodePath = this.getNodePath();
30
66
  }
67
+ MockTestRunner.prototype.LoadAsync = function (testPath, taskJsonPath) {
68
+ return __awaiter(this, void 0, void 0, function () {
69
+ var _this = this;
70
+ return __generator(this, function (_a) {
71
+ return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
72
+ var _a;
73
+ return __generator(this, function (_b) {
74
+ switch (_b.label) {
75
+ case 0:
76
+ if (this.nodePath != '') {
77
+ resolve(this);
78
+ return [2 /*return*/];
79
+ }
80
+ if (testPath) {
81
+ this._testPath = testPath;
82
+ }
83
+ if (taskJsonPath) {
84
+ this._taskJsonPath = taskJsonPath;
85
+ }
86
+ _a = this;
87
+ return [4 /*yield*/, this.getNodePath()];
88
+ case 1:
89
+ _a.nodePath = _b.sent();
90
+ resolve(this);
91
+ return [2 /*return*/];
92
+ }
93
+ });
94
+ }); })];
95
+ });
96
+ });
97
+ };
31
98
  Object.defineProperty(MockTestRunner.prototype, "failed", {
32
99
  get: function () {
33
100
  return !this.succeeded;
@@ -50,103 +117,128 @@ var MockTestRunner = /** @class */ (function () {
50
117
  MockTestRunner.prototype.stdErrContained = function (message) {
51
118
  return this.stderr.indexOf(message) > 0;
52
119
  };
53
- MockTestRunner.prototype.run = function (nodeVersion) {
54
- var _this = this;
55
- this.cmdlines = {};
56
- this.invokedToolCount = 0;
57
- this.succeeded = true;
58
- this.errorIssues = [];
59
- this.warningIssues = [];
60
- var nodePath = this.nodePath;
61
- if (nodeVersion) {
62
- nodePath = this.getNodePath(nodeVersion);
63
- }
64
- var spawn = cp.spawnSync(nodePath, [this._testPath]);
65
- // Clean environment
66
- Object.keys(process.env)
67
- .filter(function (key) { return (key.substr(0, 'INPUT_'.length) === 'INPUT_' ||
68
- key.substr(0, 'SECRET_'.length) === 'SECRET_' ||
69
- key.substr(0, 'VSTS_TASKVARIABLE_'.length) === 'VSTS_TASKVARIABLE_'); })
70
- .forEach(function (key) { return delete process.env[key]; });
71
- if (spawn.error) {
72
- console.error('Running test failed');
73
- console.error(spawn.error.message);
74
- return;
75
- }
76
- this.stdout = spawn.stdout.toString();
77
- this.stderr = spawn.stderr.toString();
78
- if (process.env['TASK_TEST_TRACE']) {
79
- console.log('');
80
- }
81
- var lines = this.stdout.replace(/\r\n/g, '\n').split('\n');
82
- var traceFile = this._testPath + '.log';
83
- lines.forEach(function (line) {
84
- var ci = line.indexOf('##vso[');
85
- var cmd;
86
- var cmi = line.indexOf(COMMAND_TAG);
87
- if (ci >= 0) {
88
- cmd = cmdm.commandFromString(line.substring(ci));
89
- if (cmd.command === 'task.complete' && cmd.properties['result'] === 'Failed') {
90
- _this.succeeded = false;
120
+ MockTestRunner.prototype.runAsync = function (nodeVersion) {
121
+ return __awaiter(this, void 0, void 0, function () {
122
+ var nodePath, spawn, lines, traceFile;
123
+ var _this = this;
124
+ return __generator(this, function (_a) {
125
+ switch (_a.label) {
126
+ case 0:
127
+ this.cmdlines = {};
128
+ this.invokedToolCount = 0;
129
+ this.succeeded = true;
130
+ this.errorIssues = [];
131
+ this.warningIssues = [];
132
+ nodePath = this.nodePath;
133
+ if (!nodeVersion) return [3 /*break*/, 2];
134
+ return [4 /*yield*/, this.getNodePath(nodeVersion)];
135
+ case 1:
136
+ nodePath = _a.sent();
137
+ return [3 /*break*/, 4];
138
+ case 2:
139
+ if (!!nodePath) return [3 /*break*/, 4];
140
+ return [4 /*yield*/, this.getNodePath()];
141
+ case 3:
142
+ nodePath = _a.sent();
143
+ this.nodePath = nodePath;
144
+ _a.label = 4;
145
+ case 4:
146
+ spawn = cp.spawnSync(nodePath, [this._testPath]);
147
+ // Clean environment
148
+ Object.keys(process.env)
149
+ .filter(function (key) { return (key.substr(0, 'INPUT_'.length) === 'INPUT_' ||
150
+ key.substr(0, 'SECRET_'.length) === 'SECRET_' ||
151
+ key.substr(0, 'VSTS_TASKVARIABLE_'.length) === 'VSTS_TASKVARIABLE_'); })
152
+ .forEach(function (key) { return delete process.env[key]; });
153
+ if (spawn.error) {
154
+ console.error('Running test failed');
155
+ console.error(spawn.error.message);
156
+ return [2 /*return*/];
157
+ }
158
+ this.stdout = spawn.stdout.toString();
159
+ this.stderr = spawn.stderr.toString();
160
+ if (process.env['TASK_TEST_TRACE']) {
161
+ console.log('');
162
+ }
163
+ lines = this.stdout.replace(/\r\n/g, '\n').split('\n');
164
+ traceFile = this._testPath + '.log';
165
+ lines.forEach(function (line) {
166
+ var ci = line.indexOf('##vso[');
167
+ var cmd;
168
+ var cmi = line.indexOf(COMMAND_TAG);
169
+ if (ci >= 0) {
170
+ cmd = cmdm.commandFromString(line.substring(ci));
171
+ if (cmd.command === 'task.complete' && cmd.properties['result'] === 'Failed') {
172
+ _this.succeeded = false;
173
+ }
174
+ if (cmd.command === 'task.issue' && cmd.properties['type'] === 'error') {
175
+ _this.errorIssues.push(cmd.message.trim());
176
+ }
177
+ if (cmd.command === 'task.issue' && cmd.properties['type'] === 'warning') {
178
+ _this.warningIssues.push(cmd.message.trim());
179
+ }
180
+ }
181
+ else if (cmi == 0 && line.length > COMMAND_LENGTH) {
182
+ var cmdline = line.substr(COMMAND_LENGTH).trim();
183
+ _this.cmdlines[cmdline] = true;
184
+ _this.invokedToolCount++;
185
+ }
186
+ if (process.env['TASK_TEST_TRACE']) {
187
+ fs.appendFileSync(traceFile, line + os.EOL);
188
+ if (line && !cmd) {
189
+ console.log(line);
190
+ }
191
+ // don't print task.debug commands to console - too noisy.
192
+ // otherwise omit command details - can interfere during CI.
193
+ else if (cmd && cmd.command != 'task.debug') {
194
+ console.log(cmd.command + " details omitted");
195
+ }
196
+ }
197
+ });
198
+ if (this.stderr && process.env['TASK_TEST_TRACE']) {
199
+ console.log('STDERR: ' + this.stderr);
200
+ fs.appendFileSync(traceFile, 'STDERR: ' + this.stderr + os.EOL);
201
+ }
202
+ if (process.env['TASK_TEST_TRACE']) {
203
+ console.log('TRACE FILE: ' + traceFile);
204
+ }
205
+ return [2 /*return*/];
91
206
  }
92
- if (cmd.command === 'task.issue' && cmd.properties['type'] === 'error') {
93
- _this.errorIssues.push(cmd.message.trim());
94
- }
95
- if (cmd.command === 'task.issue' && cmd.properties['type'] === 'warning') {
96
- _this.warningIssues.push(cmd.message.trim());
97
- }
98
- }
99
- else if (cmi == 0 && line.length > COMMAND_LENGTH) {
100
- var cmdline = line.substr(COMMAND_LENGTH).trim();
101
- _this.cmdlines[cmdline] = true;
102
- _this.invokedToolCount++;
103
- }
104
- if (process.env['TASK_TEST_TRACE']) {
105
- fs.appendFileSync(traceFile, line + os.EOL);
106
- if (line && !cmd) {
107
- console.log(line);
108
- }
109
- // don't print task.debug commands to console - too noisy.
110
- // otherwise omit command details - can interfere during CI.
111
- else if (cmd && cmd.command != 'task.debug') {
112
- console.log(cmd.command + " details omitted");
113
- }
114
- }
207
+ });
115
208
  });
116
- if (this.stderr && process.env['TASK_TEST_TRACE']) {
117
- console.log('STDERR: ' + this.stderr);
118
- fs.appendFileSync(traceFile, 'STDERR: ' + this.stderr + os.EOL);
119
- }
120
- if (process.env['TASK_TEST_TRACE']) {
121
- console.log('TRACE FILE: ' + traceFile);
122
- }
123
209
  };
124
210
  // Returns a path to node.exe with the correct version for this task (based on if its node10 or node)
125
211
  MockTestRunner.prototype.getNodePath = function (nodeVersion) {
126
- var version = nodeVersion || this.getNodeVersion();
127
- var downloadVersion;
128
- switch (version) {
129
- case 6:
130
- downloadVersion = 'v6.17.1';
131
- break;
132
- case 10:
133
- downloadVersion = 'v10.21.0';
134
- break;
135
- case 16:
136
- downloadVersion = 'v16.13.0';
137
- break;
138
- default:
139
- throw new Error('Invalid node version, must be 6, 10, or 16 (received ' + version + ')');
140
- }
141
- // Install node in home directory if it isn't already there.
142
- var downloadDestination = path.join(downloadDirectory, 'node' + version);
143
- var pathToExe = this.getPathToNodeExe(downloadVersion, downloadDestination);
144
- if (pathToExe) {
145
- return pathToExe;
146
- }
147
- else {
148
- return this.downloadNode(downloadVersion, downloadDestination);
149
- }
212
+ return __awaiter(this, void 0, void 0, function () {
213
+ var version, downloadVersion, downloadDestination, pathToExe, result;
214
+ return __generator(this, function (_a) {
215
+ switch (_a.label) {
216
+ case 0:
217
+ version = nodeVersion || this.getNodeVersion();
218
+ switch (version) {
219
+ case 6:
220
+ downloadVersion = 'v6.17.1';
221
+ break;
222
+ case 10:
223
+ downloadVersion = 'v10.21.0';
224
+ break;
225
+ case 16:
226
+ downloadVersion = 'v16.13.0';
227
+ break;
228
+ default:
229
+ throw new Error('Invalid node version, must be 6, 10, or 16 (received ' + version + ')');
230
+ }
231
+ downloadDestination = path.join(downloadDirectory, 'node' + version);
232
+ pathToExe = this.getPathToNodeExe(downloadVersion, downloadDestination);
233
+ if (!pathToExe) return [3 /*break*/, 1];
234
+ return [2 /*return*/, pathToExe];
235
+ case 1: return [4 /*yield*/, this.downloadNode(downloadVersion, downloadDestination)];
236
+ case 2:
237
+ result = _a.sent();
238
+ return [2 /*return*/, result];
239
+ }
240
+ });
241
+ });
150
242
  };
151
243
  // Determines the correct version of node to use based on the contents of the task's task.json. Defaults to Node 16.
152
244
  MockTestRunner.prototype.getNodeVersion = function () {
@@ -201,65 +293,108 @@ var MockTestRunner = /** @class */ (function () {
201
293
  };
202
294
  // Downloads the specified node version to the download destination. Returns a path to node.exe
203
295
  MockTestRunner.prototype.downloadNode = function (nodeVersion, downloadDestination) {
204
- shelljs.rm('-rf', downloadDestination);
205
- var nodeUrl = process.env['TASK_NODE_URL'] || 'https://nodejs.org/dist';
206
- nodeUrl = nodeUrl.replace(/\/$/, ''); // ensure there is no trailing slash on the base URL
207
- var downloadPath = '';
208
- switch (this.getPlatform()) {
209
- case 'darwin':
210
- this.downloadTarGz(nodeUrl + '/' + nodeVersion + '/node-' + nodeVersion + '-darwin-x64.tar.gz', downloadDestination);
211
- downloadPath = path.join(downloadDestination, 'node-' + nodeVersion + '-darwin-x64', 'bin', 'node');
212
- break;
213
- case 'linux':
214
- this.downloadTarGz(nodeUrl + '/' + nodeVersion + '/node-' + nodeVersion + '-linux-x64.tar.gz', downloadDestination);
215
- downloadPath = path.join(downloadDestination, 'node-' + nodeVersion + '-linux-x64', 'bin', 'node');
216
- break;
217
- case 'win32':
218
- this.downloadFile(nodeUrl + '/' + nodeVersion + '/win-x64/node.exe', downloadDestination, 'node.exe');
219
- this.downloadFile(nodeUrl + '/' + nodeVersion + '/win-x64/node.lib', downloadDestination, 'node.lib');
220
- downloadPath = path.join(downloadDestination, 'node.exe');
221
- }
222
- // Write marker to indicate download completed.
223
- var marker = downloadDestination + '.completed';
224
- fs.writeFileSync(marker, '');
225
- return downloadPath;
296
+ return __awaiter(this, void 0, void 0, function () {
297
+ var nodeUrl, downloadPath, _a, marker;
298
+ return __generator(this, function (_b) {
299
+ switch (_b.label) {
300
+ case 0:
301
+ shelljs.rm('-rf', downloadDestination);
302
+ nodeUrl = process.env['TASK_NODE_URL'] || 'https://nodejs.org/dist';
303
+ nodeUrl = nodeUrl.replace(/\/$/, ''); // ensure there is no trailing slash on the base URL
304
+ downloadPath = '';
305
+ _a = this.getPlatform();
306
+ switch (_a) {
307
+ case 'darwin': return [3 /*break*/, 1];
308
+ case 'linux': return [3 /*break*/, 3];
309
+ case 'win32': return [3 /*break*/, 5];
310
+ }
311
+ return [3 /*break*/, 8];
312
+ case 1: return [4 /*yield*/, this.downloadTarGz(nodeUrl + '/' + nodeVersion + '/node-' + nodeVersion + '-darwin-x64.tar.gz', downloadDestination)];
313
+ case 2:
314
+ _b.sent();
315
+ downloadPath = path.join(downloadDestination, 'node-' + nodeVersion + '-darwin-x64', 'bin', 'node');
316
+ return [3 /*break*/, 8];
317
+ case 3: return [4 /*yield*/, this.downloadTarGz(nodeUrl + '/' + nodeVersion + '/node-' + nodeVersion + '-linux-x64.tar.gz', downloadDestination)];
318
+ case 4:
319
+ _b.sent();
320
+ downloadPath = path.join(downloadDestination, 'node-' + nodeVersion + '-linux-x64', 'bin', 'node');
321
+ return [3 /*break*/, 8];
322
+ case 5: return [4 /*yield*/, this.downloadFile(nodeUrl + '/' + nodeVersion + '/win-x64/node.exe', downloadDestination, 'node.exe')];
323
+ case 6:
324
+ _b.sent();
325
+ return [4 /*yield*/, this.downloadFile(nodeUrl + '/' + nodeVersion + '/win-x64/node.lib', downloadDestination, 'node.lib')];
326
+ case 7:
327
+ _b.sent();
328
+ downloadPath = path.join(downloadDestination, 'node.exe');
329
+ _b.label = 8;
330
+ case 8:
331
+ marker = downloadDestination + '.completed';
332
+ fs.writeFileSync(marker, '');
333
+ return [2 /*return*/, downloadPath];
334
+ }
335
+ });
336
+ });
226
337
  };
227
338
  // Downloads file to the downloadDestination, making any necessary folders along the way.
228
339
  MockTestRunner.prototype.downloadFile = function (url, downloadDestination, fileName) {
229
- var filePath = path.join(downloadDestination, fileName);
230
- if (!url) {
231
- throw new Error('Parameter "url" must be set.');
232
- }
233
- if (!downloadDestination) {
234
- throw new Error('Parameter "downloadDestination" must be set.');
235
- }
236
- console.log('Downloading file:', url);
237
- shelljs.mkdir('-p', downloadDestination);
238
- var result = sync_request_1.default('GET', url);
239
- fs.writeFileSync(filePath, result.getBody());
340
+ return __awaiter(this, void 0, void 0, function () {
341
+ var downloader;
342
+ return __generator(this, function (_a) {
343
+ switch (_a.label) {
344
+ case 0:
345
+ if (!url) {
346
+ throw new Error('Parameter "url" must be set.');
347
+ }
348
+ if (!downloadDestination) {
349
+ throw new Error('Parameter "downloadDestination" must be set.');
350
+ }
351
+ console.log('Downloading file:', url);
352
+ shelljs.mkdir('-p', downloadDestination);
353
+ downloader = new Downloader({
354
+ url: url,
355
+ directory: downloadDestination,
356
+ fileName: fileName
357
+ });
358
+ return [4 /*yield*/, downloader.download()];
359
+ case 1:
360
+ _a.sent();
361
+ return [2 /*return*/];
362
+ }
363
+ });
364
+ });
240
365
  };
241
366
  // Downloads tarGz to the download destination, making any necessary folders along the way.
242
367
  MockTestRunner.prototype.downloadTarGz = function (url, downloadDestination) {
243
- if (!url) {
244
- throw new Error('Parameter "url" must be set.');
245
- }
246
- if (!downloadDestination) {
247
- throw new Error('Parameter "downloadDestination" must be set.');
248
- }
249
- var tarGzName = 'node.tar.gz';
250
- this.downloadFile(url, downloadDestination, tarGzName);
251
- // Extract file
252
- var originalCwd = process.cwd();
253
- process.chdir(downloadDestination);
254
- try {
255
- ncp.execSync("tar -xzf \"" + path.join(downloadDestination, tarGzName) + "\"");
256
- }
257
- catch (_a) {
258
- throw new Error('Failed to unzip node tar.gz from ' + url);
259
- }
260
- finally {
261
- process.chdir(originalCwd);
262
- }
368
+ return __awaiter(this, void 0, void 0, function () {
369
+ var tarGzName, originalCwd;
370
+ return __generator(this, function (_a) {
371
+ switch (_a.label) {
372
+ case 0:
373
+ if (!url) {
374
+ throw new Error('Parameter "url" must be set.');
375
+ }
376
+ if (!downloadDestination) {
377
+ throw new Error('Parameter "downloadDestination" must be set.');
378
+ }
379
+ tarGzName = 'node.tar.gz';
380
+ return [4 /*yield*/, this.downloadFile(url, downloadDestination, tarGzName)];
381
+ case 1:
382
+ _a.sent();
383
+ originalCwd = process.cwd();
384
+ process.chdir(downloadDestination);
385
+ try {
386
+ cp.execSync("tar -xzf \"" + path.join(downloadDestination, tarGzName) + "\"");
387
+ }
388
+ catch (_b) {
389
+ throw new Error('Failed to unzip node tar.gz from ' + url);
390
+ }
391
+ finally {
392
+ process.chdir(originalCwd);
393
+ }
394
+ return [2 /*return*/];
395
+ }
396
+ });
397
+ });
263
398
  };
264
399
  // Checks if node is installed at downloadDestination. If it is, returns a path to node.exe, otherwise returns null.
265
400
  MockTestRunner.prototype.getPathToNodeExe = function (nodeVersion, downloadDestination) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "azure-pipelines-task-lib",
3
- "version": "5.0.0-preview.0",
3
+ "version": "5.0.1-preview.0",
4
4
  "description": "Azure Pipelines Task SDK",
5
5
  "main": "./task.js",
6
6
  "typings": "./task.d.ts",
@@ -27,11 +27,12 @@
27
27
  },
28
28
  "homepage": "https://github.com/Microsoft/azure-pipelines-task-lib",
29
29
  "dependencies": {
30
+ "adm-zip": "^0.5.10",
30
31
  "minimatch": "3.0.5",
32
+ "nodejs-file-downloader": "^4.11.1",
31
33
  "q": "^1.5.1",
32
34
  "semver": "^5.1.0",
33
35
  "shelljs": "^0.8.5",
34
- "sync-request": "6.1.0",
35
36
  "uuid": "^3.0.1"
36
37
  },
37
38
  "devDependencies": {