Merge branch 'users/ethanchewy/compositeenv' of https://github.com/actions/runner into users/ethanchewy/compositeFileTable

This commit is contained in:
Ethan Chiu
2020-07-07 12:53:19 -04:00
4 changed files with 7 additions and 92 deletions

View File

@@ -400,8 +400,6 @@ namespace GitHub.Runner.Worker
var compositeAction = definition.Data.Execution as CompositeActionExecutionData; var compositeAction = definition.Data.Execution as CompositeActionExecutionData;
Trace.Info($"Load {compositeAction.Steps.Count} action steps."); Trace.Info($"Load {compositeAction.Steps.Count} action steps.");
Trace.Verbose($"Details: {StringUtil.ConvertToJson(compositeAction.Steps)}"); Trace.Verbose($"Details: {StringUtil.ConvertToJson(compositeAction.Steps)}");
Trace.Info($"Load: {compositeAction.Environment} environment steps");
Trace.Info($"Details: {StringUtil.ConvertToJson(compositeAction.Environment)}");
} }
else else
{ {
@@ -1287,7 +1285,6 @@ namespace GitHub.Runner.Worker
public override bool HasPre => false; public override bool HasPre => false;
public override bool HasPost => false; public override bool HasPost => false;
public List<Pipelines.ActionStep> Steps { get; set; } public List<Pipelines.ActionStep> Steps { get; set; }
public MappingToken Environment { get; set; }
} }
public abstract class ActionExecutionData public abstract class ActionExecutionData

View File

@@ -27,7 +27,6 @@ namespace GitHub.Runner.Worker
Dictionary<string, string> EvaluateContainerEnvironment(IExecutionContext executionContext, MappingToken token, IDictionary<string, PipelineContextData> extraExpressionValues); Dictionary<string, string> EvaluateContainerEnvironment(IExecutionContext executionContext, MappingToken token, IDictionary<string, PipelineContextData> extraExpressionValues);
public Dictionary<string, string> EvaluateCompositeActionEnvironment(IExecutionContext executionContext, MappingToken token, IDictionary<string, PipelineContextData> extraExpressionValues);
string EvaluateDefaultInput(IExecutionContext executionContext, string inputName, TemplateToken token); string EvaluateDefaultInput(IExecutionContext executionContext, string inputName, TemplateToken token);
} }
@@ -85,8 +84,6 @@ namespace GitHub.Runner.Worker
} }
var actionMapping = token.AssertMapping("action manifest root"); var actionMapping = token.AssertMapping("action manifest root");
var envComposite = default(MappingToken);
foreach (var actionPair in actionMapping) foreach (var actionPair in actionMapping)
{ {
var propertyName = actionPair.Key.AssertString($"action.yml property key"); var propertyName = actionPair.Key.AssertString($"action.yml property key");
@@ -105,14 +102,9 @@ namespace GitHub.Runner.Worker
ConvertInputs(templateContext, actionPair.Value, actionDefinition); ConvertInputs(templateContext, actionPair.Value, actionDefinition);
break; break;
case "env":
envComposite = actionPair.Value.AssertMapping("env");
break;
case "runs": case "runs":
actionDefinition.Execution = ConvertRuns(executionContext, templateContext, actionPair.Value, fileId, envComposite); actionDefinition.Execution = ConvertRuns(executionContext, templateContext, actionPair.Value, fileId);
break; break;
default: default:
Trace.Info($"Ignore action property {propertyName}."); Trace.Info($"Ignore action property {propertyName}.");
break; break;
@@ -200,7 +192,7 @@ namespace GitHub.Runner.Worker
var context = CreateContext(executionContext, extraExpressionValues); var context = CreateContext(executionContext, extraExpressionValues);
try try
{ {
var evaluateResult = TemplateEvaluator.Evaluate(context, "runs-env", token, 0, null, omitHeader: true); var evaluateResult = TemplateEvaluator.Evaluate(context, "container-runs-env", token, 0, null, omitHeader: true);
context.Errors.Check(); context.Errors.Check();
Trace.Info($"Environments evaluate result: {StringUtil.ConvertToJson(evaluateResult)}"); Trace.Info($"Environments evaluate result: {StringUtil.ConvertToJson(evaluateResult)}");
@@ -232,48 +224,6 @@ namespace GitHub.Runner.Worker
return result; return result;
} }
public Dictionary<string, string> EvaluateCompositeActionEnvironment(
IExecutionContext executionContext,
MappingToken token,
IDictionary<string, PipelineContextData> extraExpressionValues)
{
var result = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
if (token != null)
{
var context = CreateContext(executionContext, extraExpressionValues);
try
{
var evaluateResult = TemplateEvaluator.Evaluate(context, "runs-env", token, 0, null, omitHeader: false);
context.Errors.Check();
// Mapping
var mapping = evaluateResult.AssertMapping("composite env");
foreach (var pair in mapping)
{
// Literal key
var key = pair.Key.AssertString("composite env key");
// Literal value
var value = pair.Value.AssertString("composite env value");
result[key.Value] = value.Value;
Trace.Info($"Add env {key} = {value}");
}
}
catch (Exception ex) when (!(ex is TemplateValidationException))
{
Trace.Error(ex);
context.Errors.Add(ex);
}
context.Errors.Check();
}
return result;
}
public string EvaluateDefaultInput( public string EvaluateDefaultInput(
IExecutionContext executionContext, IExecutionContext executionContext,
string inputName, string inputName,
@@ -358,9 +308,7 @@ namespace GitHub.Runner.Worker
IExecutionContext executionContext, IExecutionContext executionContext,
TemplateContext context, TemplateContext context,
TemplateToken inputsToken, TemplateToken inputsToken,
Int32 fileID, Int32 fileID)
MappingToken envComposite = null
)
{ {
Trace.Info($"COMPOSITE ACTIONS FILEID: {fileID}"); Trace.Info($"COMPOSITE ACTIONS FILEID: {fileID}");
@@ -492,15 +440,9 @@ namespace GitHub.Runner.Worker
return new CompositeActionExecutionData() return new CompositeActionExecutionData()
{ {
Steps = stepsLoaded, Steps = stepsLoaded,
Environment = envComposite
}; };
} }
} }
// If there is an env set and it's not for composite action, yield an error
if (envComposite != null && string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TESTING_COMPOSITE_ACTIONS_ALPHA")))
{
throw new ArgumentException("You cannot use env unless you are using Composite Actions");
}
else else
{ {
throw new ArgumentOutOfRangeException($"'using: {usingToken.Value}' is not supported, use 'docker' or 'node12' instead."); throw new ArgumentOutOfRangeException($"'using: {usingToken.Value}' is not supported, use 'docker' or 'node12' instead.");

View File

@@ -45,29 +45,6 @@ namespace GitHub.Runner.Worker.Handlers
inputsData[i.Key] = new StringContextData(i.Value); inputsData[i.Key] = new StringContextData(i.Value);
} }
// Get Environment Data for Composite Action
var extraExpressionValues = new Dictionary<string, PipelineContextData>(StringComparer.OrdinalIgnoreCase);
extraExpressionValues["inputs"] = inputsData;
var manifestManager = HostContext.GetService<IActionManifestManager>();
// Add the composite action environment variables to each step.
// If the key already exists, we override it since the composite action env variables will have higher precedence
// Note that for each composite action step, it's environment variables will be set in the StepRunner automatically
var compositeEnvData = manifestManager.EvaluateCompositeActionEnvironment(ExecutionContext, Data.Environment, extraExpressionValues);
var envData = new Dictionary<string, string>();
// Copy over parent environment
foreach (var env in Environment)
{
envData[env.Key] = env.Value;
}
// Overwrite with current env
foreach (var env in compositeEnvData)
{
envData[env.Key] = env.Value;
}
// Add each composite action step to the front of the queue // Add each composite action step to the front of the queue
int location = 0; int location = 0;
foreach (Pipelines.ActionStep aStep in actionSteps) foreach (Pipelines.ActionStep aStep in actionSteps)
@@ -108,7 +85,7 @@ namespace GitHub.Runner.Worker.Handlers
actionRunner.Condition = aStep.Condition; actionRunner.Condition = aStep.Condition;
actionRunner.DisplayName = aStep.DisplayName; actionRunner.DisplayName = aStep.DisplayName;
ExecutionContext.RegisterNestedStep(actionRunner, inputsData, location, envData); ExecutionContext.RegisterNestedStep(actionRunner, inputsData, location, Environment);
location++; location++;
} }

View File

@@ -7,7 +7,6 @@
"name": "string", "name": "string",
"description": "string", "description": "string",
"inputs": "inputs", "inputs": "inputs",
"env": "runs-env",
"runs": "runs" "runs": "runs"
}, },
"loose-key-type": "non-empty-string", "loose-key-type": "non-empty-string",
@@ -44,7 +43,7 @@
"image": "non-empty-string", "image": "non-empty-string",
"entrypoint": "non-empty-string", "entrypoint": "non-empty-string",
"args": "container-runs-args", "args": "container-runs-args",
"env": "runs-env", "env": "container-runs-env",
"pre-entrypoint": "non-empty-string", "pre-entrypoint": "non-empty-string",
"pre-if": "non-empty-string", "pre-if": "non-empty-string",
"post-entrypoint": "non-empty-string", "post-entrypoint": "non-empty-string",
@@ -57,7 +56,7 @@
"item-type": "container-runs-context" "item-type": "container-runs-context"
} }
}, },
"runs-env": { "container-runs-env": {
"context": [ "context": [
"inputs" "inputs"
], ],