Skip to content

Commit 9bb5cee

Browse files
Copilotdavidfowl
andcommitted
Pass nonInteractive flag directly to CliHostEnvironment constructor
Co-authored-by: davidfowl <[email protected]>
1 parent 666863b commit 9bb5cee

File tree

4 files changed

+75
-24
lines changed

4 files changed

+75
-24
lines changed

src/Aspire.Cli/Program.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,6 @@ private static async Task<IHost> BuildApplicationAsync(string[] args)
6363
};
6464
settings.Configuration.AddEnvironmentVariables();
6565

66-
// Add --non-interactive flag to configuration if present
67-
if (nonInteractive)
68-
{
69-
settings.Configuration.AddInMemoryCollection(new Dictionary<string, string?>
70-
{
71-
["ASPIRE_NON_INTERACTIVE"] = "true"
72-
});
73-
}
74-
7566
var builder = Host.CreateEmptyApplicationBuilder(settings);
7667

7768
// Set up settings with appropriate paths.
@@ -121,7 +112,11 @@ private static async Task<IHost> BuildApplicationAsync(string[] args)
121112
// Shared services.
122113
builder.Services.AddSingleton(_ => BuildCliExecutionContext(debugMode));
123114
builder.Services.AddSingleton(BuildAnsiConsole);
124-
builder.Services.AddSingleton<ICliHostEnvironment, CliHostEnvironment>();
115+
builder.Services.AddSingleton<ICliHostEnvironment>(provider =>
116+
{
117+
var configuration = provider.GetRequiredService<IConfiguration>();
118+
return new CliHostEnvironment(configuration, nonInteractive);
119+
});
125120
AddInteractionServices(builder);
126121
builder.Services.AddSingleton<IProjectLocator, ProjectLocator>();
127122
builder.Services.AddSingleton<ISolutionLocator, SolutionLocator>();

src/Aspire.Cli/Utils/CliHostEnvironment.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,39 @@ internal interface ICliHostEnvironment
2929
/// <summary>
3030
/// Default implementation that detects CLI host environment capabilities from configuration.
3131
/// </summary>
32-
internal sealed class CliHostEnvironment(IConfiguration configuration) : ICliHostEnvironment
32+
internal sealed class CliHostEnvironment : ICliHostEnvironment
3333
{
3434
/// <summary>
3535
/// Gets whether the host supports interactive input (e.g., prompts, user input).
3636
/// </summary>
37-
public bool SupportsInteractiveInput { get; } = DetectInteractiveInput(configuration);
37+
public bool SupportsInteractiveInput { get; }
3838

3939
/// <summary>
4040
/// Gets whether the host supports interactive output (e.g., spinners, progress bars).
4141
/// </summary>
42-
public bool SupportsInteractiveOutput { get; } = DetectInteractiveOutput(configuration);
42+
public bool SupportsInteractiveOutput { get; }
4343

4444
/// <summary>
4545
/// Gets whether the host supports colors and ANSI codes.
4646
/// </summary>
47-
public bool SupportsAnsi { get; } = DetectAnsiSupport(configuration);
47+
public bool SupportsAnsi { get; }
48+
49+
public CliHostEnvironment(IConfiguration configuration, bool nonInteractive)
50+
{
51+
// If --non-interactive is explicitly set, disable interactive input and output
52+
if (nonInteractive)
53+
{
54+
SupportsInteractiveInput = false;
55+
SupportsInteractiveOutput = false;
56+
}
57+
else
58+
{
59+
SupportsInteractiveInput = DetectInteractiveInput(configuration);
60+
SupportsInteractiveOutput = DetectInteractiveOutput(configuration);
61+
}
62+
63+
SupportsAnsi = DetectAnsiSupport(configuration);
64+
}
4865

4966
private static bool DetectInteractiveInput(IConfiguration configuration)
5067
{

tests/Aspire.Cli.Tests/TestHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ internal static class TestHelpers
1111
public static ICliHostEnvironment CreateInteractiveHostEnvironment()
1212
{
1313
var configuration = new ConfigurationBuilder().Build();
14-
return new CliHostEnvironment(configuration);
14+
return new CliHostEnvironment(configuration, nonInteractive: false);
1515
}
1616
}

tests/Aspire.Cli.Tests/Utils/CliHostEnvironmentTests.cs

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public void SupportsInteractiveInput_ReturnsTrue_WhenNoConfigSet()
1515
var configuration = new ConfigurationBuilder().Build();
1616

1717
// Act
18-
var env = new CliHostEnvironment(configuration);
18+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
1919

2020
// Assert
2121
Assert.True(env.SupportsInteractiveInput);
@@ -28,7 +28,7 @@ public void SupportsInteractiveOutput_ReturnsTrue_WhenNoConfigSet()
2828
var configuration = new ConfigurationBuilder().Build();
2929

3030
// Act
31-
var env = new CliHostEnvironment(configuration);
31+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
3232

3333
// Assert
3434
Assert.True(env.SupportsInteractiveOutput);
@@ -41,7 +41,7 @@ public void SupportsAnsi_ReturnsTrue_WhenNoConfigSet()
4141
var configuration = new ConfigurationBuilder().Build();
4242

4343
// Act
44-
var env = new CliHostEnvironment(configuration);
44+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
4545

4646
// Assert
4747
Assert.True(env.SupportsAnsi);
@@ -61,7 +61,7 @@ public void SupportsInteractiveInput_ReturnsFalse_WhenNonInteractiveSet(string k
6161
.Build();
6262

6363
// Act
64-
var env = new CliHostEnvironment(configuration);
64+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
6565

6666
// Assert
6767
Assert.False(env.SupportsInteractiveInput);
@@ -81,7 +81,7 @@ public void SupportsInteractiveOutput_ReturnsFalse_WhenNonInteractiveSet(string
8181
.Build();
8282

8383
// Act
84-
var env = new CliHostEnvironment(configuration);
84+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
8585

8686
// Assert
8787
Assert.False(env.SupportsInteractiveOutput);
@@ -104,7 +104,7 @@ public void SupportsInteractiveInput_ReturnsFalse_InCIEnvironment(string envVar,
104104
.Build();
105105

106106
// Act
107-
var env = new CliHostEnvironment(configuration);
107+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
108108

109109
// Assert
110110
Assert.False(env.SupportsInteractiveInput);
@@ -126,7 +126,7 @@ public void SupportsInteractiveOutput_ReturnsFalse_InCIEnvironment(string envVar
126126
.Build();
127127

128128
// Act
129-
var env = new CliHostEnvironment(configuration);
129+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
130130

131131
// Assert
132132
Assert.False(env.SupportsInteractiveOutput);
@@ -147,7 +147,7 @@ public void SupportsAnsi_ReturnsTrue_InCIEnvironment(string envVar, string value
147147
.Build();
148148

149149
// Act
150-
var env = new CliHostEnvironment(configuration);
150+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
151151

152152
// Assert
153153
Assert.True(env.SupportsAnsi);
@@ -165,9 +165,48 @@ public void SupportsAnsi_ReturnsFalse_WhenNO_COLORSet()
165165
.Build();
166166

167167
// Act
168-
var env = new CliHostEnvironment(configuration);
168+
var env = new CliHostEnvironment(configuration, nonInteractive: false);
169169

170170
// Assert
171171
Assert.False(env.SupportsAnsi);
172172
}
173+
174+
[Fact]
175+
public void SupportsInteractiveInput_ReturnsFalse_WhenNonInteractiveTrue()
176+
{
177+
// Arrange
178+
var configuration = new ConfigurationBuilder().Build();
179+
180+
// Act
181+
var env = new CliHostEnvironment(configuration, nonInteractive: true);
182+
183+
// Assert
184+
Assert.False(env.SupportsInteractiveInput);
185+
}
186+
187+
[Fact]
188+
public void SupportsInteractiveOutput_ReturnsFalse_WhenNonInteractiveTrue()
189+
{
190+
// Arrange
191+
var configuration = new ConfigurationBuilder().Build();
192+
193+
// Act
194+
var env = new CliHostEnvironment(configuration, nonInteractive: true);
195+
196+
// Assert
197+
Assert.False(env.SupportsInteractiveOutput);
198+
}
199+
200+
[Fact]
201+
public void SupportsAnsi_ReturnsTrue_WhenNonInteractiveTrue()
202+
{
203+
// Arrange - ANSI should still be supported even in non-interactive mode
204+
var configuration = new ConfigurationBuilder().Build();
205+
206+
// Act
207+
var env = new CliHostEnvironment(configuration, nonInteractive: true);
208+
209+
// Assert
210+
Assert.True(env.SupportsAnsi);
211+
}
173212
}

0 commit comments

Comments
 (0)