Support pre/post/container/composite actions within composite actions (#1222)

Support Composite Actions with uses: steps
This commit is contained in:
Thomas Boop
2021-07-28 15:35:21 -04:00
committed by GitHub
parent 5281434f3f
commit 4e95d0d6ad
11 changed files with 255 additions and 62 deletions

View File

@@ -88,6 +88,27 @@ namespace GitHub.Runner.Worker
{
ExecutionContext.Warning($"`pre` execution is not supported for local action from '{repoAction.Path}'");
}
List<JobExtensionRunner> localActionContainerSetupSteps = null;
// Handle Composite Local Actions
// Need to download and expand the tree of referenced actions
if (handlerData.ExecutionType == ActionExecutionType.Composite &&
handlerData is CompositeActionExecutionData compositeHandlerData &&
Stage == ActionRunStage.Main &&
Action.Reference is Pipelines.RepositoryPathReference localAction &&
string.Equals(localAction.RepositoryType, Pipelines.PipelineConstants.SelfAlias, StringComparison.OrdinalIgnoreCase))
{
var actionManager = HostContext.GetService<IActionManager>();
var prepareResult = await actionManager.PrepareActionsAsync(ExecutionContext, compositeHandlerData.Steps, ExecutionContext.Id);
// Reload definition since post may exist now (from embedded steps that were JIT downloaded)
definition = taskManager.LoadAction(ExecutionContext, Action);
ArgUtil.NotNull(definition, nameof(definition));
handlerData = definition.Data?.Execution;
ArgUtil.NotNull(handlerData, nameof(handlerData));
// Save container setup steps so we can reference them later
localActionContainerSetupSteps = prepareResult.ContainerSetupSteps;
}
// The action has post cleanup defined.
// we need to create timeline record for them and add them to the step list that StepRunner is using
@@ -249,7 +270,8 @@ namespace GitHub.Runner.Worker
inputs,
environment,
ExecutionContext.Global.Variables,
actionDirectory: definition.Directory);
actionDirectory: definition.Directory,
localActionContainerSetupSteps: localActionContainerSetupSteps);
// Print out action details
handler.PrintActionDetails(Stage);