From 39b26137cfca66eed8559407ca4bf8a1c863df63 Mon Sep 17 00:00:00 2001 From: Eric Erhardt Date: Fri, 3 Oct 2025 17:58:25 -0500 Subject: [PATCH] Ensure OutputPath is created in ResourceContainerImageBuilder When using docker/podman, and specifying an output path, building a docker image will fail if the directory isn't created. Ensure it is created. --- .../Publishing/ResourceContainerImageBuilder.cs | 6 ++++++ .../Publishing/ResourceContainerImageBuilderTests.cs | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Aspire.Hosting/Publishing/ResourceContainerImageBuilder.cs b/src/Aspire.Hosting/Publishing/ResourceContainerImageBuilder.cs index 6ace6124398..a845a8a3634 100644 --- a/src/Aspire.Hosting/Publishing/ResourceContainerImageBuilder.cs +++ b/src/Aspire.Hosting/Publishing/ResourceContainerImageBuilder.cs @@ -358,6 +358,12 @@ private async Task BuildContainerImageFromDockerfileAsync(string resourceName, D resolvedBuildSecrets[buildSecret.Key] = await ResolveValue(buildSecret.Value, cancellationToken).ConfigureAwait(false); } + // ensure outputPath is created if specified since docker/podman won't create it for us + if (options?.OutputPath is { } outputPath) + { + Directory.CreateDirectory(outputPath); + } + if (publishingTask is not null) { await using (publishingTask.ConfigureAwait(false)) diff --git a/tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageBuilderTests.cs b/tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageBuilderTests.cs index fcd7864f004..7dd71be49b0 100644 --- a/tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageBuilderTests.cs +++ b/tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageBuilderTests.cs @@ -240,11 +240,11 @@ public async Task CanBuildImageFromDockerfileResource_WithAllOptionsSet() using var app = builder.Build(); - var tempOutputPath = Path.GetTempPath(); + using var tempDir = new TempDirectory(); var options = new ContainerBuildOptions { ImageFormat = ContainerImageFormat.Oci, - OutputPath = tempOutputPath, + OutputPath = Path.Combine(tempDir.Path, "NewFolder"), // tests that the folder is created if it doesn't exist TargetPlatform = ContainerTargetPlatform.LinuxAmd64 };