github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/client/manifest_rm.go (about)

     1  package client
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	gccrName "github.com/google/go-containerregistry/pkg/name"
     8  )
     9  
    10  // RemoveManifest implements commands.PackClient.
    11  func (c *Client) RemoveManifest(name string, images []string) error {
    12  	var allErrors error
    13  
    14  	imgIndex, err := c.indexFactory.LoadIndex(name)
    15  	if err != nil {
    16  		return err
    17  	}
    18  
    19  	for _, image := range images {
    20  		ref, err := gccrName.NewDigest(image, gccrName.WeakValidation, gccrName.Insecure)
    21  		if err != nil {
    22  			allErrors = errors.Join(allErrors, fmt.Errorf("invalid instance '%s': %w", image, err))
    23  		}
    24  
    25  		if err = imgIndex.RemoveManifest(ref); err != nil {
    26  			allErrors = errors.Join(allErrors, err)
    27  		}
    28  
    29  		if err = imgIndex.SaveDir(); err != nil {
    30  			allErrors = errors.Join(allErrors, err)
    31  		}
    32  	}
    33  
    34  	if allErrors == nil {
    35  		c.logger.Infof("Successfully removed image(s) from index: '%s'", name)
    36  	}
    37  
    38  	return allErrors
    39  }