From 92374ceb15cca26409ec035ee41ec6efd980cf3c Mon Sep 17 00:00:00 2001 From: Lawrence Gripper Date: Mon, 10 Nov 2025 09:38:26 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=A7=B9=20Remove=20unnecessary=20Evalu?= =?UTF-8?q?ateJobSnapshot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Actions will have already expanded the expressions in the snapshot message so this is no longer required --- src/Runner.Worker/JobExtension.cs | 2 +- .../Pipelines/AgentJobRequestMessage.cs | 4 +-- .../PipelineTemplateEvaluator.cs | 26 ------------------- 3 files changed, 3 insertions(+), 29 deletions(-) diff --git a/src/Runner.Worker/JobExtension.cs b/src/Runner.Worker/JobExtension.cs index 58e8929b44a..02b79090554 100644 --- a/src/Runner.Worker/JobExtension.cs +++ b/src/Runner.Worker/JobExtension.cs @@ -396,7 +396,7 @@ public async Task> InitializeJob(IExecutionContext jobContext, Pipel } // Register custom image creation post-job step if the "snapshot" token is present in the message. - var snapshotRequest = templateEvaluator.EvaluateJobSnapshotRequest(message.Snapshot, jobContext.ExpressionValues, jobContext.ExpressionFunctions); + var snapshotRequest = message.Snapshot; if (snapshotRequest != null) { var snapshotOperationProvider = HostContext.GetService(); diff --git a/src/Sdk/DTPipelines/Pipelines/AgentJobRequestMessage.cs b/src/Sdk/DTPipelines/Pipelines/AgentJobRequestMessage.cs index e6ecbf4509d..732d12306f5 100644 --- a/src/Sdk/DTPipelines/Pipelines/AgentJobRequestMessage.cs +++ b/src/Sdk/DTPipelines/Pipelines/AgentJobRequestMessage.cs @@ -43,7 +43,7 @@ public AgentJobRequestMessage( TemplateToken jobOutputs, IList defaults, ActionsEnvironmentReference actionsEnvironment, - TemplateToken snapshot, + Snapshot snapshot, String messageType = JobRequestMessageTypes.PipelineAgentJobRequest) { this.MessageType = messageType; @@ -240,7 +240,7 @@ public ActionsEnvironmentReference ActionsEnvironment } [DataMember(EmitDefaultValue = false)] - public TemplateToken Snapshot + public Snapshot Snapshot { get; set; diff --git a/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs b/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs index e5fbd5d2888..331b102469b 100644 --- a/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs +++ b/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs @@ -370,32 +370,6 @@ public IList> EvaluateJobServiceContainers( return result; } - public Snapshot EvaluateJobSnapshotRequest(TemplateToken token, - DictionaryContextData contextData, - IList expressionFunctions) - { - var result = default(Snapshot); - - if (token != null && token.Type != TokenType.Null) - { - var context = CreateContext(contextData, expressionFunctions); - try - { - token = TemplateEvaluator.Evaluate(context, PipelineTemplateConstants.Snapshot, token, 0, null, omitHeader: true); - context.Errors.Check(); - result = PipelineTemplateConverter.ConvertToJobSnapshotRequest(context, token); - } - catch (Exception ex) when (!(ex is TemplateValidationException)) - { - context.Errors.Add(ex); - } - - context.Errors.Check(); - } - - return result; - } - private TemplateContext CreateContext( DictionaryContextData contextData, IList expressionFunctions, From 26f0fad5aa4b1eb9913ee0449c777c0bb9d7b3c9 Mon Sep 17 00:00:00 2001 From: Lawrence Gripper Date: Mon, 10 Nov 2025 09:54:01 +0000 Subject: [PATCH 2/4] Fix up tests --- src/Test/L0/Worker/JobExtensionL0.cs | 34 ++++------------------------ 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/src/Test/L0/Worker/JobExtensionL0.cs b/src/Test/L0/Worker/JobExtensionL0.cs index 9ce99070bf6..ea70d423f31 100644 --- a/src/Test/L0/Worker/JobExtensionL0.cs +++ b/src/Test/L0/Worker/JobExtensionL0.cs @@ -5,6 +5,7 @@ using System.Threading; using System.Threading.Tasks; using GitHub.DistributedTask.ObjectTemplating.Tokens; +using GitHub.DistributedTask.Pipelines; using GitHub.DistributedTask.Pipelines.ObjectTemplating; using GitHub.DistributedTask.WebApi; using GitHub.Runner.Worker; @@ -486,46 +487,21 @@ public async Task EnsureNoSnapshotPostJobStep() public Task EnsureSnapshotPostJobStepForStringToken() { var snapshot = new Pipelines.Snapshot("TestImageNameFromStringToken"); - var imageNameValueStringToken = new StringToken(null, null, null, snapshot.ImageName); + var imageNameValueStringToken = new Snapshot(imageName: snapshot.ImageName); return EnsureSnapshotPostJobStepForToken(imageNameValueStringToken, snapshot); } - [Fact] - [Trait("Level", "L0")] - [Trait("Category", "Worker")] - public Task EnsureSnapshotPostJobStepForMappingToken() - { - var snapshot = new Pipelines.Snapshot("TestImageNameFromMappingToken"); - var imageNameValueStringToken = new StringToken(null, null, null, snapshot.ImageName); - var mappingToken = new MappingToken(null, null, null) - { - { new StringToken(null,null,null, PipelineTemplateConstants.ImageName), imageNameValueStringToken } - }; - - return EnsureSnapshotPostJobStepForToken(mappingToken, snapshot); - } - [Fact] [Trait("Level", "L0")] [Trait("Category", "Worker")] public Task EnsureSnapshotPostJobStepForMappingToken_WithIf_Is_False() { var snapshot = new Pipelines.Snapshot("TestImageNameFromMappingToken", condition: $"{PipelineTemplateConstants.Success}() && 1==0", version: "2.*"); - var imageNameValueStringToken = new StringToken(null, null, null, snapshot.ImageName); - var condition = new StringToken(null, null, null, snapshot.Condition); - var version = new StringToken(null, null, null, snapshot.Version); - - var mappingToken = new MappingToken(null, null, null) - { - { new StringToken(null,null,null, PipelineTemplateConstants.ImageName), imageNameValueStringToken }, - { new StringToken(null,null,null, PipelineTemplateConstants.If), condition }, - { new StringToken(null,null,null, PipelineTemplateConstants.CustomImageVersion), version } - }; - - return EnsureSnapshotPostJobStepForToken(mappingToken, snapshot, skipSnapshotStep: true); + + return EnsureSnapshotPostJobStepForToken(snapshot, snapshot, skipSnapshotStep: true); } - private async Task EnsureSnapshotPostJobStepForToken(TemplateToken snapshotToken, Pipelines.Snapshot expectedSnapshot, bool skipSnapshotStep = false) + private async Task EnsureSnapshotPostJobStepForToken(Snapshot snapshotToken, Pipelines.Snapshot expectedSnapshot, bool skipSnapshotStep = false) { using (TestHostContext hc = CreateTestContext()) { From a552a36dee4e060874d179793286fcb4223bcb16 Mon Sep 17 00:00:00 2001 From: Lawrence Gripper Date: Mon, 10 Nov 2025 09:59:14 +0000 Subject: [PATCH 3/4] Leave EvaluateJobSnapshotRequest method to satisfy interface --- .../PipelineTemplateEvaluator.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs b/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs index 331b102469b..e5fbd5d2888 100644 --- a/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs +++ b/src/Sdk/DTPipelines/Pipelines/ObjectTemplating/PipelineTemplateEvaluator.cs @@ -370,6 +370,32 @@ public IList> EvaluateJobServiceContainers( return result; } + public Snapshot EvaluateJobSnapshotRequest(TemplateToken token, + DictionaryContextData contextData, + IList expressionFunctions) + { + var result = default(Snapshot); + + if (token != null && token.Type != TokenType.Null) + { + var context = CreateContext(contextData, expressionFunctions); + try + { + token = TemplateEvaluator.Evaluate(context, PipelineTemplateConstants.Snapshot, token, 0, null, omitHeader: true); + context.Errors.Check(); + result = PipelineTemplateConverter.ConvertToJobSnapshotRequest(context, token); + } + catch (Exception ex) when (!(ex is TemplateValidationException)) + { + context.Errors.Add(ex); + } + + context.Errors.Check(); + } + + return result; + } + private TemplateContext CreateContext( DictionaryContextData contextData, IList expressionFunctions, From 1030a269a95fe9cc107c2aada4182efb3e6fca36 Mon Sep 17 00:00:00 2001 From: Lawrence Gripper Date: Mon, 10 Nov 2025 10:25:04 +0000 Subject: [PATCH 4/4] Retrigger ci