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