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  }