@@ -851,7 +851,14 @@ func (phase *BuildPhase) findAndFetchStageFromSecondaryStagesStorage(ctx context
851
851
stg .SetStageImage (i )
852
852
853
853
// The stage digest remains the same, but the content digest may differ (e.g., the content digest of git and some user stages depends on the git commit).
854
- stg .SetContentDigest (stageDescCopy .Info .Labels [imagePkg .WerfStageContentDigestLabel ])
854
+ contentDigest , exist := stageDescCopy .Info .Labels [imagePkg .WerfStageContentDigestLabel ]
855
+ if exist {
856
+ stg .SetContentDigest (contentDigest )
857
+ } else if stg .Name () == stage .ImageSpec { // The content digest tag might be missing for the imageSpec stage (removed by the user).
858
+ stg .SetContentDigest (stageDescCopy .Info .GetDigest ())
859
+ } else {
860
+ panic (fmt .Sprintf ("expected stage %q content digest label to be set!" , stg .Name ()))
861
+ }
855
862
856
863
logboek .Context (ctx ).Default ().LogFHighlight ("Use previously built image for %s\n " , stg .LogDetailedName ())
857
864
container_backend .LogImageInfo (ctx , stg .GetStageImage ().Image , phase .getPrevNonEmptyStageImageSize (), img .ShouldLogPlatform ())
@@ -969,7 +976,14 @@ func (phase *BuildPhase) calculateStage(ctx context.Context, img *image.Image, s
969
976
foundSuitableStage = true
970
977
971
978
// The stage digest remains the same, but the content digest may differ (e.g., the content digest of git and some user stages depends on the git commit).
972
- stageContentSig = stageDesc .Info .Labels [imagePkg .WerfStageContentDigestLabel ]
979
+ contentDigest , exist := stageDesc .Info .Labels [imagePkg .WerfStageContentDigestLabel ]
980
+ if exist {
981
+ stageContentSig = contentDigest
982
+ } else if stg .Name () == stage .ImageSpec { // The content digest tag might be missing for the imageSpec stage (removed by the user).
983
+ stageContentSig = stageDesc .Info .GetDigest ()
984
+ } else {
985
+ panic (fmt .Sprintf ("expected stage %q content digest label to be set!" , stg .Name ()))
986
+ }
973
987
} else {
974
988
stageContentSig , err = calculateDigest (ctx , fmt .Sprintf ("%s-content" , stg .Name ()), "" , stg , phase .Conveyor , calculateDigestOptions {TargetPlatform : img .TargetPlatform })
975
989
if err != nil {
@@ -1167,8 +1181,15 @@ func (phase *BuildPhase) atomicBuildStageImage(ctx context.Context, img *image.I
1167
1181
i .Image .SetStageDesc (stageDesc )
1168
1182
stg .SetStageImage (i )
1169
1183
1170
- // The stage digest is equal but stage content digest might be different.
1171
- stg .SetContentDigest (stageDesc .Info .Labels [imagePkg .WerfStageContentDigestLabel ])
1184
+ // The stage digest remains the same, but the content digest may differ (e.g., the content digest of git and some user stages depends on the git commit).
1185
+ contentDigest , exist := stageDesc .Info .Labels [imagePkg .WerfStageContentDigestLabel ]
1186
+ if exist {
1187
+ stg .SetContentDigest (contentDigest )
1188
+ } else if stg .Name () == stage .ImageSpec { // The content digest tag might be missing for the imageSpec stage (removed by the user).
1189
+ stg .SetContentDigest (stageDesc .Info .GetDigest ())
1190
+ } else {
1191
+ panic (fmt .Sprintf ("expected stage %q content digest label to be set!" , stg .Name ()))
1192
+ }
1172
1193
1173
1194
return nil
1174
1195
}
0 commit comments