Skip to content

Commit fd365a6

Browse files
Refactoring the code
1 parent 626b379 commit fd365a6

File tree

2 files changed

+58
-109
lines changed

2 files changed

+58
-109
lines changed

src/Agent.Worker/Handlers/NodeHandler.cs

Lines changed: 48 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public async Task RunAsync()
125125
ExecutionContext.PublishTaskRunnerTelemetry(telemetryData);
126126

127127
await VsoTaskLibManager.DownloadVsoTaskLibAsync(ExecutionContext);
128-
128+
129129
// Ensure compat vso-task-lib exist at the root of _work folder
130130
// This will make vsts-agent work against 2015 RTM/QU1 TFS, since tasks in those version doesn't package with task lib
131131
// Put the 0.5.5 version vso-task-lib into the root of _work/node_modules folder, so tasks are able to find those lib.
@@ -205,7 +205,7 @@ public async Task RunAsync()
205205
}
206206
else
207207
{
208-
node20ResultsInGlibCErrorHost = await CheckIfNode20ResultsInGlibCError();
208+
node20ResultsInGlibCErrorHost = await CheckIfNodeResultsInGlibCError(NodeHandler.Node20_1Folder);
209209
ExecutionContext.EmitHostNode20FallbackTelemetry(node20ResultsInGlibCErrorHost);
210210
supportsNode20 = !node20ResultsInGlibCErrorHost;
211211
}
@@ -218,8 +218,8 @@ public async Task RunAsync()
218218
}
219219
else
220220
{
221-
node24ResultsInGlibCErrorHost = await CheckIfNode24ResultsInGlibCError();
222-
ExecutionContext.EmitHostNode24FallbackTelemetry(node24ResultsInGlibCErrorHost); // Add this method
221+
node24ResultsInGlibCErrorHost = await CheckIfNodeResultsInGlibCError(NodeHandler.Node24Folder);
222+
ExecutionContext.EmitHostNode24FallbackTelemetry(node24ResultsInGlibCErrorHost);
223223
supportsNode24 = !node24ResultsInGlibCErrorHost;
224224
}
225225
}
@@ -317,21 +317,47 @@ public async Task RunAsync()
317317
}
318318
}
319319

320-
private async Task<bool> CheckIfNode20ResultsInGlibCError()
320+
private async Task<bool> CheckIfNodeResultsInGlibCError(string nodeFolder)
321321
{
322-
var node20 = Path.Combine(HostContext.GetDirectory(WellKnownDirectory.Externals), NodeHandler.Node20_1Folder, "bin", $"node{IOUtil.ExeExtension}");
323-
List<string> nodeVersionOutput = await ExecuteCommandAsync(ExecutionContext, node20, "-v", requireZeroExitCode: false, showOutputOnFailureOnly: true);
324-
var node20ResultsInGlibCError = WorkerUtilities.IsCommandResultGlibcError(ExecutionContext, nodeVersionOutput, out string nodeInfoLine);
322+
var nodePath = Path.Combine(HostContext.GetDirectory(WellKnownDirectory.Externals), nodeFolder, "bin", $"node{IOUtil.ExeExtension}");
323+
List<string> nodeVersionOutput = await ExecuteCommandAsync(ExecutionContext, nodePath, "-v", requireZeroExitCode: false, showOutputOnFailureOnly: true);
324+
var nodeResultsInGlibCError = WorkerUtilities.IsCommandResultGlibcError(ExecutionContext, nodeVersionOutput, out string nodeInfoLine);
325325

326-
return node20ResultsInGlibCError;
326+
return nodeResultsInGlibCError;
327327
}
328-
private async Task<bool> CheckIfNode24ResultsInGlibCError()
328+
329+
private string GetNodeFolderWithFallback(string preferredNodeFolder, bool node20ResultsInGlibCError, bool node24ResultsInGlibCError, bool inContainer)
329330
{
330-
var node24 = Path.Combine(HostContext.GetDirectory(WellKnownDirectory.Externals), NodeHandler.Node24Folder, "bin", $"node{IOUtil.ExeExtension}");
331-
List<string> nodeVersionOutput = await ExecuteCommandAsync(ExecutionContext, node24, "-v", requireZeroExitCode: false, showOutputOnFailureOnly: true);
332-
var node24ResultsInGlibCError = WorkerUtilities.IsCommandResultGlibcError(ExecutionContext, nodeVersionOutput, out string nodeInfoLine);
331+
switch (preferredNodeFolder)
332+
{
333+
case var folder when folder == NodeHandler.Node24Folder:
334+
if (node24ResultsInGlibCError)
335+
{
336+
// Fallback to Node20, then Node16 if Node20 also fails
337+
if (node20ResultsInGlibCError)
338+
{
339+
NodeFallbackWarning("20", "16", inContainer);
340+
return NodeHandler.Node16Folder;
341+
}
342+
else
343+
{
344+
NodeFallbackWarning("24", "20", inContainer);
345+
return NodeHandler.Node20_1Folder;
346+
}
347+
}
348+
return NodeHandler.Node24Folder;
349+
350+
case var folder when folder == NodeHandler.Node20_1Folder:
351+
if (node20ResultsInGlibCError)
352+
{
353+
NodeFallbackWarning("20", "16", inContainer);
354+
return NodeHandler.Node16Folder;
355+
}
356+
return NodeHandler.Node20_1Folder;
333357

334-
return node24ResultsInGlibCError;
358+
default:
359+
return preferredNodeFolder;
360+
}
335361
}
336362

337363
public string GetNodeLocation(bool node20ResultsInGlibCError, bool node24ResultsInGlibCError, bool inContainer)
@@ -350,39 +376,12 @@ public string GetNodeLocation(bool node20ResultsInGlibCError, bool node24Results
350376
if (taskHasNode24Data)
351377
{
352378
Trace.Info($"Task.json has node24 handler data: {taskHasNode24Data}");
353-
354-
if (node24ResultsInGlibCError)
355-
{
356-
// Fallback to Node20, then Node16 if Node20 also fails
357-
if (node20ResultsInGlibCError)
358-
{
359-
nodeFolder = NodeHandler.Node16Folder;
360-
Node16FallbackWarning(inContainer);
361-
}
362-
else
363-
{
364-
nodeFolder = NodeHandler.Node20_1Folder;
365-
Node20FallbackWarning(inContainer);
366-
}
367-
}
368-
else
369-
{
370-
nodeFolder = NodeHandler.Node24Folder;
371-
}
379+
nodeFolder = GetNodeFolderWithFallback(NodeHandler.Node24Folder, node20ResultsInGlibCError, node24ResultsInGlibCError, inContainer);
372380
}
373381
else if (taskHasNode20_1Data)
374382
{
375383
Trace.Info($"Task.json has node20_1 handler data: {taskHasNode20_1Data} node20ResultsInGlibCError = {node20ResultsInGlibCError}");
376-
377-
if (node20ResultsInGlibCError)
378-
{
379-
nodeFolder = NodeHandler.Node16Folder;
380-
Node16FallbackWarning(inContainer);
381-
}
382-
else
383-
{
384-
nodeFolder = NodeHandler.Node20_1Folder;
385-
}
384+
nodeFolder = GetNodeFolderWithFallback(NodeHandler.Node20_1Folder, node20ResultsInGlibCError, node24ResultsInGlibCError, inContainer);
386385
}
387386
else if (taskHasNode16Data)
388387
{
@@ -403,39 +402,12 @@ public string GetNodeLocation(bool node20ResultsInGlibCError, bool node24Results
403402
if (useNode24)
404403
{
405404
Trace.Info($"Found UseNode24 knob, using node24 for node tasks: {useNode24}");
406-
407-
if (node24ResultsInGlibCError)
408-
{
409-
// Fallback to Node20, then Node16 if Node20 also fails
410-
if (node20ResultsInGlibCError)
411-
{
412-
nodeFolder = NodeHandler.Node16Folder;
413-
Node16FallbackWarning(inContainer);
414-
}
415-
else
416-
{
417-
nodeFolder = NodeHandler.Node20_1Folder;
418-
Node20FallbackWarning(inContainer);
419-
}
420-
}
421-
else
422-
{
423-
nodeFolder = NodeHandler.Node24Folder;
424-
}
405+
nodeFolder = GetNodeFolderWithFallback(NodeHandler.Node24Folder, node20ResultsInGlibCError, node24ResultsInGlibCError, inContainer);
425406
}
426407
if (useNode20_1)
427408
{
428409
Trace.Info($"Found UseNode20_1 knob, using node20_1 for node tasks {useNode20_1} node20ResultsInGlibCError = {node20ResultsInGlibCError}");
429-
430-
if (node20ResultsInGlibCError)
431-
{
432-
nodeFolder = NodeHandler.Node16Folder;
433-
Node16FallbackWarning(inContainer);
434-
}
435-
else
436-
{
437-
nodeFolder = NodeHandler.Node20_1Folder;
438-
}
410+
nodeFolder = GetNodeFolderWithFallback(NodeHandler.Node20_1Folder, node20ResultsInGlibCError, node24ResultsInGlibCError, inContainer);
439411
}
440412

441413
if (useNode10)
@@ -501,37 +473,14 @@ public string GetNodeLocation(bool node20ResultsInGlibCError, bool node24Results
501473
return nodeHandlerHelper.GetNodeFolderPath(nodeFolder, HostContext);
502474
}
503475

504-
private void Node16FallbackWarning(bool inContainer)
476+
private void NodeFallbackWarning(string fromVersion, string toVersion, bool inContainer)
505477
{
506-
if (inContainer)
507-
{
508-
ExecutionContext.Warning($"The container operating system doesn't support Node20. Using Node16 instead. " +
509-
"Please upgrade the operating system of the container to remain compatible with future updates of tasks: " +
510-
"https://github.com/nodesource/distributions");
511-
}
512-
else
513-
{
514-
ExecutionContext.Warning($"The agent operating system doesn't support Node20. Using Node16 instead. " +
515-
"Please upgrade the operating system of the agent to remain compatible with future updates of tasks: " +
478+
string systemType = inContainer ? "container" : "agent";
479+
ExecutionContext.Warning($"The {systemType} operating system doesn't support Node{fromVersion}. Using Node{toVersion} instead. " +
480+
$"Please upgrade the operating system of the {systemType} to remain compatible with future updates of tasks: " +
516481
"https://github.com/nodesource/distributions");
517-
}
518482
}
519483

520-
private void Node20FallbackWarning(bool inContainer)
521-
{
522-
if (inContainer)
523-
{
524-
ExecutionContext.Warning($"The container operating system doesn't support Node24. Using Node20 instead. " +
525-
"Please upgrade the operating system of the container to remain compatible with future updates of tasks.");
526-
}
527-
else
528-
{
529-
ExecutionContext.Warning($"The agent operating system doesn't support Node24. Using Node20 instead. " +
530-
"Please upgrade the operating system of the agent to remain compatible with future updates of tasks.");
531-
}
532-
}
533-
534-
535484
private void OnDataReceived(object sender, ProcessDataReceivedEventArgs e)
536485
{
537486
// drop any outputs after the task get force completed.

src/Agent.Worker/TaskManager.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -885,29 +885,29 @@ public string WorkingDirectory
885885

886886
public sealed class NodeHandlerData : BaseNodeHandlerData
887887
{
888-
public override int Priority => 5;
888+
public override int Priority => 105;
889889
}
890890

891891
public sealed class Node10HandlerData : BaseNodeHandlerData
892892
{
893-
public override int Priority => 4;
893+
public override int Priority => 104;
894894
}
895895
public sealed class Node16HandlerData : BaseNodeHandlerData
896896
{
897-
public override int Priority => 3;
897+
public override int Priority => 103;
898898
}
899899
public sealed class Node20_1HandlerData : BaseNodeHandlerData
900900
{
901-
public override int Priority => 2;
901+
public override int Priority => 102;
902902
}
903903
public sealed class Node24HandlerData : BaseNodeHandlerData
904904
{
905-
public override int Priority => 1;
905+
public override int Priority => 101;
906906
}
907907

908908
public sealed class PowerShell3HandlerData : HandlerData
909909
{
910-
public override int Priority => 6;
910+
public override int Priority => 106;
911911
}
912912

913913
public sealed class PowerShellHandlerData : HandlerData
@@ -925,7 +925,7 @@ public string ArgumentFormat
925925
}
926926
}
927927

928-
public override int Priority => 7;
928+
public override int Priority => 107;
929929

930930
public string WorkingDirectory
931931
{
@@ -956,7 +956,7 @@ public string ArgumentFormat
956956
}
957957
}
958958

959-
public override int Priority => 8;
959+
public override int Priority => 108;
960960

961961
public string WorkingDirectory
962962
{
@@ -1013,7 +1013,7 @@ public string InlineScript
10131013
}
10141014
}
10151015

1016-
public override int Priority => 8;
1016+
public override int Priority => 108;
10171017

10181018
public string ScriptType
10191019
{
@@ -1070,7 +1070,7 @@ public string ModifyEnvironment
10701070
}
10711071
}
10721072

1073-
public override int Priority => 9;
1073+
public override int Priority => 109;
10741074

10751075
public string WorkingDirectory
10761076
{

0 commit comments

Comments
 (0)