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  }