mirror of
https://github.com/actions/runner.git
synced 2025-12-13 10:05:23 +00:00
set CI=true when launch process in actions runner. (#374)
This commit is contained in:
@@ -271,6 +271,14 @@ namespace GitHub.Runner.Sdk
|
|||||||
// Indicate GitHub Actions process.
|
// Indicate GitHub Actions process.
|
||||||
_proc.StartInfo.Environment["GITHUB_ACTIONS"] = "true";
|
_proc.StartInfo.Environment["GITHUB_ACTIONS"] = "true";
|
||||||
|
|
||||||
|
// Set CI=true when no one else already set it.
|
||||||
|
// CI=true is common set in most CI provider in GitHub
|
||||||
|
if (!_proc.StartInfo.Environment.ContainsKey("CI") &&
|
||||||
|
Environment.GetEnvironmentVariable("CI") == null)
|
||||||
|
{
|
||||||
|
_proc.StartInfo.Environment["CI"] = "true";
|
||||||
|
}
|
||||||
|
|
||||||
// Hook up the events.
|
// Hook up the events.
|
||||||
_proc.EnableRaisingEvents = true;
|
_proc.EnableRaisingEvents = true;
|
||||||
_proc.Exited += ProcessExitedHandler;
|
_proc.Exited += ProcessExitedHandler;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ using Xunit;
|
|||||||
using GitHub.Runner.Common.Util;
|
using GitHub.Runner.Common.Util;
|
||||||
using System.Threading.Channels;
|
using System.Threading.Channels;
|
||||||
using GitHub.Runner.Sdk;
|
using GitHub.Runner.Sdk;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace GitHub.Runner.Common.Tests
|
namespace GitHub.Runner.Common.Tests
|
||||||
{
|
{
|
||||||
@@ -81,6 +82,102 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[Trait("Level", "L0")]
|
||||||
|
[Trait("Category", "Common")]
|
||||||
|
public async Task SetCIEnv()
|
||||||
|
{
|
||||||
|
using (TestHostContext hc = new TestHostContext(this))
|
||||||
|
{
|
||||||
|
var existingCI = Environment.GetEnvironmentVariable("CI");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Clear out CI and make sure process invoker sets it.
|
||||||
|
Environment.SetEnvironmentVariable("CI", null);
|
||||||
|
|
||||||
|
Tracing trace = hc.GetTrace();
|
||||||
|
|
||||||
|
Int32 exitCode = -1;
|
||||||
|
var processInvoker = new ProcessInvokerWrapper();
|
||||||
|
processInvoker.Initialize(hc);
|
||||||
|
var stdout = new List<string>();
|
||||||
|
var stderr = new List<string>();
|
||||||
|
processInvoker.OutputDataReceived += (object sender, ProcessDataReceivedEventArgs e) =>
|
||||||
|
{
|
||||||
|
trace.Info(e.Data);
|
||||||
|
stdout.Add(e.Data);
|
||||||
|
};
|
||||||
|
processInvoker.ErrorDataReceived += (object sender, ProcessDataReceivedEventArgs e) =>
|
||||||
|
{
|
||||||
|
trace.Info(e.Data);
|
||||||
|
stderr.Add(e.Data);
|
||||||
|
};
|
||||||
|
#if OS_WINDOWS
|
||||||
|
exitCode = await processInvoker.ExecuteAsync("", "cmd.exe", "/c \"echo %CI%\"", null, CancellationToken.None);
|
||||||
|
#else
|
||||||
|
exitCode = await processInvoker.ExecuteAsync("", "bash", "-c \"echo $CI\"", null, CancellationToken.None);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
trace.Info("Exit Code: {0}", exitCode);
|
||||||
|
Assert.Equal(0, exitCode);
|
||||||
|
|
||||||
|
Assert.Equal("true", stdout.First(x => !string.IsNullOrWhiteSpace(x)));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Environment.SetEnvironmentVariable("CI", existingCI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[Trait("Level", "L0")]
|
||||||
|
[Trait("Category", "Common")]
|
||||||
|
public async Task KeepExistingCIEnv()
|
||||||
|
{
|
||||||
|
using (TestHostContext hc = new TestHostContext(this))
|
||||||
|
{
|
||||||
|
var existingCI = Environment.GetEnvironmentVariable("CI");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Clear out CI and make sure process invoker sets it.
|
||||||
|
Environment.SetEnvironmentVariable("CI", null);
|
||||||
|
|
||||||
|
Tracing trace = hc.GetTrace();
|
||||||
|
|
||||||
|
Int32 exitCode = -1;
|
||||||
|
var processInvoker = new ProcessInvokerWrapper();
|
||||||
|
processInvoker.Initialize(hc);
|
||||||
|
var stdout = new List<string>();
|
||||||
|
var stderr = new List<string>();
|
||||||
|
processInvoker.OutputDataReceived += (object sender, ProcessDataReceivedEventArgs e) =>
|
||||||
|
{
|
||||||
|
trace.Info(e.Data);
|
||||||
|
stdout.Add(e.Data);
|
||||||
|
};
|
||||||
|
processInvoker.ErrorDataReceived += (object sender, ProcessDataReceivedEventArgs e) =>
|
||||||
|
{
|
||||||
|
trace.Info(e.Data);
|
||||||
|
stderr.Add(e.Data);
|
||||||
|
};
|
||||||
|
#if OS_WINDOWS
|
||||||
|
exitCode = await processInvoker.ExecuteAsync("", "cmd.exe", "/c \"echo %CI%\"", new Dictionary<string, string>() { { "CI", "false" } }, CancellationToken.None);
|
||||||
|
#else
|
||||||
|
exitCode = await processInvoker.ExecuteAsync("", "bash", "-c \"echo $CI\"", new Dictionary<string, string>() { { "CI", "false" } }, CancellationToken.None);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
trace.Info("Exit Code: {0}", exitCode);
|
||||||
|
Assert.Equal(0, exitCode);
|
||||||
|
|
||||||
|
Assert.Equal("false", stdout.First(x => !string.IsNullOrWhiteSpace(x)));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Environment.SetEnvironmentVariable("CI", existingCI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if !OS_WINDOWS
|
#if !OS_WINDOWS
|
||||||
//Run a process that normally takes 20sec to finish and cancel it.
|
//Run a process that normally takes 20sec to finish and cancel it.
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|||||||
Reference in New Issue
Block a user