diff --git a/src/Runner.Worker/ActionManager.cs b/src/Runner.Worker/ActionManager.cs index e60bb50ee..e41358dd2 100644 --- a/src/Runner.Worker/ActionManager.cs +++ b/src/Runner.Worker/ActionManager.cs @@ -150,7 +150,8 @@ namespace GitHub.Runner.Worker containerSetupSteps.Add(new JobExtensionRunner(runAsync: this.PullActionContainerAsync, condition: $"{PipelineTemplateConstants.Success}()", displayName: $"Pull {imageToPull.Key}", - data: new ContainerSetupInfo(imageToPull.Value, imageToPull.Key))); + data: new ContainerSetupInfo(imageToPull.Value, imageToPull.Key), + repositoryRef: null)); } } @@ -163,7 +164,8 @@ namespace GitHub.Runner.Worker containerSetupSteps.Add(new JobExtensionRunner(runAsync: this.BuildActionContainerAsync, condition: $"{PipelineTemplateConstants.Success}()", displayName: $"Build {setupInfo.ActionRepository}", - data: new ContainerSetupInfo(imageToBuild.Value, setupInfo.Dockerfile, setupInfo.WorkingDirectory))); + data: new ContainerSetupInfo(imageToBuild.Value, setupInfo.Dockerfile, setupInfo.WorkingDirectory), + repositoryRef: setupInfo.RepositoryRef)); } } @@ -776,6 +778,7 @@ namespace GitHub.Runner.Worker } var setupInfo = new ActionContainer(); + setupInfo.RepositoryRef = repositoryReference; string destDirectory = Path.Combine(HostContext.GetDirectory(WellKnownDirectory.Actions), repositoryReference.Name.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar), repositoryReference.Ref); string actionEntryDirectory = destDirectory; string dockerFileRelativePath = repositoryReference.Name; @@ -1022,5 +1025,6 @@ namespace GitHub.Runner.Worker public string Dockerfile { get; set; } public string WorkingDirectory { get; set; } public string ActionRepository { get; set; } + public Pipelines.RepositoryPathReference RepositoryRef { get; set; } } } diff --git a/src/Runner.Worker/ContainerOperationProvider.cs b/src/Runner.Worker/ContainerOperationProvider.cs index 2a27a731a..a420adbed 100644 --- a/src/Runner.Worker/ContainerOperationProvider.cs +++ b/src/Runner.Worker/ContainerOperationProvider.cs @@ -46,7 +46,8 @@ namespace GitHub.Runner.Worker var postJobStep = new JobExtensionRunner(runAsync: this.StopContainersAsync, condition: $"{PipelineTemplateConstants.Always}()", displayName: "Stop containers", - data: data); + data: data, + repositoryRef: null); executionContext.Debug($"Register post job cleanup for stopping/deleting containers."); executionContext.RegisterPostJobStep(postJobStep); diff --git a/src/Runner.Worker/ExecutionContext.cs b/src/Runner.Worker/ExecutionContext.cs index de0baf3c3..1cfcb0956 100644 --- a/src/Runner.Worker/ExecutionContext.cs +++ b/src/Runner.Worker/ExecutionContext.cs @@ -254,18 +254,13 @@ namespace GitHub.Runner.Worker public void RegisterPostJobStep(IStep step) { - var actionRunner = step as IActionRunner; - if (actionRunner != null && !Root.StepsWithPostRegistered.Add(actionRunner.Action.Id)) + if (step is IActionRunner actionRunner && !Root.StepsWithPostRegistered.Add(actionRunner.Action.Id)) { Trace.Info($"'post' of '{actionRunner.DisplayName}' already push to post step stack."); return; } - string refName = null; - if (actionRunner != null) - { - refName = actionRunner.Action.Reference.ToString(); - } + string refName = step.GetRefName(); step.ExecutionContext = Root.CreatePostChild(step.DisplayName, refName, IntraActionState); Root.PostJobSteps.Push(step); diff --git a/src/Runner.Worker/IStepExtensions.cs b/src/Runner.Worker/IStepExtensions.cs new file mode 100644 index 000000000..404698276 --- /dev/null +++ b/src/Runner.Worker/IStepExtensions.cs @@ -0,0 +1,22 @@ +using Newtonsoft.Json; + +namespace GitHub.Runner.Worker +{ + public static class IStepExtensions + { + public static string GetRefName(this IStep step, string defaultRefName = null) + { + if (step is JobExtensionRunner extensionRunner && extensionRunner.RepositoryRef != null) + { + return JsonConvert.SerializeObject(extensionRunner.RepositoryRef); + } + + if (step is IActionRunner actionRunner && actionRunner.Action?.Reference != null) + { + return JsonConvert.SerializeObject(actionRunner.Action.Reference); + } + + return defaultRefName; + } + } +} \ No newline at end of file diff --git a/src/Runner.Worker/JobExtension.cs b/src/Runner.Worker/JobExtension.cs index 4b2711e2f..b08cabc91 100644 --- a/src/Runner.Worker/JobExtension.cs +++ b/src/Runner.Worker/JobExtension.cs @@ -213,9 +213,10 @@ namespace GitHub.Runner.Worker containers.AddRange(jobContext.ServiceContainers); preJobSteps.Add(new JobExtensionRunner(runAsync: containerProvider.StartContainersAsync, - condition: $"{PipelineTemplateConstants.Success}()", - displayName: "Initialize containers", - data: (object)containers)); + condition: $"{PipelineTemplateConstants.Success}()", + displayName: "Initialize containers", + data: (object)containers, + repositoryRef: null)); } // Add action steps @@ -260,18 +261,19 @@ namespace GitHub.Runner.Worker // Create execution context for pre-job steps foreach (var step in preJobSteps) { - if (step is JobExtensionRunner) + if (step is JobExtensionRunner extensionStep) { - JobExtensionRunner extensionStep = step as JobExtensionRunner; - ArgUtil.NotNull(extensionStep, extensionStep.DisplayName); + ArgUtil.NotNull(extensionStep, step.DisplayName); Guid stepId = Guid.NewGuid(); - extensionStep.ExecutionContext = jobContext.CreateChild(stepId, extensionStep.DisplayName, null, null, stepId.ToString("N")); + var refName = step.GetRefName(defaultRefName: null); + extensionStep.ExecutionContext = jobContext.CreateChild(stepId, extensionStep.DisplayName, refName, null, stepId.ToString("N")); } else if (step is IActionRunner actionStep) { ArgUtil.NotNull(actionStep, step.DisplayName); Guid stepId = Guid.NewGuid(); - actionStep.ExecutionContext = jobContext.CreateChild(stepId, actionStep.DisplayName, actionStep.Action.Reference.ToString(), null, null, intraActionStates[actionStep.Action.Id]); + var refName = step.GetRefName(defaultRefName: stepId.ToString("N")); + actionStep.ExecutionContext = jobContext.CreateChild(stepId, actionStep.DisplayName, refName, null, null, intraActionStates[actionStep.Action.Id]); } } @@ -282,7 +284,8 @@ namespace GitHub.Runner.Worker { ArgUtil.NotNull(actionStep, step.DisplayName); intraActionStates.TryGetValue(actionStep.Action.Id, out var intraActionState); - actionStep.ExecutionContext = jobContext.CreateChild(actionStep.Action.Id, actionStep.DisplayName, actionStep.Action.Reference.ToString(), actionStep.Action.ScopeName, actionStep.Action.ContextName, intraActionState); + var refName = step.GetRefName(defaultRefName: actionStep.Action.Name); + actionStep.ExecutionContext = jobContext.CreateChild(actionStep.Action.Id, actionStep.DisplayName, refName, actionStep.Action.ScopeName, actionStep.Action.ContextName, intraActionState); } } diff --git a/src/Runner.Worker/JobExtensionRunner.cs b/src/Runner.Worker/JobExtensionRunner.cs index 48c2c2358..4e3c3f9d4 100644 --- a/src/Runner.Worker/JobExtensionRunner.cs +++ b/src/Runner.Worker/JobExtensionRunner.cs @@ -1,7 +1,7 @@ using System; using System.Threading.Tasks; -using GitHub.DistributedTask.Expressions2; using GitHub.DistributedTask.ObjectTemplating.Tokens; +using GitHub.DistributedTask.Pipelines; namespace GitHub.Runner.Worker { @@ -9,22 +9,26 @@ namespace GitHub.Runner.Worker { private readonly object _data; private readonly Func _runAsync; + private readonly RepositoryPathReference _repositoryRef; public JobExtensionRunner( Func runAsync, string condition, string displayName, - object data) + object data, + RepositoryPathReference repositoryRef) { _runAsync = runAsync; Condition = condition; DisplayName = displayName; _data = data; + _repositoryRef = repositoryRef; } public string Condition { get; set; } public TemplateToken ContinueOnError => new BooleanToken(null, null, null, false); public string DisplayName { get; set; } + public RepositoryPathReference RepositoryRef => _repositoryRef; public IExecutionContext ExecutionContext { get; set; } public TemplateToken Timeout => new NumberToken(null, null, null, 0); public object Data => _data; diff --git a/src/Sdk/DTPipelines/Pipelines/ActionStepDefinitionReference.cs b/src/Sdk/DTPipelines/Pipelines/ActionStepDefinitionReference.cs index c96e317fa..0a41cce54 100644 --- a/src/Sdk/DTPipelines/Pipelines/ActionStepDefinitionReference.cs +++ b/src/Sdk/DTPipelines/Pipelines/ActionStepDefinitionReference.cs @@ -128,11 +128,6 @@ namespace GitHub.DistributedTask.Pipelines { return new RepositoryPathReference(this); } - - public override string ToString() - { - return $"ActionRef,RepositoryPath: {Name}@{Ref}"; - } } [EditorBrowsable(EditorBrowsableState.Never)] diff --git a/src/Test/L0/Worker/JobExtensionL0.cs b/src/Test/L0/Worker/JobExtensionL0.cs index 0101db135..31b2dd699 100644 --- a/src/Test/L0/Worker/JobExtensionL0.cs +++ b/src/Test/L0/Worker/JobExtensionL0.cs @@ -176,7 +176,7 @@ namespace GitHub.Runner.Common.Tests.Worker jobExtension.Initialize(hc); _actionManager.Setup(x => x.PrepareActionsAsync(It.IsAny(), It.IsAny>())) - .Returns(Task.FromResult(new PrepareResult(new List() { new JobExtensionRunner(null, "", "prepare1", null), new JobExtensionRunner(null, "", "prepare2", null) }, new Dictionary()))); + .Returns(Task.FromResult(new PrepareResult(new List() { new JobExtensionRunner(null, "", "prepare1", null, null), new JobExtensionRunner(null, "", "prepare2", null, null) }, new Dictionary()))); List result = await jobExtension.InitializeJob(_jobEc, _message);