From aeae15de7b621fcc500f44442c09f395d2aa39ac Mon Sep 17 00:00:00 2001 From: Ethan Chiu Date: Tue, 21 Jul 2020 14:33:58 -0400 Subject: [PATCH] Add safety check to prevent from checking defaults in ScriptHandler for composite action --- src/Runner.Worker/ExecutionContext.cs | 13 ++++++++++--- src/Runner.Worker/Handlers/ScriptHandler.cs | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Runner.Worker/ExecutionContext.cs b/src/Runner.Worker/ExecutionContext.cs index 6f6279c6b..029680366 100644 --- a/src/Runner.Worker/ExecutionContext.cs +++ b/src/Runner.Worker/ExecutionContext.cs @@ -60,10 +60,12 @@ namespace GitHub.Runner.Worker bool EchoOnActionCommand { get; set; } + bool IsComposite { get; } + // Initialize void InitializeJob(Pipelines.AgentJobRequestMessage message, CancellationToken token); void CancelToken(); - IExecutionContext CreateChild(Guid recordId, string displayName, string refName, string scopeName, string contextName, Dictionary intraActionState = null, int? recordOrder = null, IPagingLogger logger = null); + IExecutionContext CreateChild(Guid recordId, string displayName, string refName, string scopeName, string contextName, Dictionary intraActionState = null, int? recordOrder = null, IPagingLogger logger = null, bool isComposite = false); // logging long Write(string tag, string message); @@ -126,6 +128,7 @@ namespace GitHub.Runner.Worker // only job level ExecutionContext will track throttling delay. private long _totalThrottlingDelayInMilliseconds = 0; + public Guid Id => _record.Id; public string ScopeName { get; private set; } public string ContextName { get; private set; } @@ -148,6 +151,8 @@ namespace GitHub.Runner.Worker // Only job level ExecutionContext has StepsWithPostRegistered public HashSet StepsWithPostRegistered { get; private set; } + public bool IsComposite { get; private set; } + public bool EchoOnActionCommand { get; set; } public TaskResult? Result @@ -254,7 +259,7 @@ namespace GitHub.Runner.Worker DictionaryContextData inputsData, Dictionary envData) { - step.ExecutionContext = Root.CreateChild(_record.Id, step.DisplayName, _record.Id.ToString("N"), scopeName, step.Action.ContextName, logger: _logger); + step.ExecutionContext = Root.CreateChild(_record.Id, step.DisplayName, _record.Id.ToString("N"), scopeName, step.Action.ContextName, logger: _logger, isComposite: true); step.ExecutionContext.ExpressionValues["inputs"] = inputsData; step.ExecutionContext.ExpressionValues["steps"] = Global.StepsContext.GetScope(step.ExecutionContext.GetFullyQualifiedContextName()); @@ -273,7 +278,7 @@ namespace GitHub.Runner.Worker return step; } - public IExecutionContext CreateChild(Guid recordId, string displayName, string refName, string scopeName, string contextName, Dictionary intraActionState = null, int? recordOrder = null, IPagingLogger logger = null) + public IExecutionContext CreateChild(Guid recordId, string displayName, string refName, string scopeName, string contextName, Dictionary intraActionState = null, int? recordOrder = null, IPagingLogger logger = null, bool isComposite = false) { Trace.Entering(); @@ -320,6 +325,8 @@ namespace GitHub.Runner.Worker child._logger.Setup(_mainTimelineId, recordId); } + child.IsComposite = isComposite; + return child; } diff --git a/src/Runner.Worker/Handlers/ScriptHandler.cs b/src/Runner.Worker/Handlers/ScriptHandler.cs index f7d90dc45..f1e98054b 100644 --- a/src/Runner.Worker/Handlers/ScriptHandler.cs +++ b/src/Runner.Worker/Handlers/ScriptHandler.cs @@ -153,7 +153,7 @@ namespace GitHub.Runner.Worker.Handlers { // TODO: figure out how defaults interact with template later // for now, we won't check job.defaults if we are inside a template. - if (string.IsNullOrEmpty(ExecutionContext.ScopeName) && ExecutionContext.Global.JobDefaults.TryGetValue("run", out var runDefaults)) + if (!ExecutionContext.IsComposite && string.IsNullOrEmpty(ExecutionContext.ScopeName) && ExecutionContext.Global.JobDefaults.TryGetValue("run", out var runDefaults)) { if (runDefaults.TryGetValue("working-directory", out workingDirectory)) { @@ -169,7 +169,7 @@ namespace GitHub.Runner.Worker.Handlers { // TODO: figure out how defaults interact with template later // for now, we won't check job.defaults if we are inside a template. - if (string.IsNullOrEmpty(ExecutionContext.ScopeName) && ExecutionContext.Global.JobDefaults.TryGetValue("run", out var runDefaults)) + if (!ExecutionContext.IsComposite && string.IsNullOrEmpty(ExecutionContext.ScopeName) && ExecutionContext.Global.JobDefaults.TryGetValue("run", out var runDefaults)) { if (runDefaults.TryGetValue("shell", out shell)) {