From 079ee2afef3c9293cb88e6a7185967641a587e74 Mon Sep 17 00:00:00 2001 From: Ferenc Hammerl Date: Tue, 22 Mar 2022 06:35:11 -0700 Subject: [PATCH] Use hardcoded docker override --- .../Container/DockerCommandManager.cs | 6 +-- .../Container/DockerHookCommandManager.cs | 50 +++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/Runner.Worker/Container/DockerHookCommandManager.cs diff --git a/src/Runner.Worker/Container/DockerCommandManager.cs b/src/Runner.Worker/Container/DockerCommandManager.cs index 86cf0eeed..03f6b8c14 100644 --- a/src/Runner.Worker/Container/DockerCommandManager.cs +++ b/src/Runner.Worker/Container/DockerCommandManager.cs @@ -11,7 +11,7 @@ using GitHub.Runner.Sdk; namespace GitHub.Runner.Worker.Container { - [ServiceLocator(Default = typeof(DockerCommandManager))] + [ServiceLocator(Default = typeof(DockerHookCommandManager))] public interface IDockerCommandManager : IRunnerService { string DockerPath { get; } @@ -188,7 +188,7 @@ namespace GitHub.Runner.Worker.Container return outputStrings.FirstOrDefault(); } - public async Task DockerRun(IExecutionContext context, ContainerInfo container, EventHandler stdoutDataReceived, EventHandler stderrDataReceived) + public virtual async Task DockerRun(IExecutionContext context, ContainerInfo container, EventHandler stdoutDataReceived, EventHandler stderrDataReceived) { IList dockerOptions = new List(); // OPTIONS @@ -258,7 +258,7 @@ namespace GitHub.Runner.Worker.Container return await ExecuteDockerCommandAsync(context, "run", optionsString, container.ContainerEnvironmentVariables, stdoutDataReceived, stderrDataReceived, context.CancellationToken); } - public async Task DockerStart(IExecutionContext context, string containerId) + public virtual async Task DockerStart(IExecutionContext context, string containerId) { return await ExecuteDockerCommandAsync(context, "start", containerId, context.CancellationToken); } diff --git a/src/Runner.Worker/Container/DockerHookCommandManager.cs b/src/Runner.Worker/Container/DockerHookCommandManager.cs new file mode 100644 index 000000000..53d1ce0da --- /dev/null +++ b/src/Runner.Worker/Container/DockerHookCommandManager.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using GitHub.DistributedTask.Pipelines; +using GitHub.Runner.Common.Util; +using GitHub.Runner.Worker.Handlers; + +namespace GitHub.Runner.Worker.Container +{ + public class DockerHookCommandManager : DockerCommandManager + { + public override async Task DockerStart(IExecutionContext context, string containerId) + { + // check for env var + // execute script + + // Create the handler data. + var path = "/home/ferenc/Documents/runner/_layout/docker_run.sh"; + var scriptDirectory = Path.GetDirectoryName(path); + var stepHost = HostContext.CreateService(); + var prependPath = string.Join(Path.PathSeparator.ToString(), context.Global.PrependPath.Reverse()); + Dictionary inputs = new() + { + ["script"] = $"CONT_ID={containerId} " + "/usr/bin/bash" + " " + path, + // /bin/bash + ["shell"] = ScriptHandlerHelpers.GetDefaultShellForScript(path, Trace, prependPath) + }; + + // Create the handler + var handlerFactory = HostContext.GetService(); + var handler = handlerFactory.Create( + context, + action: new ScriptReference(), + stepHost, + new ScriptActionExecutionData(), + inputs, + environment: new Dictionary(VarUtil.EnvironmentVariableKeyComparer), + context.Global.Variables, + actionDirectory: scriptDirectory, + localActionContainerSetupSteps: null); + handler.PrepareExecution(ActionRunStage.Main); // TODO: find out stage + + await handler.RunAsync(ActionRunStage.Main); + + return ((int?) handler.ExecutionContext.CommandResult) ?? 0; + } + } +}