Compare commits

...

1 Commits

Author SHA1 Message Date
TingluoHuang
5057893a13 . 2021-11-24 14:58:29 -05:00
4 changed files with 71 additions and 50 deletions

View File

@@ -9,6 +9,7 @@ using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Loader; using System.Runtime.Loader;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -25,8 +26,8 @@ namespace GitHub.Runner.Common
ISecretMasker SecretMasker { get; } ISecretMasker SecretMasker { get; }
List<ProductInfoHeaderValue> UserAgents { get; } List<ProductInfoHeaderValue> UserAgents { get; }
RunnerWebProxy WebProxy { get; } RunnerWebProxy WebProxy { get; }
string GetDirectory(WellKnownDirectory directory); string GetDirectory(WellKnownDirectory directory, string rootCaller = "", [CallerMemberName] string caller = "");
string GetConfigFile(WellKnownConfigFile configFile); string GetConfigFile(WellKnownConfigFile configFile, string rootCaller = "", [CallerMemberName] string caller = "");
Tracing GetTrace(string name); Tracing GetTrace(string name);
Task Delay(TimeSpan delay, CancellationToken cancellationToken); Task Delay(TimeSpan delay, CancellationToken cancellationToken);
T CreateService<T>() where T : class, IRunnerService; T CreateService<T>() where T : class, IRunnerService;
@@ -213,8 +214,13 @@ namespace GitHub.Runner.Common
} }
} }
public string GetDirectory(WellKnownDirectory directory) public string GetDirectory(WellKnownDirectory directory, string rootCaller = "", [CallerMemberName] string caller = "")
{ {
if (string.IsNullOrEmpty(rootCaller))
{
rootCaller = caller;
}
string path; string path;
switch (directory) switch (directory)
{ {
@@ -224,29 +230,29 @@ namespace GitHub.Runner.Common
case WellKnownDirectory.Diag: case WellKnownDirectory.Diag:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
Constants.Path.DiagDirectory); Constants.Path.DiagDirectory);
break; break;
case WellKnownDirectory.Externals: case WellKnownDirectory.Externals:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
Constants.Path.ExternalsDirectory); Constants.Path.ExternalsDirectory);
break; break;
case WellKnownDirectory.Root: case WellKnownDirectory.Root:
path = new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName; path = new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin, rootCaller)).Parent.FullName;
break; break;
case WellKnownDirectory.Temp: case WellKnownDirectory.Temp:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.TempDirectory); Constants.Path.TempDirectory);
break; break;
case WellKnownDirectory.Actions: case WellKnownDirectory.Actions:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.ActionsDirectory); Constants.Path.ActionsDirectory);
break; break;
@@ -257,14 +263,14 @@ namespace GitHub.Runner.Common
if (string.IsNullOrEmpty(path)) if (string.IsNullOrEmpty(path))
{ {
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.ToolDirectory); Constants.Path.ToolDirectory);
} }
break; break;
case WellKnownDirectory.Update: case WellKnownDirectory.Update:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.UpdateDirectory); Constants.Path.UpdateDirectory);
break; break;
@@ -274,94 +280,99 @@ namespace GitHub.Runner.Common
ArgUtil.NotNull(settings, nameof(settings)); ArgUtil.NotNull(settings, nameof(settings));
ArgUtil.NotNullOrEmpty(settings.WorkFolder, nameof(settings.WorkFolder)); ArgUtil.NotNullOrEmpty(settings.WorkFolder, nameof(settings.WorkFolder));
path = Path.GetFullPath(Path.Combine( path = Path.GetFullPath(Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
settings.WorkFolder)); settings.WorkFolder));
break; break;
default: default:
throw new NotSupportedException($"Unexpected well known directory: '{directory}'"); throw new NotSupportedException($"Unexpected well known directory: '{directory}' ({rootCaller})");
} }
_trace.Info($"Well known directory '{directory}': '{path}'"); _trace.Info($"Well known directory '{directory}': '{path}' ({rootCaller})");
return path; return path;
} }
public string GetConfigFile(WellKnownConfigFile configFile) public string GetConfigFile(WellKnownConfigFile configFile, string rootCaller = "", [CallerMemberName] string caller = "")
{ {
if (string.IsNullOrEmpty(rootCaller))
{
rootCaller = caller;
}
string path; string path;
switch (configFile) switch (configFile)
{ {
case WellKnownConfigFile.Runner: case WellKnownConfigFile.Runner:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".runner"); ".runner");
break; break;
case WellKnownConfigFile.Credentials: case WellKnownConfigFile.Credentials:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credentials"); ".credentials");
break; break;
case WellKnownConfigFile.MigratedCredentials: case WellKnownConfigFile.MigratedCredentials:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credentials_migrated"); ".credentials_migrated");
break; break;
case WellKnownConfigFile.RSACredentials: case WellKnownConfigFile.RSACredentials:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credentials_rsaparams"); ".credentials_rsaparams");
break; break;
case WellKnownConfigFile.Service: case WellKnownConfigFile.Service:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".service"); ".service");
break; break;
case WellKnownConfigFile.CredentialStore: case WellKnownConfigFile.CredentialStore:
#if OS_OSX #if OS_OSX
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credential_store.keychain"); ".credential_store.keychain");
#else #else
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credential_store"); ".credential_store");
#endif #endif
break; break;
case WellKnownConfigFile.Certificates: case WellKnownConfigFile.Certificates:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".certificates"); ".certificates");
break; break;
case WellKnownConfigFile.Options: case WellKnownConfigFile.Options:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".options"); ".options");
break; break;
case WellKnownConfigFile.SetupInfo: case WellKnownConfigFile.SetupInfo:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".setup_info"); ".setup_info");
break; break;
case WellKnownConfigFile.Telemetry: case WellKnownConfigFile.Telemetry:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Diag), GetDirectory(WellKnownDirectory.Diag, rootCaller),
".telemetry"); ".telemetry");
break; break;
default: default:
throw new NotSupportedException($"Unexpected well known config file: '{configFile}'"); throw new NotSupportedException($"Unexpected well known config file: '{configFile}' ({rootCaller})");
} }
_trace.Info($"Well known config file '{configFile}': '{path}'"); _trace.Info($"Well known config file '{configFile}': '{path}' ({rootCaller})");
return path; return path;
} }

View File

@@ -159,8 +159,13 @@ namespace GitHub.Runner.Common.Tests
_serviceSingletons[typeof(T)] = singleton; _serviceSingletons[typeof(T)] = singleton;
} }
public string GetDirectory(WellKnownDirectory directory) public string GetDirectory(WellKnownDirectory directory, string rootCaller = "", [CallerMemberName] string caller = "")
{ {
if (string.IsNullOrEmpty(rootCaller))
{
rootCaller = caller;
}
string path; string path;
switch (directory) switch (directory)
{ {
@@ -170,13 +175,13 @@ namespace GitHub.Runner.Common.Tests
case WellKnownDirectory.Diag: case WellKnownDirectory.Diag:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
Constants.Path.DiagDirectory); Constants.Path.DiagDirectory);
break; break;
case WellKnownDirectory.Externals: case WellKnownDirectory.Externals:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
Constants.Path.ExternalsDirectory); Constants.Path.ExternalsDirectory);
break; break;
@@ -186,13 +191,13 @@ namespace GitHub.Runner.Common.Tests
case WellKnownDirectory.Temp: case WellKnownDirectory.Temp:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.TempDirectory); Constants.Path.TempDirectory);
break; break;
case WellKnownDirectory.Actions: case WellKnownDirectory.Actions:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.ActionsDirectory); Constants.Path.ActionsDirectory);
break; break;
@@ -202,14 +207,14 @@ namespace GitHub.Runner.Common.Tests
if (string.IsNullOrEmpty(path)) if (string.IsNullOrEmpty(path))
{ {
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.ToolDirectory); Constants.Path.ToolDirectory);
} }
break; break;
case WellKnownDirectory.Update: case WellKnownDirectory.Update:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Work), GetDirectory(WellKnownDirectory.Work, rootCaller),
Constants.Path.UpdateDirectory); Constants.Path.UpdateDirectory);
break; break;
@@ -223,66 +228,71 @@ namespace GitHub.Runner.Common.Tests
throw new NotSupportedException($"Unexpected well known directory: '{directory}'"); throw new NotSupportedException($"Unexpected well known directory: '{directory}'");
} }
_trace.Info($"Well known directory '{directory}': '{path}'"); _trace.Info($"Well known directory '{directory}': '{path}' ({rootCaller})");
return path; return path;
} }
public string GetConfigFile(WellKnownConfigFile configFile) public string GetConfigFile(WellKnownConfigFile configFile, string rootCaller = "", [CallerMemberName] string caller = "")
{ {
if (string.IsNullOrEmpty(rootCaller))
{
rootCaller = caller;
}
string path; string path;
switch (configFile) switch (configFile)
{ {
case WellKnownConfigFile.Runner: case WellKnownConfigFile.Runner:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".agent"); ".agent");
break; break;
case WellKnownConfigFile.Credentials: case WellKnownConfigFile.Credentials:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credentials"); ".credentials");
break; break;
case WellKnownConfigFile.RSACredentials: case WellKnownConfigFile.RSACredentials:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credentials_rsaparams"); ".credentials_rsaparams");
break; break;
case WellKnownConfigFile.Service: case WellKnownConfigFile.Service:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".service"); ".service");
break; break;
case WellKnownConfigFile.CredentialStore: case WellKnownConfigFile.CredentialStore:
#if OS_OSX #if OS_OSX
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credential_store.keychain"); ".credential_store.keychain");
#else #else
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".credential_store"); ".credential_store");
#endif #endif
break; break;
case WellKnownConfigFile.Certificates: case WellKnownConfigFile.Certificates:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".certificates"); ".certificates");
break; break;
case WellKnownConfigFile.Options: case WellKnownConfigFile.Options:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".options"); ".options");
break; break;
case WellKnownConfigFile.SetupInfo: case WellKnownConfigFile.SetupInfo:
path = Path.Combine( path = Path.Combine(
GetDirectory(WellKnownDirectory.Root), GetDirectory(WellKnownDirectory.Root, rootCaller),
".setup_info"); ".setup_info");
break; break;
@@ -290,7 +300,7 @@ namespace GitHub.Runner.Common.Tests
throw new NotSupportedException($"Unexpected well known config file: '{configFile}'"); throw new NotSupportedException($"Unexpected well known config file: '{configFile}'");
} }
_trace.Info($"Well known config file '{configFile}': '{path}'"); _trace.Info($"Well known config file '{configFile}': '{path}' ({rootCaller})");
return path; return path;
} }

View File

@@ -118,7 +118,7 @@ namespace GitHub.Runner.Common.Tests.Worker
await _actionRunner.RunAsync(); await _actionRunner.RunAsync();
//Assert //Assert
_ec.Verify(x => x.SetGitHubContext("event_path", Path.Combine(_hc.GetDirectory(WellKnownDirectory.Temp), "_github_workflow", "event.json")), Times.Once); _ec.Verify(x => x.SetGitHubContext("event_path", Path.Combine(_hc.GetDirectory(WellKnownDirectory.Temp, "", ""), "_github_workflow", "event.json")), Times.Once);
} }
[Fact] [Fact]

View File

@@ -153,7 +153,7 @@ namespace GitHub.Runner.Common.Tests.Worker
// Assert. // Assert.
_trackingManager.Verify(x => x.LoadIfExists(_ec.Object, _trackingFile)); _trackingManager.Verify(x => x.LoadIfExists(_ec.Object, _trackingFile));
_trackingManager.Verify(x => x.Update(_ec.Object, _existingConfig, _trackingFile)); _trackingManager.Verify(x => x.Update(_ec.Object, _existingConfig, _trackingFile));
_ec.Verify(x => x.SetGitHubContext("workspace", Path.Combine(hc.GetDirectory(WellKnownDirectory.Work), _existingConfig.PipelineDirectory, "my_new_path"))); _ec.Verify(x => x.SetGitHubContext("workspace", Path.Combine(hc.GetDirectory(WellKnownDirectory.Work, "", ""), _existingConfig.PipelineDirectory, "my_new_path")));
} }
} }