From 2cac01155877e55c81217fccaa428a8a972c2df5 Mon Sep 17 00:00:00 2001 From: Tingluo Huang Date: Thu, 12 Dec 2019 14:56:45 -0500 Subject: [PATCH] Load and set env from .env file before creating HostContext. (#220) --- src/Runner.Listener/Program.cs | 51 ++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/src/Runner.Listener/Program.cs b/src/Runner.Listener/Program.cs index 61bd9ad67..3181680f0 100644 --- a/src/Runner.Listener/Program.cs +++ b/src/Runner.Listener/Program.cs @@ -4,6 +4,7 @@ using GitHub.Runner.Sdk; using System; using System.Globalization; using System.IO; +using System.Reflection; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; @@ -14,6 +15,9 @@ namespace GitHub.Runner.Listener { public static int Main(string[] args) { + // Add environment variables from .env file + LoadAndSetEnv(); + using (HostContext context = new HostContext("Runner")) { return MainAsync(context, args).GetAwaiter().GetResult(); @@ -25,7 +29,7 @@ namespace GitHub.Runner.Listener // 1: Terminate failure // 2: Retriable failure // 3: Exit for self update - public async static Task MainAsync(IHostContext context, string[] args) + private async static Task MainAsync(IHostContext context, string[] args) { Tracing trace = context.GetTrace(nameof(GitHub.Runner.Listener)); trace.Info($"Runner is built for {Constants.Runner.Platform} ({Constants.Runner.PlatformArchitecture}) - {BuildConstants.RunnerPackage.PackageName}."); @@ -83,22 +87,6 @@ namespace GitHub.Runner.Listener return Constants.Runner.ReturnCode.TerminatedError; } - // Add environment variables from .env file - string envFile = Path.Combine(context.GetDirectory(WellKnownDirectory.Root), ".env"); - if (File.Exists(envFile)) - { - var envContents = File.ReadAllLines(envFile); - foreach (var env in envContents) - { - if (!string.IsNullOrEmpty(env) && env.IndexOf('=') > 0) - { - string envKey = env.Substring(0, env.IndexOf('=')); - string envValue = env.Substring(env.IndexOf('=') + 1); - Environment.SetEnvironmentVariable(envKey, envValue); - } - } - } - // Parse the command line args. var command = new CommandSettings(context, args); trace.Info("Arguments parsed"); @@ -136,5 +124,34 @@ namespace GitHub.Runner.Listener return Constants.Runner.ReturnCode.RetryableError; } } + + private static void LoadAndSetEnv() + { + var binDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + var rootDir = new DirectoryInfo(binDir).Parent.FullName; + string envFile = Path.Combine(rootDir, ".env"); + if (File.Exists(envFile)) + { + var envContents = File.ReadAllLines(envFile); + foreach (var env in envContents) + { + if (!string.IsNullOrEmpty(env)) + { + var separatorIndex = env.IndexOf('='); + if (separatorIndex > 0) + { + string envKey = env.Substring(0, separatorIndex); + string envValue = null; + if (env.Length > separatorIndex + 1) + { + envValue = env.Substring(separatorIndex + 1); + } + + Environment.SetEnvironmentVariable(envKey, envValue); + } + } + } + } + } } }