@@ -296,6 +296,72 @@ public async System.Threading.Tasks.Task CreateNewImage_RootlessBaseImage()
296296 Assert . Equal ( RootlessUser , imageBuilder . BaseImageConfig . GetUser ( ) ) ;
297297 }
298298
299+
300+ [ DockerAvailableFact ]
301+ public void CanOverrideContainerImageFormat ( )
302+ {
303+ DirectoryInfo newProjectDir = new ( GetTestDirectoryName ( ) ) ;
304+
305+ if ( newProjectDir . Exists )
306+ {
307+ newProjectDir . Delete ( recursive : true ) ;
308+ }
309+
310+ newProjectDir . Create ( ) ;
311+
312+ new DotnetNewCommand ( _testOutput , "console" , "-f" , ToolsetInfo . CurrentTargetFramework )
313+ . WithVirtualHive ( )
314+ . WithWorkingDirectory ( newProjectDir . FullName )
315+ . Execute ( )
316+ . Should ( ) . Pass ( ) ;
317+
318+ new DotnetCommand ( _testOutput , "build" , "--configuration" , "release" )
319+ . WithWorkingDirectory ( newProjectDir . FullName )
320+ . Execute ( )
321+ . Should ( ) . Pass ( ) ;
322+
323+ ParseContainerProperties pcp = new ( ) ;
324+ ( IBuildEngine buildEngine , List < string ? > errors ) = SetupBuildEngine ( ) ;
325+ pcp . BuildEngine = buildEngine ;
326+
327+ pcp . FullyQualifiedBaseImageName = "mcr.microsoft.com/dotnet/runtime:9.0" ;
328+ pcp . ContainerRegistry = "localhost:5010" ;
329+ pcp . ContainerRepository = "dotnet/testimage" ;
330+ pcp . ContainerImageTags = new [ ] { "5.0" , "latest" } ;
331+
332+ Assert . True ( pcp . Execute ( ) , FormatBuildMessages ( errors ) ) ;
333+ Assert . Equal ( "mcr.microsoft.com" , pcp . ParsedContainerRegistry ) ;
334+ Assert . Equal ( "dotnet/runtime" , pcp . ParsedContainerImage ) ;
335+ Assert . Equal ( "9.0" , pcp . ParsedContainerTag ) ;
336+
337+ Assert . Equal ( "dotnet/testimage" , pcp . NewContainerRepository ) ;
338+ pcp . NewContainerTags . Should ( ) . BeEquivalentTo ( new [ ] { "5.0" , "latest" } ) ;
339+
340+ CreateNewImage cni = new ( ) ;
341+ ( buildEngine , errors ) = SetupBuildEngine ( ) ;
342+ cni . BuildEngine = buildEngine ;
343+
344+ cni . BaseRegistry = pcp . ParsedContainerRegistry ;
345+ cni . BaseImageName = pcp . ParsedContainerImage ;
346+ cni . BaseImageTag = pcp . ParsedContainerTag ;
347+ cni . Repository = pcp . NewContainerRepository ;
348+ cni . OutputRegistry = "localhost:5010" ;
349+ cni . PublishDirectory = Path . Combine ( newProjectDir . FullName , "bin" , "release" , ToolsetInfo . CurrentTargetFramework ) ;
350+ cni . WorkingDirectory = "app/" ;
351+ cni . Entrypoint = new TaskItem [ ] { new ( newProjectDir . Name ) } ;
352+ cni . ImageTags = pcp . NewContainerTags ;
353+ cni . ContainerRuntimeIdentifier = "linux-x64" ;
354+ cni . RuntimeIdentifierGraphPath = ToolsetUtils . GetRuntimeGraphFilePath ( ) ;
355+
356+ cni . ImageFormat = KnownImageFormats . OCI . ToString ( ) ;
357+
358+ Assert . True ( cni . Execute ( ) , FormatBuildMessages ( errors ) ) ;
359+
360+ cni . GeneratedContainerMediaType . Should ( ) . Be ( SchemaTypes . OciManifestV1 ) ;
361+ newProjectDir . Delete ( true ) ;
362+ }
363+
364+
299365 private static ( IBuildEngine buildEngine , List < string ? > errors ) SetupBuildEngine ( )
300366 {
301367 List < string ? > errors = new ( ) ;
0 commit comments