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  }