From a2a6b3d7440018d4e55c078e0ae2d78b18b8b9e4 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 10e419fdf03..9ad06259c2f 100644 --- a/tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageBuilderTests.cs +++ b/tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageBuilderTests.cs @@ -243,11 +243,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 };