testing...

This commit is contained in:
Ethan Chiu
2020-07-31 15:30:48 -04:00
15 changed files with 138 additions and 124 deletions

View File

@@ -1,6 +1,7 @@
name: Runner CD name: Runner CD
on: on:
workflow_dispatch:
push: push:
paths: paths:
- releaseVersion - releaseVersion

View File

@@ -1,18 +1,15 @@
## Features ## Features
- Resolve action download info from server (#508, #515, #550) - Composite Actions Support for Multiple Run Steps (#549, #557, #564, #568, #569, #578, #591, #599, #605, #609, #610, #615, #624)
- Print runner and machine name to log. (#539) - Prepare to switch GITHUB_ACTION to use ContextName instead of refname (#593)
- Fold logs for intermediate docker commands (#608)
- Add ability to register a runner to the non-default self-hosted runner group (#613)
## Bugs ## Bugs
- Reduce input validation warnings (#506) - Double quotes around variable so CD works if path contains spaces (#602)
- Fix null ref exception in SecretMasker caused by `hashfiles` timeout. (#516) - Bump lodash in /src/Misc/expressionFunc/hashFiles (#603)
- Add libicu66 to `./installDependencies.sh` for Ubuntu 20.04 (#535) - Fix poor performance of process spawned from svc daemon (#614)
- Fix DataContract with Token service (#532)
- Skip search $PATH on command with fully qualified path (#526)
- Restore SELinux context on service file when SELinux is enabled (#525)
## Misc ## Misc
- Remove SPS/Token migration code. Remove GHES url manipulate code. (#513) - Move shared ExecutionContext properties under .Global (#594)
- Add sub-step for developer flow for clarity (#523)
- Update Links and Language to Git + VSCode (#522)
- Update runner configuration exception message (#540)
## Windows x64 ## Windows x64
We recommend configuring the runner in a root folder of the Windows drive (e.g. "C:\actions-runner"). This will help avoid issues related to service identity folder permissions and long file path restrictions on Windows. We recommend configuring the runner in a root folder of the Windows drive (e.g. "C:\actions-runner"). This will help avoid issues related to service identity folder permissions and long file path restrictions on Windows.

View File

@@ -23,5 +23,7 @@
<key>ACTIONS_RUNNER_SVC</key> <key>ACTIONS_RUNNER_SVC</key>
<string>1</string> <string>1</string>
</dict> </dict>
<key>ProcessType</key>
<string>Interactive</string>
</dict> </dict>
</plist> </plist>

View File

@@ -462,13 +462,14 @@ Options:
--commit Prints the runner commit --commit Prints the runner commit
Config Options: Config Options:
--unattended Disable interactive prompts for missing arguments. Defaults will be used for missing options --unattended Disable interactive prompts for missing arguments. Defaults will be used for missing options
--url string Repository to add the runner to. Required if unattended --url string Repository to add the runner to. Required if unattended
--token string Registration token. Required if unattended --token string Registration token. Required if unattended
--name string Name of the runner to configure (default {Environment.MachineName ?? "myrunner"}) --name string Name of the runner to configure (default {Environment.MachineName ?? "myrunner"})
--labels string Extra labels in addition to the default: 'self-hosted,{Constants.Runner.Platform},{Constants.Runner.PlatformArchitecture}' --runnergroup string Name of the runner group to add this runner to (defaults to the default runner group)
--work string Relative runner work directory (default {Constants.Path.WorkDirectory}) --labels string Extra labels in addition to the default: 'self-hosted,{Constants.Runner.Platform},{Constants.Runner.PlatformArchitecture}'
--replace Replace any existing runner with the same name (default false)"); --work string Relative runner work directory (default {Constants.Path.WorkDirectory})
--replace Replace any existing runner with the same name (default false)");
#if OS_WINDOWS #if OS_WINDOWS
_term.WriteLine($@" --runasservice Run the runner as a service"); _term.WriteLine($@" --runasservice Run the runner as a service");
_term.WriteLine($@" --windowslogonaccount string Account to run the service as. Requires runasservice"); _term.WriteLine($@" --windowslogonaccount string Account to run the service as. Requires runasservice");

View File

@@ -395,7 +395,7 @@ namespace GitHub.Runner.Worker
Trace.Info($"Action cleanup plugin: {plugin.PluginTypeName}."); Trace.Info($"Action cleanup plugin: {plugin.PluginTypeName}.");
} }
} }
else if (definition.Data.Execution.ExecutionType == ActionExecutionType.Composite && !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TESTING_COMPOSITE_ACTIONS_ALPHA"))) else if (definition.Data.Execution.ExecutionType == ActionExecutionType.Composite)
{ {
var compositeAction = definition.Data.Execution as CompositeActionExecutionData; var compositeAction = definition.Data.Execution as CompositeActionExecutionData;
Trace.Info($"Load {compositeAction.Steps?.Count ?? 0} action steps."); Trace.Info($"Load {compositeAction.Steps?.Count ?? 0} action steps.");
@@ -1048,7 +1048,7 @@ namespace GitHub.Runner.Worker
Trace.Info($"Action plugin: {(actionDefinitionData.Execution as PluginActionExecutionData).Plugin}, no more preparation."); Trace.Info($"Action plugin: {(actionDefinitionData.Execution as PluginActionExecutionData).Plugin}, no more preparation.");
return null; return null;
} }
else if (actionDefinitionData.Execution.ExecutionType == ActionExecutionType.Composite && !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TESTING_COMPOSITE_ACTIONS_ALPHA"))) else if (actionDefinitionData.Execution.ExecutionType == ActionExecutionType.Composite)
{ {
Trace.Info($"Action composite: {(actionDefinitionData.Execution as CompositeActionExecutionData).Steps}, no more preparation."); Trace.Info($"Action composite: {(actionDefinitionData.Execution as CompositeActionExecutionData).Steps}, no more preparation.");
return null; return null;

View File

@@ -31,7 +31,7 @@ namespace GitHub.Runner.Worker
string EvaluateDefaultInput(IExecutionContext executionContext, string inputName, TemplateToken token); string EvaluateDefaultInput(IExecutionContext executionContext, string inputName, TemplateToken token);
string EvaluateDefaultInputInsideComposite(IExecutionContext executionContext, string inputName, TemplateToken token); // string EvaluateDefaultInputInsideComposite(IExecutionContext executionContext, string inputName, TemplateToken token);
} }
public sealed class ActionManifestManager : RunnerService, IActionManifestManager public sealed class ActionManifestManager : RunnerService, IActionManifestManager
@@ -107,12 +107,7 @@ namespace GitHub.Runner.Worker
break; break;
case "outputs": case "outputs":
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TESTING_COMPOSITE_ACTIONS_ALPHA"))) actionOutputs = actionPair.Value.AssertMapping("outputs");
{
actionOutputs = actionPair.Value.AssertMapping("outputs");
break;
}
Trace.Info($"Ignore action property outputs. Outputs for a whole action is not supported yet.");
break; break;
case "description": case "description":
@@ -311,80 +306,82 @@ namespace GitHub.Runner.Worker
return result; return result;
} }
public string EvaluateDefaultInputInsideComposite( // public string EvaluateDefaultInputInsideComposite(
IExecutionContext executionContext, // IExecutionContext executionContext,
string inputName, // string inputName,
TemplateToken token) // TemplateToken token)
{ // {
string result = ""; // string result = "";
if (token != null) // if (token != null)
{ // {
// Add GitHub Expression Values // // Add GitHub Expression Values
var githubContext = executionContext.ExpressionValues["github"]; // var githubContext = executionContext.ExpressionValues["github"];
Trace.Info($"GitHub Context EvaluateDefaultInputInsideComposite: {StringUtil.ConvertToJson(githubContext)}"); // Trace.Info($"GitHub Context EvaluateDefaultInputInsideComposite: {StringUtil.ConvertToJson(githubContext)}");
var temp = new Dictionary<string, PipelineContextData>(); // var temp = new Dictionary<string, PipelineContextData>();
temp["github"] = githubContext; // temp["github"] = githubContext;
var templateContext = CreateTemplateContext(executionContext, temp); // // Trace.Info($"Token: {StringUtil.ConvertToJson(token)}");
try
{
var evaluateResult = TemplateEvaluator.Evaluate(templateContext, "step-with", token, 0, null, omitHeader: true); // var templateContext = CreateTemplateContext(executionContext, temp);
// try
// {
Trace.Info($"Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult)}"); // var evaluateResult = TemplateEvaluator.Evaluate(templateContext, "uses-input", token, 0, null, omitHeader: true);
templateContext.Errors.Check();
// Can't evaluate the default github.respository, etc. // Trace.Info($"Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult)}");
// templateContext.Errors.Check();
// // Can't evaluate the default github.respository, etc.
// TODO: restrict to only be used for composite "uses" steps // // TODO: restrict to only be used for composite "uses" steps
// Find better way to isolate only // // Find better way to isolate only
// We could create a whitelist for just checkout? // // We could create a whitelist for just checkout?
// (ex: "repo", "token", etc.) // // (ex: "repo", "token", etc.)
// if (evaluateResult is BasicExpressionToken) // // if (evaluateResult is BasicExpressionToken)
// { // // {
// // var evaluateResult2 = TemplateEvaluator.Evaluate(templateContext, "step-with", token, 0, null, omitHeader: true); // // // var evaluateResult2 = TemplateEvaluator.Evaluate(templateContext, "step-with", token, 0, null, omitHeader: true);
// // templateContext.Errors.Check(); // // // templateContext.Errors.Check();
// // Trace.Info($"Test2 Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult2)}"); // // // Trace.Info($"Test2 Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult2)}");
// // var result2 = evaluateResult2.AssertString($"default value for input '{inputName}'").Value; // // // var result2 = evaluateResult2.AssertString($"default value for input '{inputName}'").Value;
// // TODO 6/28 => Try just getting it from the getgithubcontext lmao. // // // TODO 6/28 => Try just getting it from the getgithubcontext lmao.
// // Trace.Info($"Basic expr token: {evaluateResult}"); // // // Trace.Info($"Basic expr token: {evaluateResult}");
// var stringVersion = evaluateResult.AssertString($"default value for input '{inputName}'").Value; // // var stringVersion = evaluateResult.AssertString($"default value for input '{inputName}'").Value;
// // no we have to use the template evaluator since it's a // // // no we have to use the template evaluator since it's a
// // var githubTokenSplit = // // // var githubTokenSplit =
// // // Evaluate it // // // // Evaluate it
// // var evaluateResult = executionContext.GetGitHubContext(""); // // // var evaluateResult = executionContext.GetGitHubContext("");
// return result2; // // return result2;
// } // // }
// Trace.Info($"Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult)}"); // // Trace.Info($"Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult)}");
// String // // String
result = evaluateResult.AssertString($"default value for input '{inputName}'").Value; // result = evaluateResult.AssertString($"default value for input '{inputName}'").Value;
} // }
catch (Exception ex) when (!(ex is TemplateValidationException)) // catch (Exception ex) when (!(ex is TemplateValidationException))
{ // {
Trace.Error(ex); // Trace.Error(ex);
templateContext.Errors.Add(ex); // templateContext.Errors.Add(ex);
} // }
templateContext.Errors.Check(); // templateContext.Errors.Check();
} // }
return result; // return result;
} // }
private TemplateContext CreateTemplateContext( private TemplateContext CreateTemplateContext(
IExecutionContext executionContext, IExecutionContext executionContext,
@@ -500,14 +497,10 @@ namespace GitHub.Runner.Worker
preIfToken = run.Value.AssertString("pre-if"); preIfToken = run.Value.AssertString("pre-if");
break; break;
case "steps": case "steps":
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TESTING_COMPOSITE_ACTIONS_ALPHA"))) var stepsToken = run.Value.AssertSequence("steps");
{ steps = PipelineTemplateConverter.ConvertToSteps(templateContext, stepsToken);
var stepsToken = run.Value.AssertSequence("steps"); templateContext.Errors.Check();
steps = PipelineTemplateConverter.ConvertToSteps(templateContext, stepsToken); break;
templateContext.Errors.Check();
break;
}
throw new Exception("You aren't supposed to be using Composite Actions yet!");
default: default:
Trace.Info($"Ignore run property {runsKey}."); Trace.Info($"Ignore run property {runsKey}.");
break; break;
@@ -555,7 +548,7 @@ namespace GitHub.Runner.Worker
}; };
} }
} }
else if (string.Equals(usingToken.Value, "composite", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TESTING_COMPOSITE_ACTIONS_ALPHA"))) else if (string.Equals(usingToken.Value, "composite", StringComparison.OrdinalIgnoreCase))
{ {
if (steps == null) if (steps == null)
{ {

View File

@@ -192,14 +192,15 @@ namespace GitHub.Runner.Worker
if (!inputs.ContainsKey(key)) if (!inputs.ContainsKey(key))
{ {
Trace.Info($"Definition Input Key: {key}"); Trace.Info($"Definition Input Key: {key}");
if (ExecutionContext.InsideComposite) // if (ExecutionContext.InsideComposite)
{ // {
inputs[key] = manifestManager.EvaluateDefaultInputInsideComposite(ExecutionContext, key, input.Value); // inputs[key] = manifestManager.EvaluateDefaultInputInsideComposite(ExecutionContext, key, input.Value);
} // }
else // else
{ // {
inputs[key] = manifestManager.EvaluateDefaultInput(ExecutionContext, key, input.Value); // inputs[key] = manifestManager.EvaluateDefaultInput(ExecutionContext, key, input.Value);
} // }
inputs[key] = manifestManager.EvaluateDefaultInput(ExecutionContext, key, input.Value);
Trace.Info($"Definition Input Value: {inputs[key]}"); Trace.Info($"Definition Input Value: {inputs[key]}");
} }
} }

View File

@@ -53,7 +53,7 @@ namespace GitHub.Runner.Worker
JobContext JobContext { get; } JobContext JobContext { get; }
// Only job level ExecutionContext has JobSteps // Only job level ExecutionContext has JobSteps
List<IStep> JobSteps { get; } Queue<IStep> JobSteps { get; }
// Only job level ExecutionContext has PostJobSteps // Only job level ExecutionContext has PostJobSteps
Stack<IStep> PostJobSteps { get; } Stack<IStep> PostJobSteps { get; }
@@ -144,7 +144,7 @@ namespace GitHub.Runner.Worker
public GlobalContext Global { get; private set; } public GlobalContext Global { get; private set; }
// Only job level ExecutionContext has JobSteps // Only job level ExecutionContext has JobSteps
public List<IStep> JobSteps { get; private set; } public Queue<IStep> JobSteps { get; private set; }
// Only job level ExecutionContext has PostJobSteps // Only job level ExecutionContext has PostJobSteps
public Stack<IStep> PostJobSteps { get; private set; } public Stack<IStep> PostJobSteps { get; private set; }
@@ -663,7 +663,7 @@ namespace GitHub.Runner.Worker
Global.PrependPath = new List<string>(); Global.PrependPath = new List<string>();
// JobSteps for job ExecutionContext // JobSteps for job ExecutionContext
JobSteps = new List<IStep>(); JobSteps = new Queue<IStep>();
// PostJobSteps for job ExecutionContext // PostJobSteps for job ExecutionContext
PostJobSteps = new Stack<IStep>(); PostJobSteps = new Stack<IStep>();

View File

@@ -9,6 +9,7 @@ namespace GitHub.Runner.Worker
private readonly HashSet<string> _contextEnvWhitelist = new HashSet<string>(StringComparer.OrdinalIgnoreCase) private readonly HashSet<string> _contextEnvWhitelist = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{ {
"action", "action",
"action_path",
"actor", "actor",
"api_url", "api_url",
"base_ref", "base_ref",

View File

@@ -58,6 +58,14 @@ namespace GitHub.Runner.Worker.Handlers
childScopeName = $"__{Guid.NewGuid()}"; childScopeName = $"__{Guid.NewGuid()}";
} }
// Copy the github context so that we don't modify the original pointer
// We can't use PipelineContextData.Clone() since that creates a null pointer exception for copying a GitHubContext
var compositeGitHubContext = new GitHubContext();
foreach (var pair in githubContext)
{
compositeGitHubContext[pair.Key] = pair.Value;
}
foreach (Pipelines.ActionStep actionStep in actionSteps) foreach (Pipelines.ActionStep actionStep in actionSteps)
{ {
var actionRunner = HostContext.CreateService<IActionRunner>(); var actionRunner = HostContext.CreateService<IActionRunner>();
@@ -67,9 +75,9 @@ namespace GitHub.Runner.Worker.Handlers
var step = ExecutionContext.CreateCompositeStep(childScopeName, actionRunner, inputsData, Environment); var step = ExecutionContext.CreateCompositeStep(childScopeName, actionRunner, inputsData, Environment);
// TESTING: Blatantly pass github object so that we have access to it for checking out // Set GITHUB_ACTION_PATH
// (Later, we can just do this for the checkout step!) step.ExecutionContext.ExpressionValues["github"] = compositeGitHubContext;
step.ExecutionContext.ExpressionValues["github"] = githubContext; step.ExecutionContext.SetGitHubContext("action_path", ActionDirectory);
compositeSteps.Add(step); compositeSteps.Add(step);
} }
@@ -183,9 +191,6 @@ namespace GitHub.Runner.Worker.Handlers
var actionStep = step as IActionRunner; var actionStep = step as IActionRunner;
// Set GITHUB_ACTION
step.ExecutionContext.SetGitHubContext("action", step.ExecutionContext.GetFullyQualifiedContextName());
try try
{ {
// Evaluate and merge action's env block to env context // Evaluate and merge action's env block to env context

View File

@@ -152,7 +152,7 @@ namespace GitHub.Runner.Worker
{ {
foreach (var step in jobSteps) foreach (var step in jobSteps)
{ {
jobContext.JobSteps.Add(step); jobContext.JobSteps.Enqueue(step);
} }
await stepsRunner.RunAsync(jobContext); await stepsRunner.RunAsync(jobContext);

View File

@@ -59,14 +59,13 @@ namespace GitHub.Runner.Worker
checkPostJobActions = true; checkPostJobActions = true;
while (jobContext.PostJobSteps.TryPop(out var postStep)) while (jobContext.PostJobSteps.TryPop(out var postStep))
{ {
jobContext.JobSteps.Add(postStep); jobContext.JobSteps.Enqueue(postStep);
} }
continue; continue;
} }
var step = jobContext.JobSteps[0]; var step = jobContext.JobSteps.Dequeue();
jobContext.JobSteps.RemoveAt(0);
Trace.Info($"Processing step: DisplayName='{step.DisplayName}'"); Trace.Info($"Processing step: DisplayName='{step.DisplayName}'");
ArgUtil.NotNull(step.ExecutionContext, nameof(step.ExecutionContext)); ArgUtil.NotNull(step.ExecutionContext, nameof(step.ExecutionContext));

View File

@@ -232,6 +232,20 @@
"loose-key-type": "non-empty-string", "loose-key-type": "non-empty-string",
"loose-value-type": "string" "loose-value-type": "string"
} }
},
"uses-input": {
"context": [
"github",
"inputs",
"strategy",
"matrix",
"steps",
"job",
"runner",
"env",
"hashFiles(1,255)"
],
"string": {}
} }
} }
} }

View File

@@ -82,7 +82,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -117,7 +117,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -156,7 +156,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Steps.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Steps.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -210,7 +210,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Steps.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Steps.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -289,7 +289,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Steps.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Steps.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -332,7 +332,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Step.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Step.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -363,7 +363,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -393,7 +393,7 @@ namespace GitHub.Runner.Common.Tests.Worker
{ {
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(variableSet.Select(x => x.Object).ToList())); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(variableSet.Select(x => x.Object).ToList()));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -419,7 +419,7 @@ namespace GitHub.Runner.Common.Tests.Worker
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(new[] { step1.Object })); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(new[] { step1.Object }));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -457,7 +457,7 @@ namespace GitHub.Runner.Common.Tests.Worker
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(new[] { step1.Object, step2.Object })); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(new[] { step1.Object, step2.Object }));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -495,7 +495,7 @@ namespace GitHub.Runner.Common.Tests.Worker
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(new[] { step1.Object, step2.Object })); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(new[] { step1.Object, step2.Object }));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -526,7 +526,7 @@ namespace GitHub.Runner.Common.Tests.Worker
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(new[] { step1.Object, step2.Object, step3.Object })); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(new[] { step1.Object, step2.Object, step3.Object }));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);
@@ -562,7 +562,7 @@ namespace GitHub.Runner.Common.Tests.Worker
_ec.Object.Result = null; _ec.Object.Result = null;
_ec.Setup(x => x.JobSteps).Returns(new List<IStep>(new[] { step1.Object, step2.Object, step3.Object })); _ec.Setup(x => x.JobSteps).Returns(new Queue<IStep>(new[] { step1.Object, step2.Object, step3.Object }));
// Act. // Act.
await _stepsRunner.RunAsync(jobContext: _ec.Object); await _stepsRunner.RunAsync(jobContext: _ec.Object);

View File

@@ -1 +1 @@
2.267.0 2.274.0