mirror of
https://github.com/actions/runner.git
synced 2025-12-11 12:57:05 +00:00
Compare commits
34 Commits
testingScr
...
compositeA
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
abfc04c58a | ||
|
|
46245a1a71 | ||
|
|
45345dc981 | ||
|
|
7b608e3e92 | ||
|
|
f028b4e2b0 | ||
|
|
38f816c2ae | ||
|
|
bc1fe2cfe0 | ||
|
|
89a13db2c3 | ||
|
|
d59092d973 | ||
|
|
7ab3d5ad42 | ||
|
|
4c02d0a685 | ||
|
|
855b90c3d4 | ||
|
|
3d36af47f1 | ||
|
|
992ce4b924 | ||
|
|
e927bacf3c | ||
|
|
1ce75f188b | ||
|
|
e0d4270cc1 | ||
|
|
49893b6ede | ||
|
|
6a46ef1c47 | ||
|
|
80540edd4e | ||
|
|
cc8e2738ef | ||
|
|
e9dcc05d75 | ||
|
|
a24e33bbcc | ||
|
|
5dfb2cc552 | ||
|
|
143266bc96 | ||
|
|
522fbd0546 | ||
|
|
2bfa135739 | ||
|
|
3381b951a0 | ||
|
|
a22fcbc036 | ||
|
|
aeae15de7b | ||
|
|
6602117989 | ||
|
|
89412f35bf | ||
|
|
220793d4e9 | ||
|
|
645ba099b9 |
1
.github/workflows/release.yml
vendored
1
.github/workflows/release.yml
vendored
@@ -1,6 +1,7 @@
|
|||||||
name: Runner CD
|
name: Runner CD
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- releaseVersion
|
- releaseVersion
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ namespace GitHub.Runner.Worker
|
|||||||
Dictionary<string, string> EvaluateContainerEnvironment(IExecutionContext executionContext, MappingToken token, IDictionary<string, PipelineContextData> extraExpressionValues);
|
Dictionary<string, string> EvaluateContainerEnvironment(IExecutionContext executionContext, MappingToken token, IDictionary<string, PipelineContextData> extraExpressionValues);
|
||||||
|
|
||||||
string EvaluateDefaultInput(IExecutionContext executionContext, string inputName, TemplateToken token);
|
string EvaluateDefaultInput(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
|
||||||
@@ -282,6 +284,9 @@ namespace GitHub.Runner.Worker
|
|||||||
if (token != null)
|
if (token != null)
|
||||||
{
|
{
|
||||||
var templateContext = CreateTemplateContext(executionContext);
|
var templateContext = CreateTemplateContext(executionContext);
|
||||||
|
Trace.Info($"Template context GitHub: {StringUtil.ConvertToJson(templateContext.ExpressionValues["github"])}");
|
||||||
|
|
||||||
|
Trace.Info($"Template context keys: {StringUtil.ConvertToJson(templateContext.ExpressionValues.Keys)}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var evaluateResult = TemplateEvaluator.Evaluate(templateContext, "input-default-context", token, 0, null, omitHeader: true);
|
var evaluateResult = TemplateEvaluator.Evaluate(templateContext, "input-default-context", token, 0, null, omitHeader: true);
|
||||||
@@ -304,6 +309,83 @@ namespace GitHub.Runner.Worker
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public string EvaluateDefaultInputInsideComposite(
|
||||||
|
// IExecutionContext executionContext,
|
||||||
|
// string inputName,
|
||||||
|
// TemplateToken token)
|
||||||
|
// {
|
||||||
|
// string result = "";
|
||||||
|
// if (token != null)
|
||||||
|
// {
|
||||||
|
// // Add GitHub Expression Values
|
||||||
|
// var githubContext = executionContext.ExpressionValues["github"];
|
||||||
|
// Trace.Info($"GitHub Context EvaluateDefaultInputInsideComposite: {StringUtil.ConvertToJson(githubContext)}");
|
||||||
|
|
||||||
|
// var temp = new Dictionary<string, PipelineContextData>();
|
||||||
|
// temp["github"] = githubContext;
|
||||||
|
|
||||||
|
// // Trace.Info($"Token: {StringUtil.ConvertToJson(token)}");
|
||||||
|
|
||||||
|
// var templateContext = CreateTemplateContext(executionContext, temp);
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
|
||||||
|
// var evaluateResult = TemplateEvaluator.Evaluate(templateContext, "uses-input", token, 0, null, omitHeader: true);
|
||||||
|
|
||||||
|
// 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
|
||||||
|
// // Find better way to isolate only
|
||||||
|
// // We could create a whitelist for just checkout?
|
||||||
|
// // (ex: "repo", "token", etc.)
|
||||||
|
// // if (evaluateResult is BasicExpressionToken)
|
||||||
|
// // {
|
||||||
|
|
||||||
|
|
||||||
|
// // // var evaluateResult2 = TemplateEvaluator.Evaluate(templateContext, "step-with", token, 0, null, omitHeader: true);
|
||||||
|
// // // templateContext.Errors.Check();
|
||||||
|
|
||||||
|
// // // Trace.Info($"Test2 Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult2)}");
|
||||||
|
// // // var result2 = evaluateResult2.AssertString($"default value for input '{inputName}'").Value;
|
||||||
|
|
||||||
|
// // // TODO 6/28 => Try just getting it from the getgithubcontext lmao.
|
||||||
|
|
||||||
|
// // // Trace.Info($"Basic expr token: {evaluateResult}");
|
||||||
|
|
||||||
|
// // var stringVersion = evaluateResult.AssertString($"default value for input '{inputName}'").Value;
|
||||||
|
|
||||||
|
// // // no we have to use the template evaluator since it's a
|
||||||
|
|
||||||
|
// // // var githubTokenSplit =
|
||||||
|
|
||||||
|
// // // // Evaluate it
|
||||||
|
// // // var evaluateResult = executionContext.GetGitHubContext("");
|
||||||
|
|
||||||
|
// // return result2;
|
||||||
|
// // }
|
||||||
|
|
||||||
|
// // Trace.Info($"Input '{inputName}': default value evaluate result: {StringUtil.ConvertToJson(evaluateResult)}");
|
||||||
|
|
||||||
|
// // String
|
||||||
|
// result = evaluateResult.AssertString($"default value for input '{inputName}'").Value;
|
||||||
|
// }
|
||||||
|
// catch (Exception ex) when (!(ex is TemplateValidationException))
|
||||||
|
// {
|
||||||
|
// Trace.Error(ex);
|
||||||
|
// templateContext.Errors.Add(ex);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// templateContext.Errors.Check();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return result;
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
private TemplateContext CreateTemplateContext(
|
private TemplateContext CreateTemplateContext(
|
||||||
IExecutionContext executionContext,
|
IExecutionContext executionContext,
|
||||||
IDictionary<string, PipelineContextData> extraExpressionValues = null)
|
IDictionary<string, PipelineContextData> extraExpressionValues = null)
|
||||||
|
|||||||
@@ -169,6 +169,25 @@ namespace GitHub.Runner.Worker
|
|||||||
validInputs.Add("entryPoint");
|
validInputs.Add("entryPoint");
|
||||||
validInputs.Add("args");
|
validInputs.Add("args");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Trace.Info($"Repo: {ExecutionContext.GetGitHubContext("repository")}");
|
||||||
|
|
||||||
|
// Since we don't pass the GitHub Context attributes to the composite action,
|
||||||
|
// We need to explitly set the default values of certain things we need like the
|
||||||
|
// default repository
|
||||||
|
|
||||||
|
// if (ExecutionContext.GetGitHubContext("repository") == null)
|
||||||
|
// {
|
||||||
|
// ExecutionContext.SetGitHubContext("repository", definition.Directory);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// var githubContext = ExecutionContext.ExpressionValues["github"] as GitHubContext;
|
||||||
|
|
||||||
|
// foreach (var pair in githubContext)
|
||||||
|
// {
|
||||||
|
// ExecutionContext.SetGitHubContext(pair.Key, pair.Value as StringContextData);
|
||||||
|
// }
|
||||||
|
|
||||||
// Merge the default inputs from the definition
|
// Merge the default inputs from the definition
|
||||||
if (definition.Data?.Inputs != null)
|
if (definition.Data?.Inputs != null)
|
||||||
{
|
{
|
||||||
@@ -179,7 +198,17 @@ namespace GitHub.Runner.Worker
|
|||||||
validInputs.Add(key);
|
validInputs.Add(key);
|
||||||
if (!inputs.ContainsKey(key))
|
if (!inputs.ContainsKey(key))
|
||||||
{
|
{
|
||||||
|
Trace.Info($"Definition Input Key: {key}");
|
||||||
|
// if (ExecutionContext.InsideComposite)
|
||||||
|
// {
|
||||||
|
// inputs[key] = manifestManager.EvaluateDefaultInputInsideComposite(ExecutionContext, key, input.Value);
|
||||||
|
// }
|
||||||
|
// 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]}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>();
|
||||||
|
|||||||
@@ -5,11 +5,14 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using GitHub.DistributedTask.Expressions2;
|
||||||
using GitHub.DistributedTask.ObjectTemplating.Tokens;
|
using GitHub.DistributedTask.ObjectTemplating.Tokens;
|
||||||
using GitHub.DistributedTask.Pipelines.ContextData;
|
using GitHub.DistributedTask.Pipelines.ContextData;
|
||||||
|
using GitHub.DistributedTask.Pipelines.ObjectTemplating;
|
||||||
using GitHub.DistributedTask.WebApi;
|
using GitHub.DistributedTask.WebApi;
|
||||||
using GitHub.Runner.Common;
|
using GitHub.Runner.Common;
|
||||||
using GitHub.Runner.Sdk;
|
using GitHub.Runner.Sdk;
|
||||||
|
using GitHub.Runner.Worker.Expressions;
|
||||||
using Pipelines = GitHub.DistributedTask.Pipelines;
|
using Pipelines = GitHub.DistributedTask.Pipelines;
|
||||||
|
|
||||||
|
|
||||||
@@ -35,6 +38,8 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
var githubContext = ExecutionContext.ExpressionValues["github"] as GitHubContext;
|
var githubContext = ExecutionContext.ExpressionValues["github"] as GitHubContext;
|
||||||
ArgUtil.NotNull(githubContext, nameof(githubContext));
|
ArgUtil.NotNull(githubContext, nameof(githubContext));
|
||||||
|
|
||||||
|
// Trace.Info($"Github Context: {StringUtil.ConvertToJson(githubContext)}");
|
||||||
|
|
||||||
// Resolve action steps
|
// Resolve action steps
|
||||||
var actionSteps = Data.Steps;
|
var actionSteps = Data.Steps;
|
||||||
|
|
||||||
@@ -45,6 +50,8 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
inputsData[i.Key] = new StringContextData(i.Value);
|
inputsData[i.Key] = new StringContextData(i.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Trace.Info($"Composite Actions Inputs {StringUtil.ConvertToJson(inputsData)}");
|
||||||
|
|
||||||
// Initialize Composite Steps List of Steps
|
// Initialize Composite Steps List of Steps
|
||||||
var compositeSteps = new List<IStep>();
|
var compositeSteps = new List<IStep>();
|
||||||
|
|
||||||
@@ -64,6 +71,10 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
compositeGitHubContext[pair.Key] = pair.Value;
|
compositeGitHubContext[pair.Key] = pair.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Download all data
|
||||||
|
var actionManager = HostContext.GetService<IActionManager>();
|
||||||
|
await actionManager.PrepareActionsAsync(ExecutionContext, actionSteps);
|
||||||
|
|
||||||
foreach (Pipelines.ActionStep actionStep in actionSteps)
|
foreach (Pipelines.ActionStep actionStep in actionSteps)
|
||||||
{
|
{
|
||||||
var actionRunner = HostContext.CreateService<IActionRunner>();
|
var actionRunner = HostContext.CreateService<IActionRunner>();
|
||||||
@@ -76,6 +87,7 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
// Set GITHUB_ACTION_PATH
|
// Set GITHUB_ACTION_PATH
|
||||||
step.ExecutionContext.ExpressionValues["github"] = compositeGitHubContext;
|
step.ExecutionContext.ExpressionValues["github"] = compositeGitHubContext;
|
||||||
step.ExecutionContext.SetGitHubContext("action_path", ActionDirectory);
|
step.ExecutionContext.SetGitHubContext("action_path", ActionDirectory);
|
||||||
|
step.ExecutionContext.ExpressionFunctions.Add(new FunctionInfo<HashFilesFunction>(PipelineTemplateConstants.HashFiles, 1, byte.MaxValue));
|
||||||
|
|
||||||
compositeSteps.Add(step);
|
compositeSteps.Add(step);
|
||||||
}
|
}
|
||||||
@@ -150,6 +162,7 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
{
|
{
|
||||||
ArgUtil.NotNull(compositeSteps, nameof(compositeSteps));
|
ArgUtil.NotNull(compositeSteps, nameof(compositeSteps));
|
||||||
|
|
||||||
|
|
||||||
// The parent StepsRunner of the whole Composite Action Step handles the cancellation stuff already.
|
// The parent StepsRunner of the whole Composite Action Step handles the cancellation stuff already.
|
||||||
foreach (IStep step in compositeSteps)
|
foreach (IStep step in compositeSteps)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -164,8 +164,6 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
string workingDirectory = null;
|
string workingDirectory = null;
|
||||||
if (!Inputs.TryGetValue("workingDirectory", out workingDirectory))
|
if (!Inputs.TryGetValue("workingDirectory", out workingDirectory))
|
||||||
{
|
{
|
||||||
// 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 (string.IsNullOrEmpty(ExecutionContext.ScopeName) && ExecutionContext.Global.JobDefaults.TryGetValue("run", out var runDefaults))
|
||||||
{
|
{
|
||||||
if (runDefaults.TryGetValue("working-directory", out workingDirectory))
|
if (runDefaults.TryGetValue("working-directory", out workingDirectory))
|
||||||
@@ -180,8 +178,6 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
string shell = null;
|
string shell = null;
|
||||||
if (!Inputs.TryGetValue("shell", out shell) || string.IsNullOrEmpty(shell))
|
if (!Inputs.TryGetValue("shell", out shell) || string.IsNullOrEmpty(shell))
|
||||||
{
|
{
|
||||||
// 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 (string.IsNullOrEmpty(ExecutionContext.ScopeName) && ExecutionContext.Global.JobDefaults.TryGetValue("run", out var runDefaults))
|
||||||
{
|
{
|
||||||
if (runDefaults.TryGetValue("shell", out shell))
|
if (runDefaults.TryGetValue("shell", out shell))
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -108,19 +108,46 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"composite-steps": {
|
"composite-steps": {
|
||||||
"context": [
|
|
||||||
"github",
|
|
||||||
"strategy",
|
|
||||||
"matrix",
|
|
||||||
"steps",
|
|
||||||
"inputs",
|
|
||||||
"job",
|
|
||||||
"runner",
|
|
||||||
"env",
|
|
||||||
"hashFiles(1,255)"
|
|
||||||
],
|
|
||||||
"sequence": {
|
"sequence": {
|
||||||
"item-type": "any"
|
"item-type": "composite-step-types"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"composite-step-types": {
|
||||||
|
"one-of": [
|
||||||
|
"composite-step",
|
||||||
|
"uses-step"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"composite-step": {
|
||||||
|
"mapping": {
|
||||||
|
"properties": {
|
||||||
|
"name": "string-steps-context",
|
||||||
|
"id": "non-empty-string",
|
||||||
|
"run": {
|
||||||
|
"type": "string-steps-context",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"env": "step-env",
|
||||||
|
"working-directory": "string-steps-context",
|
||||||
|
"shell": {
|
||||||
|
"type": "non-empty-string",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uses-step": {
|
||||||
|
"mapping": {
|
||||||
|
"properties": {
|
||||||
|
"name": "string-steps-context",
|
||||||
|
"id": "non-empty-string",
|
||||||
|
"uses": {
|
||||||
|
"type": "non-empty-string",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"with": "step-with",
|
||||||
|
"env": "step-env"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"container-runs-context": {
|
"container-runs-context": {
|
||||||
@@ -157,6 +184,68 @@
|
|||||||
"string": {
|
"string": {
|
||||||
"require-non-empty": true
|
"require-non-empty": true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"string-steps-context": {
|
||||||
|
"context": [
|
||||||
|
"github",
|
||||||
|
"inputs",
|
||||||
|
"strategy",
|
||||||
|
"matrix",
|
||||||
|
"steps",
|
||||||
|
"job",
|
||||||
|
"runner",
|
||||||
|
"env",
|
||||||
|
"hashFiles(1,255)"
|
||||||
|
],
|
||||||
|
"string": {}
|
||||||
|
},
|
||||||
|
"step-env": {
|
||||||
|
"context": [
|
||||||
|
"github",
|
||||||
|
"inputs",
|
||||||
|
"strategy",
|
||||||
|
"matrix",
|
||||||
|
"steps",
|
||||||
|
"job",
|
||||||
|
"runner",
|
||||||
|
"env",
|
||||||
|
"hashFiles(1,255)"
|
||||||
|
],
|
||||||
|
"mapping": {
|
||||||
|
"loose-key-type": "non-empty-string",
|
||||||
|
"loose-value-type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"step-with": {
|
||||||
|
"context": [
|
||||||
|
"github",
|
||||||
|
"inputs",
|
||||||
|
"strategy",
|
||||||
|
"matrix",
|
||||||
|
"steps",
|
||||||
|
"job",
|
||||||
|
"runner",
|
||||||
|
"env",
|
||||||
|
"hashFiles(1,255)"
|
||||||
|
],
|
||||||
|
"mapping": {
|
||||||
|
"loose-key-type": "non-empty-string",
|
||||||
|
"loose-value-type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uses-input": {
|
||||||
|
"context": [
|
||||||
|
"github",
|
||||||
|
"inputs",
|
||||||
|
"strategy",
|
||||||
|
"matrix",
|
||||||
|
"steps",
|
||||||
|
"job",
|
||||||
|
"runner",
|
||||||
|
"env",
|
||||||
|
"hashFiles(1,255)"
|
||||||
|
],
|
||||||
|
"string": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2.272.0
|
2.274.0
|
||||||
|
|||||||
Reference in New Issue
Block a user