github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/cache/image_cache.go (about) 1 package cache 2 3 import ( 4 "context" 5 6 "github.com/docker/docker/api/types/image" 7 "github.com/docker/docker/client" 8 "github.com/google/go-containerregistry/pkg/name" 9 ) 10 11 type ImageCache struct { 12 docker DockerClient 13 image string 14 } 15 16 type DockerClient interface { 17 ImageRemove(ctx context.Context, image string, options image.RemoveOptions) ([]image.DeleteResponse, error) 18 VolumeRemove(ctx context.Context, volumeID string, force bool) error 19 } 20 21 func NewImageCache(imageRef name.Reference, dockerClient DockerClient) *ImageCache { 22 return &ImageCache{ 23 image: imageRef.Name(), 24 docker: dockerClient, 25 } 26 } 27 28 func (c *ImageCache) Name() string { 29 return c.image 30 } 31 32 func (c *ImageCache) Clear(ctx context.Context) error { 33 _, err := c.docker.ImageRemove(ctx, c.Name(), image.RemoveOptions{ 34 Force: true, 35 }) 36 if err != nil && !client.IsErrNotFound(err) { 37 return err 38 } 39 return nil 40 } 41 42 func (c *ImageCache) Type() Type { 43 return Image 44 }