mirror of
https://github.com/actions/runner.git
synced 2025-12-16 06:57:25 +00:00
support defaults. (#369)
This commit is contained in:
@@ -41,7 +41,8 @@ namespace GitHub.DistributedTask.Pipelines
|
||||
IEnumerable<JobStep> steps,
|
||||
IEnumerable<ContextScope> scopes,
|
||||
IList<String> fileTable,
|
||||
TemplateToken jobOutputs)
|
||||
TemplateToken jobOutputs,
|
||||
IList<TemplateToken> defaults)
|
||||
{
|
||||
this.MessageType = JobRequestMessageTypes.PipelineAgentJobRequest;
|
||||
this.Plan = plan;
|
||||
@@ -69,6 +70,11 @@ namespace GitHub.DistributedTask.Pipelines
|
||||
m_environmentVariables = new List<TemplateToken>(environmentVariables);
|
||||
}
|
||||
|
||||
if (defaults?.Count > 0)
|
||||
{
|
||||
m_defaults = new List<TemplateToken>(defaults);
|
||||
}
|
||||
|
||||
this.ContextData = new Dictionary<String, PipelineContextData>(StringComparer.OrdinalIgnoreCase);
|
||||
if (contextData?.Count > 0)
|
||||
{
|
||||
@@ -213,6 +219,21 @@ namespace GitHub.DistributedTask.Pipelines
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the hierarchy of defaults to overlay, last wins.
|
||||
/// </summary>
|
||||
public IList<TemplateToken> Defaults
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_defaults == null)
|
||||
{
|
||||
m_defaults = new List<TemplateToken>();
|
||||
}
|
||||
return m_defaults;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the collection of variables associated with the current context.
|
||||
/// </summary>
|
||||
@@ -252,6 +273,9 @@ namespace GitHub.DistributedTask.Pipelines
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the table of files used when parsing the pipeline (e.g. yaml files)
|
||||
/// </summary>
|
||||
public IList<String> FileTable
|
||||
{
|
||||
get
|
||||
@@ -372,6 +396,11 @@ namespace GitHub.DistributedTask.Pipelines
|
||||
m_environmentVariables = null;
|
||||
}
|
||||
|
||||
if (m_defaults?.Count == 0)
|
||||
{
|
||||
m_defaults = null;
|
||||
}
|
||||
|
||||
if (m_fileTable?.Count == 0)
|
||||
{
|
||||
m_fileTable = null;
|
||||
@@ -406,6 +435,9 @@ namespace GitHub.DistributedTask.Pipelines
|
||||
[DataMember(Name = "EnvironmentVariables", EmitDefaultValue = false)]
|
||||
private List<TemplateToken> m_environmentVariables;
|
||||
|
||||
[DataMember(Name = "Defaults", EmitDefaultValue = false)]
|
||||
private List<TemplateToken> m_defaults;
|
||||
|
||||
[DataMember(Name = "FileTable", EmitDefaultValue = false)]
|
||||
private List<String> m_fileTable;
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace GitHub.DistributedTask.Pipelines.ObjectTemplating
|
||||
public const String Clean = "clean";
|
||||
public const String Container = "container";
|
||||
public const String ContinueOnError = "continue-on-error";
|
||||
public const String Defaults = "defaults";
|
||||
public const String Env = "env";
|
||||
public const String Event = "event";
|
||||
public const String EventPattern = "github.event";
|
||||
@@ -29,6 +30,7 @@ namespace GitHub.DistributedTask.Pipelines.ObjectTemplating
|
||||
public const String Include = "include";
|
||||
public const String Inputs = "inputs";
|
||||
public const String Job = "job";
|
||||
public const String JobDefaultsRun = "job-defaults-run";
|
||||
public const String JobOutputs = "job-outputs";
|
||||
public const String Jobs = "jobs";
|
||||
public const String Labels = "labels";
|
||||
|
||||
@@ -267,6 +267,42 @@ namespace GitHub.DistributedTask.Pipelines.ObjectTemplating
|
||||
return result;
|
||||
}
|
||||
|
||||
public Dictionary<String, String> EvaluateJobDefaultsRun(
|
||||
TemplateToken token,
|
||||
DictionaryContextData contextData)
|
||||
{
|
||||
var result = default(Dictionary<String, String>);
|
||||
|
||||
if (token != null && token.Type != TokenType.Null)
|
||||
{
|
||||
var context = CreateContext(contextData);
|
||||
try
|
||||
{
|
||||
token = TemplateEvaluator.Evaluate(context, PipelineTemplateConstants.JobDefaultsRun, token, 0, null, omitHeader: true);
|
||||
context.Errors.Check();
|
||||
result = new Dictionary<String, String>(StringComparer.OrdinalIgnoreCase);
|
||||
var mapping = token.AssertMapping("defaults run");
|
||||
foreach (var pair in mapping)
|
||||
{
|
||||
// Literal key
|
||||
var key = pair.Key.AssertString("defaults run key");
|
||||
|
||||
// Literal value
|
||||
var value = pair.Value.AssertString("defaults run value");
|
||||
result[key.Value] = value.Value;
|
||||
}
|
||||
}
|
||||
catch (Exception ex) when (!(ex is TemplateValidationException))
|
||||
{
|
||||
context.Errors.Add(ex);
|
||||
}
|
||||
|
||||
context.Errors.Check();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<KeyValuePair<String, JobContainer>> EvaluateJobServiceContainers(
|
||||
TemplateToken token,
|
||||
DictionaryContextData contextData)
|
||||
|
||||
Reference in New Issue
Block a user