Skip to content

Commit 262412a

Browse files
fix(build): werf does not reset stages storage cache when import source image not found
Signed-off-by: Alexey Igrychev <alexey.igrychev@flant.com>
1 parent f1747f3 commit 262412a

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

pkg/build/conveyor.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -714,11 +714,23 @@ func (c *Conveyor) getImageStage(imageName, stageName string) stage.Interface {
714714
if stg := c.GetImage(imageName).GetStage(stage.StageName(stageName)); stg != nil {
715715
return stg
716716
} else {
717-
// FIXME: find first existing stage after specified unexisting
718-
return c.GetImage(imageName).GetLastNonEmptyStage()
717+
return c.getLastNonEmptyImageStage(imageName)
719718
}
720719
}
721720

721+
func (c *Conveyor) getLastNonEmptyImageStage(imageName string) stage.Interface {
722+
// FIXME: find first existing stage after specified unexisting
723+
return c.GetImage(imageName).GetLastNonEmptyStage()
724+
}
725+
726+
func (c *Conveyor) FetchImageStage(ctx context.Context, imageName, stageName string) error {
727+
return c.StorageManager.FetchStage(ctx, c.ContainerRuntime, c.getImageStage(imageName, stageName))
728+
}
729+
730+
func (c *Conveyor) FetchLastNonEmptyImageStage(ctx context.Context, imageName string) error {
731+
return c.StorageManager.FetchStage(ctx, c.ContainerRuntime, c.getLastNonEmptyImageStage(imageName))
732+
}
733+
722734
func (c *Conveyor) GetImageNameForLastImageStage(imageName string) string {
723735
return c.GetImage(imageName).GetLastNonEmptyStage().GetImage().Name()
724736
}

pkg/build/stage/conveyor.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ type Conveyor interface {
1616
GetImageStageContentDigest(imageName, stageName string) string
1717
GetImageContentDigest(imageName string) string
1818

19+
FetchImageStage(ctx context.Context, imageName, stageName string) error
20+
FetchLastNonEmptyImageStage(ctx context.Context, imageName string) error
1921
GetImageNameForLastImageStage(imageName string) string
2022
GetImageIDForLastImageStage(imageName string) string
2123

pkg/build/stage/dependencies.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ func (s *DependenciesStage) getImportSourceChecksum(ctx context.Context, c Conve
183183
}
184184

185185
func (s *DependenciesStage) generateImportChecksum(ctx context.Context, c Conveyor, importElm *config.Import) (string, error) {
186+
if err := fetchSourceImageDockerImage(ctx, c, importElm); err != nil {
187+
return "", fmt.Errorf("unable to fetch source image: %w", err)
188+
}
189+
186190
sourceImageDockerImageName := getSourceImageDockerImageName(c, importElm)
187191
importSourceID := getImportSourceID(c, importElm)
188192

@@ -323,6 +327,15 @@ func getImportSourceID(c Conveyor, importElm *config.Import) string {
323327
)
324328
}
325329

330+
func fetchSourceImageDockerImage(ctx context.Context, c Conveyor, importElm *config.Import) error {
331+
sourceImageName := getSourceImageName(importElm)
332+
if importElm.Stage == "" {
333+
return c.FetchLastNonEmptyImageStage(ctx, sourceImageName)
334+
} else {
335+
return c.FetchImageStage(ctx, sourceImageName, importElm.Stage)
336+
}
337+
}
338+
326339
func getSourceImageDockerImageName(c Conveyor, importElm *config.Import) string {
327340
sourceImageName := getSourceImageName(importElm)
328341

0 commit comments

Comments
 (0)