@@ -19,6 +19,7 @@ import {
1919 InstanceType ,
2020 pushBuiltContainerImage ,
2121 pushCommand ,
22+ pushImageIfChanged ,
2223 SchedulingPolicy ,
2324} from "../index" ;
2425import type { BuiltContainerImage , BuiltImage } from "../src/build" ;
@@ -314,6 +315,64 @@ describe("buildCommand", () => {
314315 ] ) ;
315316 } ) ;
316317
318+ it ( "preserves a reusable Build Output image tag across uploads" , async ( {
319+ expect,
320+ } ) => {
321+ const digest =
322+ "registry.cloudflare.com/some-account-id/test-app@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ;
323+ inspectOutputs = [
324+ "[]" ,
325+ "53387881 2" ,
326+ `["${ digest } "]` ,
327+ `["${ digest } "]` ,
328+ "53387881 2" ,
329+ ] ;
330+ vi . mocked ( execFileSync ) . mockReturnValue (
331+ '{"Descriptor":{"digest":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}'
332+ ) ;
333+
334+ for ( let attempt = 0 ; attempt < 2 ; attempt ++ ) {
335+ await expect (
336+ pushImageIfChanged ( {
337+ pathToDocker : "docker" ,
338+ sourceTag : "test-app:tag" ,
339+ targetTag : "test-app:tag" ,
340+ accountId : "some-account-id" ,
341+ containerConfig : dockerfileContainer ,
342+ cleanupSourceTag : false ,
343+ } )
344+ ) . resolves . toEqual ( {
345+ remoteDigest : `${ getCloudflareContainerRegistry ( ) } /some-account-id/test-app@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` ,
346+ } ) ;
347+ }
348+
349+ expectNoSpawnWith ( [ "image" , "rm" , "test-app:tag" ] ) ;
350+ expect (
351+ vi . mocked ( spawn ) . mock . calls . filter ( ( [ , args ] ) => args ?. [ 0 ] === "push" )
352+ ) . toHaveLength ( 1 ) ;
353+ } ) ;
354+
355+ it ( "validates a local image against its container disk limit" , async ( {
356+ expect,
357+ } ) => {
358+ inspectOutputs = [ "[]" , "2200000000 2" ] ;
359+
360+ await expect (
361+ pushImageIfChanged ( {
362+ pathToDocker : "docker" ,
363+ sourceTag : "test-app:tag" ,
364+ targetTag : "test-app:tag" ,
365+ accountId : "some-account-id" ,
366+ containerConfig : dockerfileContainer ,
367+ cleanupSourceTag : false ,
368+ } )
369+ ) . rejects . toThrow ( / I m a g e t o o l a r g e / ) ;
370+ expectNoSpawnWith ( [
371+ "push" ,
372+ `${ getCloudflareContainerRegistry ( ) } /some-account-id/test-app:tag` ,
373+ ] ) ;
374+ } ) ;
375+
317376 it ( "uses docker manifest inspect when pushed image inspect has no digest" , async ( {
318377 expect,
319378 } ) => {
0 commit comments