mirror of
https://github.com/actions/runner.git
synced 2025-12-10 12:36:23 +00:00
Compare commits
1 Commits
v2.296.0
...
fhammerl/d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
079ee2afef |
@@ -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<int> DockerRun(IExecutionContext context, ContainerInfo container, EventHandler<ProcessDataReceivedEventArgs> stdoutDataReceived, EventHandler<ProcessDataReceivedEventArgs> stderrDataReceived)
|
||||
public virtual async Task<int> DockerRun(IExecutionContext context, ContainerInfo container, EventHandler<ProcessDataReceivedEventArgs> stdoutDataReceived, EventHandler<ProcessDataReceivedEventArgs> stderrDataReceived)
|
||||
{
|
||||
IList<string> dockerOptions = new List<string>();
|
||||
// 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<int> DockerStart(IExecutionContext context, string containerId)
|
||||
public virtual async Task<int> DockerStart(IExecutionContext context, string containerId)
|
||||
{
|
||||
return await ExecuteDockerCommandAsync(context, "start", containerId, context.CancellationToken);
|
||||
}
|
||||
|
||||
50
src/Runner.Worker/Container/DockerHookCommandManager.cs
Normal file
50
src/Runner.Worker/Container/DockerHookCommandManager.cs
Normal file
@@ -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<int> 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<IDefaultStepHost>();
|
||||
var prependPath = string.Join(Path.PathSeparator.ToString(), context.Global.PrependPath.Reverse<string>());
|
||||
Dictionary<string, string> 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<IHandlerFactory>();
|
||||
var handler = handlerFactory.Create(
|
||||
context,
|
||||
action: new ScriptReference(),
|
||||
stepHost,
|
||||
new ScriptActionExecutionData(),
|
||||
inputs,
|
||||
environment: new Dictionary<string, string>(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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user