diff --git a/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppsInfrastructure.cs b/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppsInfrastructure.cs index b89800bac53..f22f30afd72 100644 --- a/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppsInfrastructure.cs +++ b/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppsInfrastructure.cs @@ -187,6 +187,7 @@ public void BuildContainerApp(AzureResourceInfrastructure c) containerAppContainer.Image = containerImageParam is null ? containerImageName! : containerImageParam; containerAppContainer.Name = resource.Name; + SetEntryPoint(containerAppContainer); AddEnvironmentVariablesAndCommandLineArgs(containerAppContainer); foreach (var (_, mountedVolume) in Volumes) @@ -824,6 +825,14 @@ private void AddIngress(ContainerAppConfiguration config) config.Ingress = caIngress; } + private void SetEntryPoint(ContainerAppContainer container) + { + if (resource is ContainerResource containerResource && containerResource.Entrypoint is { } entrypoint) + { + container.Command = [entrypoint]; + } + } + private void AddEnvironmentVariablesAndCommandLineArgs(ContainerAppContainer container) { if (EnvironmentVariables.Count > 0) diff --git a/tests/Aspire.Hosting.Azure.Tests/AzureContainerAppsTests.cs b/tests/Aspire.Hosting.Azure.Tests/AzureContainerAppsTests.cs index 0e01a142ad5..e275a8ad27d 100644 --- a/tests/Aspire.Hosting.Azure.Tests/AzureContainerAppsTests.cs +++ b/tests/Aspire.Hosting.Azure.Tests/AzureContainerAppsTests.cs @@ -688,6 +688,89 @@ param minReplicas string Assert.Equal(expectedBicep, bicep); } + [Fact] + public async Task AddContainerAppsEntrypointAndArgs() + { + var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); + + builder.AddAzureContainerAppsInfrastructure(); + + builder.AddContainer("api", "myimage") + .WithEntrypoint("/bin/sh") + .WithArgs("my", "args with space"); + + using var app = builder.Build(); + + await ExecuteBeforeStartHooksAsync(app, default); + + var model = app.Services.GetRequiredService(); + var container = Assert.Single(model.GetContainerResources()); + + container.TryGetLastAnnotation(out var target); + + var resource = target?.DeploymentTarget as AzureProvisioningResource; + + Assert.NotNull(resource); + + var (manifest, bicep) = await ManifestUtils.GetManifestWithBicep(resource); + + var expectedBicep = + """ + @description('The location for the resource(s) to be deployed.') + param location string = resourceGroup().location + + param outputs_azure_container_registry_managed_identity_id string + + param outputs_managed_identity_client_id string + + param outputs_azure_container_apps_environment_id string + + resource api 'Microsoft.App/containerApps@2024-03-01' = { + name: 'api' + location: location + properties: { + configuration: { + activeRevisionsMode: 'Single' + } + environmentId: outputs_azure_container_apps_environment_id + template: { + containers: [ + { + image: 'myimage:latest' + name: 'api' + command: [ + '/bin/sh' + ] + args: [ + 'my' + 'args with space' + ] + env: [ + { + name: 'AZURE_CLIENT_ID' + value: outputs_managed_identity_client_id + } + ] + } + ] + scale: { + minReplicas: 1 + } + } + } + identity: { + type: 'UserAssigned' + userAssignedIdentities: { + '${outputs_azure_container_registry_managed_identity_id}': { } + } + } + } + """; + + output.WriteLine(bicep); + Assert.Equal(expectedBicep, bicep); + } + [Fact] public async Task ProjectWithManyReferenceTypes() {