mirror of
https://github.com/actions/runner.git
synced 2025-12-13 10:05:23 +00:00
Support pre/post/container/composite actions within composite actions (#1222)
Support Composite Actions with uses: steps
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user