Compare commits

..

28 Commits

Author SHA1 Message Date
Ethan Chiu
68b05f63c9 Add filetable to testing file, remove ? since we know filetable should never be non null 2020-07-08 16:25:20 -04:00
Ethan Chiu
635baa5295 Add null check 2020-07-08 14:51:07 -04:00
Ethan Chiu
af9202bd8d Fix logic for trimming manifestfile path 2020-07-08 14:43:03 -04:00
Ethan Chiu
b3eea21e4f Fix unit tests to instantiate a FileTable 2020-07-08 14:37:30 -04:00
Ethan Chiu
9a2b3e2662 Revert 2020-07-08 14:11:53 -04:00
Ethan Chiu
6d7efa9906 add line 2020-07-08 14:08:04 -04:00
Ethan Chiu
8828263795 Address situation if FileTable is null + add sanity check for adding file to fileTable 2020-07-08 14:00:12 -04:00
Ethan Chiu
35879fc3b1 Fix null errors 2020-07-08 12:33:22 -04:00
Ethan Chiu
7c57d41b3a Merge branch 'master' of https://github.com/actions/runner into users/ethanchewy/compositeFileTable 2020-07-08 11:33:32 -04:00
Ethan Chiu
41a8c8c3aa Add back line break 2020-07-08 11:20:44 -04:00
Ethan Chiu
5822a38c39 Add bash command for running custom runner (#569) 2020-07-08 11:20:38 -04:00
Ethan Chiu
d2d0ecf1ed revert back 2020-07-08 11:16:08 -04:00
Ethan Chiu
9a1dd80bcb Sanity check for fileTable add + remove unn. code 2020-07-08 11:14:46 -04:00
Ethan Chiu
3836574cce Fix period 2020-07-08 10:52:36 -04:00
Ethan Chiu
b6526db74e Merge branch 'users/ethanchewy/compositeenv' of https://github.com/actions/runner into users/ethanchewy/compositeFileTable 2020-07-08 10:29:19 -04:00
Ethan Chiu
d42c9da2d7 Composite Actions: Support Env Flow (#557)
* Composite Action Run Steps

* Env Flow => Able to get env variables and overwrite current env variables => but it doesn't 'stick'

* clean up

* Clean up trace messages + add Trace debug in ActionManager

* Add debugging message

* Optimize runtime of code

* Change String to string

* Add comma to Composite

* Change JobSteps to a List, Change Register Step function name

* Add TODO, remove unn. content

* Remove unnecessary code

* Fix unit tests

* Fix env format

* Remove comment

* Remove TODO message for context

* Add verbose trace logs which are only viewable by devs

* Sort usings in Composite Action Handler

* Change 0 to location

* Update context variables in composite action yaml

* Add helpful error message for null steps

* Fix Workflow Step Env overiding Parent Env

* Remove env in composite action scope

* Clean up

* Revert back

* revert back

* add back envToken

* Remove unnecessary code

* Figure out how to handle set-env edge cases

* formatting

* fix unit tests

* Fix windows unit test syntax error
2020-07-08 10:16:51 -04:00
Ethan Chiu
14a2cbd473 Clean up 2020-07-07 13:02:07 -04:00
Ethan Chiu
20bc6a9a5c Add file length check 2020-07-07 12:57:59 -04:00
Ethan Chiu
191a096f8d Merge branch 'users/ethanchewy/compositeenv' of https://github.com/actions/runner into users/ethanchewy/compositeFileTable 2020-07-07 12:53:19 -04:00
Ethan Chiu
0bd97d6597 Merge branch 'users/ethanchewy/compositeenv' of https://github.com/actions/runner into users/ethanchewy/compositeFileTable 2020-06-25 13:59:07 -04:00
Ethan Chiu
54ed6eabce Remove todo 2020-06-23 14:27:06 -04:00
Ethan Chiu
0a6453e241 Clean up file path for error message 2020-06-23 14:19:51 -04:00
Ethan Chiu
368b6254ed Remove unnessary FileID attribute from CompositeActionExecutionData 2020-06-23 13:40:06 -04:00
Ethan Chiu
9c60f1a264 Merge branch 'users/ethanchewy/compositetest2' of https://github.com/actions/runner into users/ethanchewy/compositeFileTable 2020-06-23 13:26:32 -04:00
Ethan Chiu
ba4ce9c3d3 Change confusing term context => templateContext, Eliminate _fileTable and only use ExecutionContext.FileTable + update this table when need be 2020-06-23 13:22:20 -04:00
Ethan Chiu
da2da85766 Pass fileID to all children token of root action token 2020-06-23 12:56:52 -04:00
Ethan Chiu
58d11ef80a Progress towards passing FileTable or FileID or FileName 2020-06-22 18:29:48 -04:00
Ethan Chiu
43a3006e7b Initial Start for FileTable stuff 2020-06-22 14:43:50 -04:00
5 changed files with 48 additions and 20 deletions

View File

@@ -51,6 +51,19 @@ cd ./src
./dev.(sh/cmd) test # run all unit tests before git commit/push ./dev.(sh/cmd) test # run all unit tests before git commit/push
``` ```
View logs:
```bash
cd runner/_layout/_diag
ls
cat (Runner/Worker)_TIMESTAMP.log # view your log file
```
Run Runner:
```bash
cd runner/_layout
./run.sh # run your custom runner
```
### Editors ### Editors
[Using Visual Studio Code](https://code.visualstudio.com/) [Using Visual Studio Code](https://code.visualstudio.com/)

View File

@@ -33,8 +33,6 @@ namespace GitHub.Runner.Worker
public sealed class ActionManifestManager : RunnerService, IActionManifestManager public sealed class ActionManifestManager : RunnerService, IActionManifestManager
{ {
private TemplateSchema _actionManifestSchema; private TemplateSchema _actionManifestSchema;
private IReadOnlyList<String> _fileTable;
public override void Initialize(IHostContext hostContext) public override void Initialize(IHostContext hostContext)
{ {
base.Initialize(hostContext); base.Initialize(hostContext);
@@ -55,22 +53,39 @@ namespace GitHub.Runner.Worker
public ActionDefinitionData Load(IExecutionContext executionContext, string manifestFile) public ActionDefinitionData Load(IExecutionContext executionContext, string manifestFile)
{ {
var context = CreateContext(executionContext); var templateContext = CreateContext(executionContext);
ActionDefinitionData actionDefinition = new ActionDefinitionData(); ActionDefinitionData actionDefinition = new ActionDefinitionData();
// Clean up file name real quick
// Instead of using Regex which can be computationally expensive,
// we can just remove the # of characters from the fileName according to the length of the basePath
string basePath = HostContext.GetDirectory(WellKnownDirectory.Actions);
string fileRelativePath = manifestFile;
if (manifestFile.Contains(basePath))
{
fileRelativePath = manifestFile.Remove(0, basePath.Length + 1);
}
try try
{ {
var token = default(TemplateToken); var token = default(TemplateToken);
// Get the file ID // Get the file ID
var fileId = context.GetFileId(manifestFile); var fileId = templateContext.GetFileId(fileRelativePath);
_fileTable = context.GetFileTable();
// Add this file to the FileTable in executionContext if it hasn't been added already
// we use > since fileID is 1 indexed
if (fileId > executionContext.FileTable.Count)
{
executionContext.FileTable.Add(fileRelativePath);
}
// Read the file // Read the file
var fileContent = File.ReadAllText(manifestFile); var fileContent = File.ReadAllText(manifestFile);
using (var stringReader = new StringReader(fileContent)) using (var stringReader = new StringReader(fileContent))
{ {
var yamlObjectReader = new YamlObjectReader(null, stringReader); var yamlObjectReader = new YamlObjectReader(fileId, stringReader);
token = TemplateReader.Read(context, "action-root", yamlObjectReader, fileId, out _); token = TemplateReader.Read(templateContext, "action-root", yamlObjectReader, fileId, out _);
} }
var actionMapping = token.AssertMapping("action manifest root"); var actionMapping = token.AssertMapping("action manifest root");
@@ -89,11 +104,11 @@ namespace GitHub.Runner.Worker
break; break;
case "inputs": case "inputs":
ConvertInputs(context, actionPair.Value, actionDefinition); ConvertInputs(templateContext, actionPair.Value, actionDefinition);
break; break;
case "runs": case "runs":
actionDefinition.Execution = ConvertRuns(executionContext, context, actionPair.Value); actionDefinition.Execution = ConvertRuns(executionContext, templateContext, actionPair.Value);
break; break;
default: default:
Trace.Info($"Ignore action property {propertyName}."); Trace.Info($"Ignore action property {propertyName}.");
@@ -104,24 +119,24 @@ namespace GitHub.Runner.Worker
catch (Exception ex) catch (Exception ex)
{ {
Trace.Error(ex); Trace.Error(ex);
context.Errors.Add(ex); templateContext.Errors.Add(ex);
} }
if (context.Errors.Count > 0) if (templateContext.Errors.Count > 0)
{ {
foreach (var error in context.Errors) foreach (var error in templateContext.Errors)
{ {
Trace.Error($"Action.yml load error: {error.Message}"); Trace.Error($"Action.yml load error: {error.Message}");
executionContext.Error(error.Message); executionContext.Error(error.Message);
} }
throw new ArgumentException($"Fail to load {manifestFile}"); throw new ArgumentException($"Fail to load {fileRelativePath}");
} }
if (actionDefinition.Execution == null) if (actionDefinition.Execution == null)
{ {
executionContext.Debug($"Loaded action.yml file: {StringUtil.ConvertToJson(actionDefinition)}"); executionContext.Debug($"Loaded action.yml file: {StringUtil.ConvertToJson(actionDefinition)}");
throw new ArgumentException($"Top level 'runs:' section is required for {manifestFile}"); throw new ArgumentException($"Top level 'runs:' section is required for {fileRelativePath}");
} }
else else
{ {
@@ -282,13 +297,10 @@ namespace GitHub.Runner.Worker
result.ExpressionFunctions.Add(item); result.ExpressionFunctions.Add(item);
} }
// Add the file table // Add the file table from the Execution Context
if (_fileTable?.Count > 0) for (var i = 0; i < executionContext.FileTable.Count; i++)
{ {
for (var i = 0; i < _fileTable.Count; i++) result.GetFileId(executionContext.FileTable[i]);
{
result.GetFileId(_fileTable[i]);
}
} }
return result; return result;

View File

@@ -3584,6 +3584,7 @@ runs:
_ec.Setup(x => x.Variables).Returns(new Variables(_hc, variables)); _ec.Setup(x => x.Variables).Returns(new Variables(_hc, variables));
_ec.Setup(x => x.ExpressionValues).Returns(new DictionaryContextData()); _ec.Setup(x => x.ExpressionValues).Returns(new DictionaryContextData());
_ec.Setup(x => x.ExpressionFunctions).Returns(new List<IFunctionInfo>()); _ec.Setup(x => x.ExpressionFunctions).Returns(new List<IFunctionInfo>());
_ec.Setup(x => x.FileTable).Returns(new List<String>());
_ec.Setup(x => x.Plan).Returns(new TaskOrchestrationPlanReference()); _ec.Setup(x => x.Plan).Returns(new TaskOrchestrationPlanReference());
_ec.Setup(x => x.Write(It.IsAny<string>(), It.IsAny<string>())).Callback((string tag, string message) => { _hc.GetTrace().Info($"[{tag}]{message}"); }); _ec.Setup(x => x.Write(It.IsAny<string>(), It.IsAny<string>())).Callback((string tag, string message) => { _hc.GetTrace().Info($"[{tag}]{message}"); });
_ec.Setup(x => x.AddIssue(It.IsAny<Issue>(), It.IsAny<string>())).Callback((Issue issue, string message) => { _hc.GetTrace().Info($"[{issue.Type}]{issue.Message ?? message}"); }); _ec.Setup(x => x.AddIssue(It.IsAny<Issue>(), It.IsAny<string>())).Callback((Issue issue, string message) => { _hc.GetTrace().Info($"[{issue.Type}]{issue.Message ?? message}"); });

View File

@@ -759,6 +759,7 @@ namespace GitHub.Runner.Common.Tests.Worker
_ec.Setup(x => x.Variables).Returns(new Variables(_hc, new Dictionary<string, VariableValue>())); _ec.Setup(x => x.Variables).Returns(new Variables(_hc, new Dictionary<string, VariableValue>()));
_ec.Setup(x => x.ExpressionValues).Returns(new DictionaryContextData()); _ec.Setup(x => x.ExpressionValues).Returns(new DictionaryContextData());
_ec.Setup(x => x.ExpressionFunctions).Returns(new List<IFunctionInfo>()); _ec.Setup(x => x.ExpressionFunctions).Returns(new List<IFunctionInfo>());
_ec.Setup(x => x.FileTable).Returns(new List<String>());
_ec.Setup(x => x.Write(It.IsAny<string>(), It.IsAny<string>())).Callback((string tag, string message) => { _hc.GetTrace().Info($"{tag}{message}"); }); _ec.Setup(x => x.Write(It.IsAny<string>(), It.IsAny<string>())).Callback((string tag, string message) => { _hc.GetTrace().Info($"{tag}{message}"); });
_ec.Setup(x => x.AddIssue(It.IsAny<Issue>(), It.IsAny<string>())).Callback((Issue issue, string message) => { _hc.GetTrace().Info($"[{issue.Type}]{issue.Message ?? message}"); }); _ec.Setup(x => x.AddIssue(It.IsAny<Issue>(), It.IsAny<string>())).Callback((Issue issue, string message) => { _hc.GetTrace().Info($"[{issue.Type}]{issue.Message ?? message}"); });
} }

View File

@@ -379,6 +379,7 @@ namespace GitHub.Runner.Common.Tests.Worker
_ec.Setup(x => x.ExpressionFunctions).Returns(new List<IFunctionInfo>()); _ec.Setup(x => x.ExpressionFunctions).Returns(new List<IFunctionInfo>());
_ec.Setup(x => x.IntraActionState).Returns(new Dictionary<string, string>()); _ec.Setup(x => x.IntraActionState).Returns(new Dictionary<string, string>());
_ec.Setup(x => x.EnvironmentVariables).Returns(new Dictionary<string, string>()); _ec.Setup(x => x.EnvironmentVariables).Returns(new Dictionary<string, string>());
_ec.Setup(x => x.FileTable).Returns(new List<String>());
_ec.Setup(x => x.SetGitHubContext(It.IsAny<string>(), It.IsAny<string>())); _ec.Setup(x => x.SetGitHubContext(It.IsAny<string>(), It.IsAny<string>()));
_ec.Setup(x => x.GetGitHubContext(It.IsAny<string>())).Returns("{\"foo\":\"bar\"}"); _ec.Setup(x => x.GetGitHubContext(It.IsAny<string>())).Returns("{\"foo\":\"bar\"}");
_ec.Setup(x => x.CancellationToken).Returns(_ecTokenSource.Token); _ec.Setup(x => x.CancellationToken).Returns(_ecTokenSource.Token);