@@ -585,7 +585,13 @@ func (phase *BuildPhase) calculateStage(ctx context.Context, img *image.Image, s
585585 return false , nil , err
586586 }
587587
588- stageDigest , err := calculateDigest (ctx , stage .GetLegacyCompatibleStageName (stg .Name ()), stageDependencies , phase .StagesIterator .PrevNonEmptyStage , phase .Conveyor )
588+ var opts calculateDigestOption
589+ if img .IsDockerfileImage && img .DockerfileImageConfig .Staged {
590+ if ! stg .HasPrevStage () {
591+ opts .BaseImage = img .GetBaseImageReference ()
592+ }
593+ }
594+ stageDigest , err := calculateDigest (ctx , stage .GetLegacyCompatibleStageName (stg .Name ()), stageDependencies , phase .StagesIterator .PrevNonEmptyStage , phase .Conveyor , opts )
589595 if err != nil {
590596 return false , nil , err
591597 }
@@ -614,7 +620,7 @@ func (phase *BuildPhase) calculateStage(ctx context.Context, img *image.Image, s
614620 }
615621 }
616622
617- stageContentSig , err := calculateDigest (ctx , fmt .Sprintf ("%s-content" , stg .Name ()), "" , stg , phase .Conveyor )
623+ stageContentSig , err := calculateDigest (ctx , fmt .Sprintf ("%s-content" , stg .Name ()), "" , stg , phase .Conveyor , calculateDigestOption {} )
618624 if err != nil {
619625 return false , phase .Conveyor .GetStageDigestMutex (stg .GetDigest ()).Unlock , fmt .Errorf ("unable to calculate stage %s content digest: %w" , stg .Name (), err )
620626 }
@@ -861,7 +867,11 @@ func introspectStage(ctx context.Context, s stage.Interface) error {
861867 })
862868}
863869
864- func calculateDigest (ctx context.Context , stageName , stageDependencies string , prevNonEmptyStage stage.Interface , conveyor * Conveyor ) (string , error ) {
870+ type calculateDigestOption struct {
871+ BaseImage string
872+ }
873+
874+ func calculateDigest (ctx context.Context , stageName , stageDependencies string , prevNonEmptyStage stage.Interface , conveyor * Conveyor , opts calculateDigestOption ) (string , error ) {
865875 checksumArgs := []string {imagePkg .BuildCacheVersion , stageName , stageDependencies }
866876 if prevNonEmptyStage != nil {
867877 prevStageDependencies , err := prevNonEmptyStage .GetNextStageDependencies (ctx , conveyor )
@@ -872,6 +882,10 @@ func calculateDigest(ctx context.Context, stageName, stageDependencies string, p
872882 checksumArgs = append (checksumArgs , prevNonEmptyStage .GetDigest (), prevStageDependencies )
873883 }
874884
885+ if opts .BaseImage != "" {
886+ checksumArgs = append (checksumArgs , opts .BaseImage )
887+ }
888+
875889 digest := util .Sha3_224Hash (checksumArgs ... )
876890
877891 blockMsg := fmt .Sprintf ("Stage %s digest %s" , stageName , digest )
@@ -883,6 +897,11 @@ func calculateDigest(ctx context.Context, stageName, stageDependencies string, p
883897 "prevNonEmptyStage digest" ,
884898 "prevNonEmptyStage dependencies for next stage" ,
885899 }
900+
901+ if opts .BaseImage != "" {
902+ checksumArgsNames = append (checksumArgsNames , "baseImage" )
903+ }
904+
886905 for ind , checksumArg := range checksumArgs {
887906 logboek .Context (ctx ).Debug ().LogF ("%s => %q\n " , checksumArgsNames [ind ], checksumArg )
888907 }
0 commit comments