diff --git a/src/Runner.Worker/ExecutionContext.cs b/src/Runner.Worker/ExecutionContext.cs index 7bb7e7efc..4b63b15bc 100644 --- a/src/Runner.Worker/ExecutionContext.cs +++ b/src/Runner.Worker/ExecutionContext.cs @@ -67,6 +67,8 @@ namespace GitHub.Runner.Worker bool IsEmbedded { get; } + List StepEnvironmentOverrides { get; } + ExecutionContext Root { get; } // Initialize @@ -237,6 +239,8 @@ namespace GitHub.Runner.Worker } } + public List StepEnvironmentOverrides { get; } = new List(); + public override void Initialize(IHostContext hostContext) { base.Initialize(hostContext); diff --git a/src/Runner.Worker/Handlers/CompositeActionHandler.cs b/src/Runner.Worker/Handlers/CompositeActionHandler.cs index 0dc538157..04afb100c 100644 --- a/src/Runner.Worker/Handlers/CompositeActionHandler.cs +++ b/src/Runner.Worker/Handlers/CompositeActionHandler.cs @@ -266,7 +266,11 @@ namespace GitHub.Runner.Worker.Handlers #endif foreach (var pair in dict) { - envContext[pair.Key] = pair.Value; + // Skip global env, otherwise we merge an outdated global env + if (ExecutionContext.StepEnvironmentOverrides.Contains(pair.Key)) + { + envContext[pair.Key] = pair.Value; + } } } @@ -275,11 +279,13 @@ namespace GitHub.Runner.Worker.Handlers if (step is IActionRunner actionStep) { // Evaluate and merge embedded-step env + step.ExecutionContext.StepEnvironmentOverrides.AddRange(ExecutionContext.StepEnvironmentOverrides); var templateEvaluator = step.ExecutionContext.ToPipelineTemplateEvaluator(); var actionEnvironment = templateEvaluator.EvaluateStepEnvironment(actionStep.Action.Environment, step.ExecutionContext.ExpressionValues, step.ExecutionContext.ExpressionFunctions, Common.Util.VarUtil.EnvironmentVariableKeyComparer); foreach (var env in actionEnvironment) { envContext[env.Key] = new StringContextData(env.Value ?? string.Empty); + step.ExecutionContext.StepEnvironmentOverrides.Add(env.Key); } } } diff --git a/src/Runner.Worker/StepsRunner.cs b/src/Runner.Worker/StepsRunner.cs index 38928c6eb..dc3e80a25 100644 --- a/src/Runner.Worker/StepsRunner.cs +++ b/src/Runner.Worker/StepsRunner.cs @@ -112,6 +112,7 @@ namespace GitHub.Runner.Worker foreach (var env in actionEnvironment) { envContext[env.Key] = new StringContextData(env.Value ?? string.Empty); + step.ExecutionContext.StepEnvironmentOverrides.Add(env.Key); } } catch (Exception ex) diff --git a/src/Test/L0/Worker/StepsRunnerL0.cs b/src/Test/L0/Worker/StepsRunnerL0.cs index 6f1cad8ab..e090dd1c0 100644 --- a/src/Test/L0/Worker/StepsRunnerL0.cs +++ b/src/Test/L0/Worker/StepsRunnerL0.cs @@ -622,6 +622,7 @@ namespace GitHub.Runner.Common.Tests.Worker _stepContext.SetOutcome("", stepContext.Object.ContextName, (stepContext.Object.Outcome ?? stepContext.Object.Result ?? TaskResult.Succeeded).ToActionResult()); _stepContext.SetConclusion("", stepContext.Object.ContextName, (stepContext.Object.Result ?? TaskResult.Succeeded).ToActionResult()); }); + stepContext.Setup(x => x.StepEnvironmentOverrides).Returns(new List()); stepContext.Setup(x => x.UpdateGlobalStepsContext()).Callback(() => {