Compare commits

...

1 Commits

Author SHA1 Message Date
eric sciple
8770849c3b add set-workspace command 2019-10-30 22:16:31 -04:00
3 changed files with 43 additions and 0 deletions

View File

@@ -42,6 +42,7 @@ namespace GitHub.Runner.Common
// Action command extensions. // Action command extensions.
case "GitHub.Runner.Worker.IActionCommandExtension": case "GitHub.Runner.Worker.IActionCommandExtension":
Add<T>(extensions, "GitHub.Runner.Worker.InternalPluginSetRepoPathCommandExtension, Runner.Worker"); Add<T>(extensions, "GitHub.Runner.Worker.InternalPluginSetRepoPathCommandExtension, Runner.Worker");
Add<T>(extensions, "GitHub.Runner.Worker.SetWorkspaceCommandExtension, Runner.Worker");
Add<T>(extensions, "GitHub.Runner.Worker.SetEnvCommandExtension, Runner.Worker"); Add<T>(extensions, "GitHub.Runner.Worker.SetEnvCommandExtension, Runner.Worker");
Add<T>(extensions, "GitHub.Runner.Worker.SetOutputCommandExtension, Runner.Worker"); Add<T>(extensions, "GitHub.Runner.Worker.SetOutputCommandExtension, Runner.Worker");
Add<T>(extensions, "GitHub.Runner.Worker.SaveStateCommandExtension, Runner.Worker"); Add<T>(extensions, "GitHub.Runner.Worker.SaveStateCommandExtension, Runner.Worker");

View File

@@ -184,6 +184,40 @@ namespace GitHub.Runner.Worker
} }
} }
public sealed class SetWorkspaceCommandExtension : RunnerService, IActionCommandExtension
{
public string Command => "set-workspace";
public Type ExtensionType => typeof(IActionCommandExtension);
public void ProcessCommand(IExecutionContext context, string line, ActionCommand command)
{
string path = command.Data;
if (string.IsNullOrWhiteSpace(path))
{
throw new Exception("Path not specified");
}
if (!Path.IsPathRooted(path))
{
throw new Exception("Expected a rooted path");
}
string runnerWorkspace = context.GetRunnerContext("workspace");
ArgUtil.Directory(runnerWorkspace, nameof(runnerWorkspace));
// Must be under runner workspace
path = Path.GetFullPath(path); // remove relative pathing and normalize slashes
if (!path.StartsWith(runnerWorkspace + Path.DirectorySeparatorChar, IOUtil.FilePathStringComparison))
{
throw new Exception($"Expected path to be under {runnerWorkspace}");
}
Trace.Info($"Setting GitHub workspace to '{path}'");
context.SetGitHubContext("workspace", path);
}
}
public sealed class SetEnvCommandExtension : RunnerService, IActionCommandExtension public sealed class SetEnvCommandExtension : RunnerService, IActionCommandExtension
{ {
public string Command => "set-env"; public string Command => "set-env";

View File

@@ -78,6 +78,7 @@ namespace GitHub.Runner.Worker
void Start(string currentOperation = null); void Start(string currentOperation = null);
TaskResult Complete(TaskResult? result = null, string currentOperation = null, string resultCode = null); TaskResult Complete(TaskResult? result = null, string currentOperation = null, string resultCode = null);
void SetEnvContext(string name, string value); void SetEnvContext(string name, string value);
string GetRunnerContext(string name);
void SetRunnerContext(string name, string value); void SetRunnerContext(string name, string value);
string GetGitHubContext(string name); string GetGitHubContext(string name);
void SetGitHubContext(string name, string value); void SetGitHubContext(string name, string value);
@@ -365,6 +366,13 @@ namespace GitHub.Runner.Worker
return Result.Value; return Result.Value;
} }
public string GetRunnerContext(string name)
{
ArgUtil.NotNullOrEmpty(name, nameof(name));
var runnerContext = ExpressionValues["runner"] as RunnerContext;
return runnerContext[name].AssertString($"runner[{name}]");
}
public void SetRunnerContext(string name, string value) public void SetRunnerContext(string name, string value)
{ {
ArgUtil.NotNullOrEmpty(name, nameof(name)); ArgUtil.NotNullOrEmpty(name, nameof(name));