in src/Agent.Listener/DistributedTask.Pipelines/Yaml/TypeConverters/ConverterUtil.steps.cs [342:550]
internal static void WriteStep(IEmitter emitter, IStep step, Boolean noBootstrap = false)
{
if (!noBootstrap)
{
emitter.Emit(new MappingStart());
}
if (step is StepsTemplateReference)
{
var reference = step as StepsTemplateReference;
if (!noBootstrap)
{
emitter.Emit(new Scalar(YamlConstants.Template));
emitter.Emit(new Scalar(reference.Name));
if (reference.Parameters != null && reference.Parameters.Count > 0)
{
emitter.Emit(new Scalar(YamlConstants.Parameters));
WriteMapping(emitter, reference.Parameters);
}
}
if (reference.StepOverrides != null && reference.StepOverrides.Count > 0)
{
emitter.Emit(new Scalar(YamlConstants.Steps));
WriteStepOverrides(emitter, reference.StepOverrides);
}
}
else if (step is StepGroup)
{
var group = step as StepGroup;
emitter.Emit(new Scalar(YamlConstants.Group));
emitter.Emit(new Scalar(group.Name));
if (group.Steps != null && group.Steps.Count > 0)
{
emitter.Emit(new Scalar(YamlConstants.Steps));
WriteSteps(emitter, group.Steps.Cast<IStep>().ToList());
}
}
else if (step is TaskStep)
{
var task = step as TaskStep;
if (String.Equals(task.Reference.Name, "CmdLine", StringComparison.OrdinalIgnoreCase) &&
String.Equals(task.Reference.Version, "2", StringComparison.Ordinal) &&
task.Inputs != null)
{
emitter.Emit(new Scalar(YamlConstants.Script));
String script;
task.Inputs.TryGetValue("script", out script);
emitter.Emit(new Scalar(script ?? String.Empty));
WriteTaskPreInputProperties(emitter, task);
String failOnStderr;
if (task.Inputs.TryGetValue("failOnStderr", out failOnStderr)
&& !String.IsNullOrEmpty(failOnStderr))
{
emitter.Emit(new Scalar(YamlConstants.FailOnStderr));
emitter.Emit(new Scalar(failOnStderr));
}
String workingDirectory;
if (task.Inputs.TryGetValue("workingDirectory", out workingDirectory) &&
!String.IsNullOrEmpty(workingDirectory))
{
emitter.Emit(new Scalar(YamlConstants.WorkingDirectory));
emitter.Emit(new Scalar(workingDirectory));
}
WriteTaskPostInputProperties(emitter, task);
}
else if (String.Equals(task.Reference.Name, "Bash", StringComparison.OrdinalIgnoreCase) &&
String.Equals(task.Reference.Version, "3", StringComparison.Ordinal) &&
task.Inputs != null &&
task.Inputs.ContainsKey("targetType") &&
String.Equals(task.Inputs["targetType"], "inline", StringComparison.OrdinalIgnoreCase))
{
emitter.Emit(new Scalar(YamlConstants.Bash));
String script;
task.Inputs.TryGetValue("script", out script);
emitter.Emit(new Scalar(script ?? String.Empty));
WriteTaskPreInputProperties(emitter, task);
String failOnStderr;
if (task.Inputs.TryGetValue("failOnStderr", out failOnStderr)
&& !String.IsNullOrEmpty(failOnStderr))
{
emitter.Emit(new Scalar(YamlConstants.FailOnStderr));
emitter.Emit(new Scalar(failOnStderr));
}
String workingDirectory;
if (task.Inputs.TryGetValue("workingDirectory", out workingDirectory) &&
!String.IsNullOrEmpty(workingDirectory))
{
emitter.Emit(new Scalar(YamlConstants.WorkingDirectory));
emitter.Emit(new Scalar(workingDirectory));
}
WriteTaskPostInputProperties(emitter, task);
}
else if (String.Equals(task.Reference.Name, "PowerShell", StringComparison.OrdinalIgnoreCase) &&
String.Equals(task.Reference.Version, "2", StringComparison.Ordinal) &&
task.Inputs != null &&
task.Inputs.ContainsKey("targetType") &&
String.Equals(task.Inputs["targetType"], "inline", StringComparison.OrdinalIgnoreCase))
{
emitter.Emit(new Scalar(YamlConstants.PowerShell));
String script;
task.Inputs.TryGetValue("script", out script);
emitter.Emit(new Scalar(script ?? String.Empty));
WriteTaskPreInputProperties(emitter, task);
String errorActionPreference;
if (task.Inputs.TryGetValue("errorActionPreference", out errorActionPreference)
&& !String.IsNullOrEmpty(errorActionPreference))
{
emitter.Emit(new Scalar(YamlConstants.ErrorActionPreference));
emitter.Emit(new Scalar(errorActionPreference));
}
String failOnStderr;
if (task.Inputs.TryGetValue("failOnStderr", out failOnStderr)
&& !String.IsNullOrEmpty(failOnStderr))
{
emitter.Emit(new Scalar(YamlConstants.FailOnStderr));
emitter.Emit(new Scalar(failOnStderr));
}
String ignoreLASTEXITCODE;
if (task.Inputs.TryGetValue("ignoreLASTEXITCODE", out ignoreLASTEXITCODE)
&& !String.IsNullOrEmpty(ignoreLASTEXITCODE))
{
emitter.Emit(new Scalar(YamlConstants.IgnoreLASTEXITCODE));
emitter.Emit(new Scalar(ignoreLASTEXITCODE));
}
String workingDirectory;
if (task.Inputs.TryGetValue("workingDirectory", out workingDirectory) &&
!String.IsNullOrEmpty(workingDirectory))
{
emitter.Emit(new Scalar(YamlConstants.WorkingDirectory));
emitter.Emit(new Scalar(workingDirectory));
}
WriteTaskPostInputProperties(emitter, task);
}
else
{
emitter.Emit(new Scalar(YamlConstants.Task));
if (String.IsNullOrEmpty(task.Reference.Version))
{
emitter.Emit(new Scalar(task.Reference.Name));
}
else
{
emitter.Emit(new Scalar($"{task.Reference.Name}@{task.Reference.Version}"));
}
WriteTaskPreInputProperties(emitter, task);
if (task.Inputs != null && task.Inputs.Count > 0)
{
emitter.Emit(new Scalar(YamlConstants.Inputs));
WriteMapping(emitter, task.Inputs);
}
WriteTaskPostInputProperties(emitter, task);
}
}
else if (step is CheckoutStep)
{
var checkoutStep = step as CheckoutStep;
emitter.Emit(new Scalar(YamlConstants.Checkout));
if (String.Equals(checkoutStep.Name, YamlConstants.None, StringComparison.OrdinalIgnoreCase))
{
emitter.Emit(new Scalar(YamlConstants.None));
}
else if (String.Equals(checkoutStep.Name, YamlConstants.Self, StringComparison.OrdinalIgnoreCase))
{
emitter.Emit(new Scalar(YamlConstants.Self));
if (!String.IsNullOrEmpty(checkoutStep.Clean))
{
emitter.Emit(new Scalar(YamlConstants.Clean));
emitter.Emit(new Scalar(checkoutStep.Clean));
}
if (!String.IsNullOrEmpty(checkoutStep.FetchDepth))
{
emitter.Emit(new Scalar(YamlConstants.FetchDepth));
emitter.Emit(new Scalar(checkoutStep.FetchDepth));
}
if (!String.IsNullOrEmpty(checkoutStep.Lfs))
{
emitter.Emit(new Scalar(YamlConstants.Lfs));
emitter.Emit(new Scalar(checkoutStep.Lfs));
}
}
else
{
// Should not reach here.
throw new NotSupportedException($"Unexpected checkout step resource name: '{checkoutStep.Name}'");
}
}
if (!noBootstrap)
{
emitter.Emit(new MappingEnd());
}
}