github.com/YousefHaggyHeroku/pack@v1.5.5/internal/cache/image_cache.go (about) 1 package cache 2 3 import ( 4 "context" 5 "crypto/sha256" 6 "fmt" 7 8 "github.com/docker/docker/api/types" 9 "github.com/docker/docker/client" 10 "github.com/google/go-containerregistry/pkg/name" 11 ) 12 13 type ImageCache struct { 14 docker client.CommonAPIClient 15 image string 16 } 17 18 func NewImageCache(imageRef name.Reference, dockerClient client.CommonAPIClient) *ImageCache { 19 sum := sha256.Sum256([]byte(imageRef.Name())) 20 return &ImageCache{ 21 image: fmt.Sprintf("pack-cache-%x", sum[:6]), 22 docker: dockerClient, 23 } 24 } 25 26 func (c *ImageCache) Name() string { 27 return c.image 28 } 29 30 func (c *ImageCache) Clear(ctx context.Context) error { 31 _, err := c.docker.ImageRemove(ctx, c.Name(), types.ImageRemoveOptions{ 32 Force: true, 33 }) 34 if err != nil && !client.IsErrNotFound(err) { 35 return err 36 } 37 return nil 38 }