Skip to content

Commit 93163ee

Browse files
authored
Merge pull request #209 from github/no-host-network
Add option to disable the use of host network
2 parents befb118 + ecf894c commit 93163ee

File tree

7 files changed

+32
-10
lines changed

7 files changed

+32
-10
lines changed

src/ActionsImporter.UnitTests/Services/DockerServiceTests.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ public async Task ExecuteCommandAsync_InvokesDocker_ReturnsTrue()
103103
var server = "ghcr.io";
104104
var version = "latest";
105105
var arguments = new[] { "run", "this", "command" };
106+
var noHostNetwork = false;
107+
106108
_processService.Setup(handler =>
107109
handler.RunAsync(
108110
"docker",
@@ -114,7 +116,7 @@ public async Task ExecuteCommandAsync_InvokesDocker_ReturnsTrue()
114116
).Returns(Task.CompletedTask);
115117

116118
// Act
117-
await _dockerService.ExecuteCommandAsync(image, server, version, arguments);
119+
await _dockerService.ExecuteCommandAsync(image, server, version, noHostNetwork, arguments);
118120

119121
// Assert
120122
_processService.VerifyAll();
@@ -127,6 +129,7 @@ public async Task ExecuteCommandAsync_InvokesDocker_WithEnvironmentVariables_Ret
127129
var image = "actions-importer/cli";
128130
var server = "ghcr.io";
129131
var version = "latest";
132+
var noHostNetwork = false;
130133
var arguments = new[] { "run", "this", "command" };
131134

132135
Environment.SetEnvironmentVariable("GH_ACCESS_TOKEN", "foo");
@@ -144,7 +147,7 @@ public async Task ExecuteCommandAsync_InvokesDocker_WithEnvironmentVariables_Ret
144147
).Returns(Task.CompletedTask);
145148

146149
// Act
147-
await _dockerService.ExecuteCommandAsync(image, server, version, arguments);
150+
await _dockerService.ExecuteCommandAsync(image, server, version, noHostNetwork, arguments);
148151

149152
// Assert
150153
_processService.VerifyAll();
@@ -157,6 +160,7 @@ public async Task ExecuteCommandAsync_InvokesDocker_WithAdditionalDockerArgument
157160
var image = "actions-importer/cli";
158161
var server = "ghcr.io";
159162
var version = "latest";
163+
var noHostNetwork = false;
160164
var arguments = new[] { "run", "this", "command" };
161165

162166
Environment.SetEnvironmentVariable("DOCKER_ARGS", "--network=host");
@@ -172,7 +176,7 @@ public async Task ExecuteCommandAsync_InvokesDocker_WithAdditionalDockerArgument
172176
).Returns(Task.CompletedTask);
173177

174178
// Act
175-
await _dockerService.ExecuteCommandAsync(image, server, version, arguments);
179+
await _dockerService.ExecuteCommandAsync(image, server, version, noHostNetwork, arguments);
176180

177181
// Assert
178182
_processService.VerifyAll();
@@ -185,6 +189,7 @@ public async Task ExecuteCommandAsync_InvokesDocker_OnLinuxOS_ReturnsTrue()
185189
var image = "actions-importer/cli";
186190
var server = "ghcr.io";
187191
var version = "latest";
192+
var noHostNetwork = true;
188193
var arguments = new[] { "run", "this", "command" };
189194

190195
_runtimeService.Setup(handler => handler.IsLinux).Returns(true);
@@ -200,15 +205,15 @@ public async Task ExecuteCommandAsync_InvokesDocker_OnLinuxOS_ReturnsTrue()
200205
_processService.Setup(handler =>
201206
handler.RunAsync(
202207
"docker",
203-
$"run --rm -t --network=host -e USER_ID=50 -e GROUP_ID=100 -v \"{Directory.GetCurrentDirectory()}\":/data {server}/{image}:{version} {string.Join(' ', arguments)}",
208+
$"run --rm -t -e USER_ID=50 -e GROUP_ID=100 -v \"{Directory.GetCurrentDirectory()}\":/data {server}/{image}:{version} {string.Join(' ', arguments)}",
204209
Directory.GetCurrentDirectory(),
205210
new[] { new ValueTuple<string, string>("MSYS_NO_PATHCONV", "1") },
206211
true
207212
)
208213
).Returns(Task.CompletedTask);
209214

210215
// Act
211-
await _dockerService.ExecuteCommandAsync(image, server, version, arguments);
216+
await _dockerService.ExecuteCommandAsync(image, server, version, noHostNetwork, arguments);
212217

213218
// Assert
214219
_processService.VerifyAll();

src/ActionsImporter/App.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class App
1414
private readonly IConfigurationService _configurationService;
1515

1616
public bool IsPrerelease { get; set; }
17+
public bool NoHostNetwork { get; set; }
1718

1819
private string ImageTag => IsPrerelease ? "pre" : "latest";
1920

@@ -53,6 +54,7 @@ await _dockerService.ExecuteCommandAsync(
5354
ActionsImporterImage,
5455
ActionsImporterContainerRegistry,
5556
ImageTag,
57+
NoHostNetwork,
5658
args.Select(x => x.EscapeIfNeeded()).ToArray()
5759
);
5860
return 0;

src/ActionsImporter/Commands/Common.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ public static class Common
1919
IsHidden = true
2020
};
2121

22+
public static readonly Option<bool> NoHostNetwork = new("--no-host-network")
23+
{
24+
Description = "Use docker's default bridge network instead of the host machine's network.",
25+
IsRequired = false,
26+
};
27+
2228
public static Command AppendTransformerOptions(this Command command)
2329
{
2430
ArgumentNullException.ThrowIfNull(command);
@@ -149,6 +155,8 @@ public static Command AppendGeneralOptions(this Command command)
149155

150156
command.AddGlobalOption(Prerelease);
151157

158+
command.AddGlobalOption(NoHostNetwork);
159+
152160
return command;
153161
}
154162

src/ActionsImporter/Commands/ContainerCommand.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public abstract class ContainerCommand : BaseCommand
1010

1111
protected ContainerCommand(string[] args)
1212
{
13-
// Don't forward the --prerelease flag to GitHub Actions Importer image
14-
_args = args.Where(arg => !arg.Contains(Common.Prerelease.Name, StringComparison.Ordinal)).ToArray();
13+
// Don't forward the --prerelease or --no-host-network flag to GitHub Actions Importer image
14+
_args = args.Where(arg => !arg.Contains(Common.Prerelease.Name, StringComparison.Ordinal) && !arg.Contains(Common.NoHostNetwork.Name, StringComparison.Ordinal)).ToArray();
1515
}
1616

1717
protected abstract ImmutableArray<Option> Options { get; }

src/ActionsImporter/Interfaces/IDockerService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public interface IDockerService
66
{
77
Task UpdateImageAsync(string image, string server, string version);
88

9-
Task ExecuteCommandAsync(string image, string server, string version, params string[] arguments);
9+
Task ExecuteCommandAsync(string image, string server, string version, bool noHostNetwork, params string[] arguments);
1010

1111
Task<List<Feature>> GetFeaturesAsync(string image, string server, string version);
1212

src/ActionsImporter/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151

5252
var parsedArguments = parser.Parse(args);
5353
app.IsPrerelease = parsedArguments.HasOption(Common.Prerelease);
54+
app.NoHostNetwork = parsedArguments.HasOption(Common.NoHostNetwork);
5455

5556
var testCommandOnly = Environment.GetEnvironmentVariable("TEST_COMMAND_ONLY");
5657
if (testCommandOnly != null && testCommandOnly.ToUpperInvariant() == "TRUE")

src/ActionsImporter/Services/DockerService.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,18 @@ public Task UpdateImageAsync(string image, string server, string version)
2121
return DockerPullAsync(image, server, version);
2222
}
2323

24-
public async Task ExecuteCommandAsync(string image, string server, string version, params string[] arguments)
24+
public async Task ExecuteCommandAsync(string image, string server, string version, bool noHostNetwork, params string[] arguments)
2525
{
2626
var actionsImporterArguments = new List<string>
2727
{
28-
"run --rm -t --network=host"
28+
"run --rm -t"
2929
};
30+
31+
if (!noHostNetwork)
32+
{
33+
actionsImporterArguments.Add("--network=host");
34+
}
35+
3036
actionsImporterArguments.AddRange(GetEnvironmentVariableArguments());
3137

3238
var dockerArgs = Environment.GetEnvironmentVariable("DOCKER_ARGS");

0 commit comments

Comments
 (0)