Files
runner/src/Sdk/DTPipelines/Pipelines/Artifacts/DownloadStepExtensions.cs
T
2019-10-10 00:52:42 -04:00

151 lines
4.9 KiB
C#

using System;
using System.Collections.Generic;
using GitHub.DistributedTask.Pipelines;
using GitHub.DistributedTask.Pipelines.Artifacts;
namespace GitHub.DistributedTask.Orchestration.Server.Artifacts
{
public static class DownloadStepExtensions
{
public static Boolean IsDownloadBuildStepExists(this IReadOnlyList<JobStep> steps)
{
foreach (var step in steps)
{
if (step is TaskStep taskStep)
{
if (taskStep.IsDownloadBuildTask())
{
return true;
}
}
}
return false;
}
public static Boolean IsDownloadBuildTask(this Step step)
{
if (step is TaskStep taskStep &&
taskStep.Reference != null &&
taskStep.Reference.Name.Equals(YamlArtifactConstants.DownloadBuild, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public static Boolean IsDownloadStepDisabled(this Step step)
{
// either download task or downloadBuild task has none keyword return true.
if (step is TaskStep taskStep &&
taskStep.Inputs.TryGetValue(PipelineArtifactConstants.DownloadTaskInputs.Alias, out String alias) &&
String.Equals(alias, YamlArtifactConstants.None, StringComparison.OrdinalIgnoreCase) &&
(step.IsDownloadBuildTask() || step.IsDownloadTask()))
{
return true;
}
return false;
}
public static Boolean IsDownloadTask(this Step step)
{
if (step is TaskStep taskStep &&
taskStep.Reference != null &&
taskStep.Reference.Id.Equals(PipelineArtifactConstants.DownloadTask.Id) &&
taskStep.Reference.Version == PipelineArtifactConstants.DownloadTask.Version)
{
return true;
}
else
{
return false;
}
}
public static Boolean IsDownloadCurrentPipelineArtifactStep(this Step step)
{
if (step is TaskStep taskStep &&
taskStep.IsDownloadTask() &&
taskStep.Inputs.TryGetValue(PipelineArtifactConstants.DownloadTaskInputs.Alias, out String alias) &&
String.Equals(alias, YamlArtifactConstants.Current, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public static Boolean IsDownloadPipelineArtifactStepDisabled(this TaskStep step)
{
if (step.IsDownloadTask() &&
step.Inputs.TryGetValue(PipelineArtifactConstants.DownloadTaskInputs.Alias, out String alias) &&
String.Equals(alias, YamlArtifactConstants.None, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public static Boolean IsDownloadExternalPipelineArtifactStep(this TaskStep step)
{
if (step.IsDownloadTask() &&
step.Inputs != null &&
step.Inputs.TryGetValue(PipelineArtifactConstants.DownloadTaskInputs.Alias, out String alias) &&
!String.IsNullOrEmpty(alias) &&
!alias.Equals(YamlArtifactConstants.Current, StringComparison.OrdinalIgnoreCase) &&
!alias.Equals(YamlArtifactConstants.None, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public static String GetAliasFromTaskStep(this TaskStep step)
{
return step.Inputs.TryGetValue(PipelineArtifactConstants.DownloadTaskInputs.Alias, out String alias)
? alias
: String.Empty;
}
public static Boolean IsDownloadPipelineArtifactStepExists(this IReadOnlyList<JobStep> steps)
{
foreach (var step in steps)
{
if (step is TaskStep taskStep)
{
if (taskStep.IsDownloadTask())
{
return true;
}
}
}
return false;
}
public static void Merge(
this IDictionary<String, String> first,
IDictionary<String, String> second)
{
foreach (var key in second?.Keys ?? new List<String>())
{
first[key] = second[key];
}
}
public static void Merge(
this IDictionary<String, String> first,
IReadOnlyDictionary<String, String> second)
{
foreach (var key in second?.Keys ?? new List<String>())
{
first[key] = second[key];
}
}
}
}