Skip to content

Commit 70d4711

Browse files
Fix CodeQL fail tests (#1034)
* Fix CodeQL fail tests - Fixed error when the spawn method couldn't execute * temporary enable codeql for all branches * Revert "temporary enable codeql for all branches" This reverts commit 057dfb6. * Increase timeout for codeql
1 parent ab88524 commit 70d4711

File tree

4 files changed

+80
-49
lines changed

4 files changed

+80
-49
lines changed

node/package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "azure-pipelines-task-lib",
3-
"version": "4.10.1",
3+
"version": "4.11.0",
44
"description": "Azure Pipelines Task SDK",
55
"main": "./task.js",
66
"typings": "./task.d.ts",

node/test/toolrunnertests.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ describe('Toolrunner Tests', function () {
608608
});
609609
})
610610
it('Exec pipe output to another tool, succeeds if both tools succeed', function (done) {
611-
this.timeout(30000);
611+
this.timeout(120000);
612612

613613
var _testExecOptions = <trm.IExecOptions>{
614614
cwd: __dirname,

node/toolrunner.ts

+77-46
Original file line numberDiff line numberDiff line change
@@ -1098,7 +1098,45 @@ export class ToolRunner extends events.EventEmitter {
10981098
this._debug(message);
10991099
});
11001100

1101-
let cp = child.spawn(this._getSpawnFileName(options), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(options));
1101+
var stdbuffer: string = '';
1102+
var errbuffer: string = '';
1103+
const emitDoneEvent = function (resolve, reject) {
1104+
state.on('done', (error: Error, exitCode: number) => {
1105+
if (stdbuffer.length > 0) {
1106+
this.emit('stdline', stdbuffer);
1107+
}
1108+
1109+
if (errbuffer.length > 0) {
1110+
this.emit('errline', errbuffer);
1111+
}
1112+
1113+
if (cp) {
1114+
cp.removeAllListeners();
1115+
}
1116+
1117+
if (error) {
1118+
reject(error);
1119+
}
1120+
else {
1121+
resolve(exitCode);
1122+
}
1123+
});
1124+
}
1125+
1126+
// Edge case when the node itself cant's spawn and emit event
1127+
let cp;
1128+
try {
1129+
cp = child.spawn(this._getSpawnFileName(options), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(options));
1130+
} catch (error) {
1131+
return new Promise((resolve, reject) => {
1132+
emitDoneEvent(resolve, reject);
1133+
state.processError = error.message;
1134+
state.processExited = true;
1135+
state.processClosed = true;
1136+
state.CheckComplete();
1137+
});
1138+
}
1139+
11021140
this.childProcess = cp;
11031141
// it is possible for the child process to end its last line without a new line.
11041142
// because stdout is buffered, this causes the last line to not get sent to the parent
@@ -1109,7 +1147,6 @@ export class ToolRunner extends events.EventEmitter {
11091147
}
11101148
});
11111149

1112-
var stdbuffer: string = '';
11131150
cp.stdout?.on('data', (data: Buffer) => {
11141151
this.emit('stdout', data);
11151152

@@ -1122,8 +1159,6 @@ export class ToolRunner extends events.EventEmitter {
11221159
});
11231160
});
11241161

1125-
1126-
var errbuffer: string = '';
11271162
cp.stderr?.on('data', (data: Buffer) => {
11281163
state.processStderr = true;
11291164
this.emit('stderr', data);
@@ -1160,26 +1195,7 @@ export class ToolRunner extends events.EventEmitter {
11601195
state.CheckComplete();
11611196
});
11621197

1163-
return new Promise((resolve, reject) => {
1164-
state.on('done', (error: Error, exitCode: number) => {
1165-
if (stdbuffer.length > 0) {
1166-
this.emit('stdline', stdbuffer);
1167-
}
1168-
1169-
if (errbuffer.length > 0) {
1170-
this.emit('errline', errbuffer);
1171-
}
1172-
1173-
cp.removeAllListeners();
1174-
1175-
if (error) {
1176-
reject(error);
1177-
}
1178-
else {
1179-
resolve(exitCode);
1180-
}
1181-
});
1182-
});
1198+
return new Promise(emitDoneEvent);
11831199
}
11841200

11851201
/**
@@ -1215,7 +1231,43 @@ export class ToolRunner extends events.EventEmitter {
12151231
this._debug(message);
12161232
});
12171233

1218-
let cp = child.spawn(this._getSpawnFileName(options), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(options));
1234+
var stdbuffer: string = '';
1235+
var errbuffer: string = '';
1236+
state.on('done', (error: Error, exitCode: number) => {
1237+
if (stdbuffer.length > 0) {
1238+
this.emit('stdline', stdbuffer);
1239+
}
1240+
1241+
if (errbuffer.length > 0) {
1242+
this.emit('errline', errbuffer);
1243+
}
1244+
1245+
if (cp) {
1246+
cp.removeAllListeners();
1247+
}
1248+
1249+
if (error) {
1250+
defer.reject(error);
1251+
}
1252+
else {
1253+
defer.resolve(exitCode);
1254+
}
1255+
});
1256+
1257+
1258+
// Edge case when the node itself cant's spawn and emit event
1259+
let cp;
1260+
try {
1261+
cp = child.spawn(this._getSpawnFileName(options), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(options));
1262+
} catch (error) {
1263+
state.processError = error.message;
1264+
state.processExited = true;
1265+
state.processClosed = true;
1266+
state.CheckComplete();
1267+
1268+
return defer.promise;
1269+
}
1270+
12191271
this.childProcess = cp;
12201272
// it is possible for the child process to end its last line without a new line.
12211273
// because stdout is buffered, this causes the last line to not get sent to the parent
@@ -1226,7 +1278,6 @@ export class ToolRunner extends events.EventEmitter {
12261278
}
12271279
});
12281280

1229-
var stdbuffer: string = '';
12301281
cp.stdout?.on('data', (data: Buffer) => {
12311282
this.emit('stdout', data);
12321283

@@ -1240,7 +1291,6 @@ export class ToolRunner extends events.EventEmitter {
12401291
});
12411292

12421293

1243-
var errbuffer: string = '';
12441294
cp.stderr?.on('data', (data: Buffer) => {
12451295
state.processStderr = true;
12461296
this.emit('stderr', data);
@@ -1277,25 +1327,6 @@ export class ToolRunner extends events.EventEmitter {
12771327
state.CheckComplete();
12781328
});
12791329

1280-
state.on('done', (error: Error, exitCode: number) => {
1281-
if (stdbuffer.length > 0) {
1282-
this.emit('stdline', stdbuffer);
1283-
}
1284-
1285-
if (errbuffer.length > 0) {
1286-
this.emit('errline', errbuffer);
1287-
}
1288-
1289-
cp.removeAllListeners();
1290-
1291-
if (error) {
1292-
defer.reject(error);
1293-
}
1294-
else {
1295-
defer.resolve(exitCode);
1296-
}
1297-
});
1298-
12991330
return defer.promise;
13001331
}
13011332

0 commit comments

Comments
 (0)