mirror of
https://github.com/actions/runner.git
synced 2025-12-10 04:06:57 +00:00
Compare commits
1 Commits
v2.319.1
...
fhammerl/d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
079ee2afef |
@@ -11,7 +11,7 @@ using GitHub.Runner.Sdk;
|
|||||||
|
|
||||||
namespace GitHub.Runner.Worker.Container
|
namespace GitHub.Runner.Worker.Container
|
||||||
{
|
{
|
||||||
[ServiceLocator(Default = typeof(DockerCommandManager))]
|
[ServiceLocator(Default = typeof(DockerHookCommandManager))]
|
||||||
public interface IDockerCommandManager : IRunnerService
|
public interface IDockerCommandManager : IRunnerService
|
||||||
{
|
{
|
||||||
string DockerPath { get; }
|
string DockerPath { get; }
|
||||||
@@ -188,7 +188,7 @@ namespace GitHub.Runner.Worker.Container
|
|||||||
return outputStrings.FirstOrDefault();
|
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>();
|
IList<string> dockerOptions = new List<string>();
|
||||||
// OPTIONS
|
// OPTIONS
|
||||||
@@ -258,7 +258,7 @@ namespace GitHub.Runner.Worker.Container
|
|||||||
return await ExecuteDockerCommandAsync(context, "run", optionsString, container.ContainerEnvironmentVariables, stdoutDataReceived, stderrDataReceived, context.CancellationToken);
|
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);
|
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