diff --git a/src/Runner.Worker/Container/ContainerInfo.cs b/src/Runner.Worker/Container/ContainerInfo.cs index 86885dbc4..8d3292496 100644 --- a/src/Runner.Worker/Container/ContainerInfo.cs +++ b/src/Runner.Worker/Container/ContainerInfo.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.IO; using GitHub.Runner.Common.Util; -using Pipelines = GitHub.DistributedTask.Pipelines; using GitHub.Runner.Common; using GitHub.Runner.Sdk; +using Pipelines = GitHub.DistributedTask.Pipelines; namespace GitHub.Runner.Worker.Container { @@ -19,7 +19,6 @@ namespace GitHub.Runner.Worker.Container public ContainerInfo() { - } public ContainerInfo(IHostContext hostContext, Pipelines.JobContainer container, bool isJobContainer = true, string networkAlias = null) diff --git a/src/Runner.Worker/Handlers/ContainerActionHandler.cs b/src/Runner.Worker/Handlers/ContainerActionHandler.cs index 2a91a1a42..bcd539469 100644 --- a/src/Runner.Worker/Handlers/ContainerActionHandler.cs +++ b/src/Runner.Worker/Handlers/ContainerActionHandler.cs @@ -189,8 +189,8 @@ namespace GitHub.Runner.Worker.Handlers container.ContainerEnvironmentVariables[variable.Key] = container.TranslateToContainerPath(variable.Value); } - using (var stdoutManager = new OutputManager(ExecutionContext, ActionCommandManager)) - using (var stderrManager = new OutputManager(ExecutionContext, ActionCommandManager)) + using (var stdoutManager = new OutputManager(ExecutionContext, ActionCommandManager, container)) + using (var stderrManager = new OutputManager(ExecutionContext, ActionCommandManager, container)) { var runExitCode = await dockerManger.DockerRun(ExecutionContext, container, stdoutManager.OnDataReceived, stderrManager.OnDataReceived); if (runExitCode != 0) diff --git a/src/Runner.Worker/Handlers/OutputManager.cs b/src/Runner.Worker/Handlers/OutputManager.cs index 369042ddf..6961d93ee 100644 --- a/src/Runner.Worker/Handlers/OutputManager.cs +++ b/src/Runner.Worker/Handlers/OutputManager.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text.RegularExpressions; using GitHub.Runner.Common; using GitHub.Runner.Sdk; +using GitHub.Runner.Worker.Container; using DTWebApi = GitHub.DistributedTask.WebApi; namespace GitHub.Runner.Worker.Handlers @@ -17,6 +18,7 @@ namespace GitHub.Runner.Worker.Handlers private const string _timeoutKey = "GITHUB_ACTIONS_RUNNER_ISSUE_MATCHER_TIMEOUT"; private static readonly Regex _colorCodeRegex = new Regex(@"\x0033\[[0-9;]*m?", RegexOptions.Compiled | RegexOptions.CultureInvariant); private readonly IActionCommandManager _commandManager; + private readonly ContainerInfo _container; private readonly IExecutionContext _executionContext; private readonly int _failsafe = 50; private readonly object _matchersLock = new object(); @@ -25,10 +27,11 @@ namespace GitHub.Runner.Worker.Handlers // Mapping that indicates whether a directory belongs to the workflow repository private readonly Dictionary _directoryMap = new Dictionary(); - public OutputManager(IExecutionContext executionContext, IActionCommandManager commandManager) + public OutputManager(IExecutionContext executionContext, IActionCommandManager commandManager, ContainerInfo container = null) { _executionContext = executionContext; _commandManager = commandManager; + _container = container; // Recursion failsafe (test override) var failsafeString = Environment.GetEnvironmentVariable("RUNNER_TEST_GET_REPOSITORY_PATH_FAILSAFE"); @@ -257,6 +260,7 @@ namespace GitHub.Runner.Worker.Handlers if (!string.IsNullOrWhiteSpace(match.File)) { var file = match.File; + var translate = _container != null; // Root using fromPath if (!string.IsNullOrWhiteSpace(match.FromPath) && !Path.IsPathFullyQualified(file)) @@ -275,11 +279,19 @@ namespace GitHub.Runner.Worker.Handlers ArgUtil.NotNullOrEmpty(workspace, "workspace"); file = Path.Combine(workspace, file); + translate = false; } // Remove relative pathing and normalize slashes file = Path.GetFullPath(file); + // Translate to host + if (translate) + { + file = _container.TranslateToHostPath(file); + file = Path.GetFullPath(file); + } + // Check whether the file exists if (File.Exists(file)) {