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

     1  package client
     2  
     3  import (
     4  	"net/url"
     5  	"runtime"
     6  
     7  	"github.com/buildpacks/pack/internal/registry"
     8  )
     9  
    10  // YankBuildpackOptions is a configuration struct that controls the Yanking a buildpack
    11  // from the Buildpack Registry.
    12  type YankBuildpackOptions struct {
    13  	ID      string
    14  	Version string
    15  	Type    string
    16  	URL     string
    17  	Yank    bool
    18  }
    19  
    20  // YankBuildpack marks a buildpack on the Buildpack Registry as 'yanked'. This forbids future
    21  // builds from using it.
    22  func (c *Client) YankBuildpack(opts YankBuildpackOptions) error {
    23  	namespace, name, err := registry.ParseNamespaceName(opts.ID)
    24  	if err != nil {
    25  		return err
    26  	}
    27  	issueURL, err := registry.GetIssueURL(opts.URL)
    28  	if err != nil {
    29  		return err
    30  	}
    31  
    32  	buildpack := registry.Buildpack{
    33  		Namespace: namespace,
    34  		Name:      name,
    35  		Version:   opts.Version,
    36  		Yanked:    opts.Yank,
    37  	}
    38  
    39  	issue, err := registry.CreateGithubIssue(buildpack)
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	params := url.Values{}
    45  	params.Add("title", issue.Title)
    46  	params.Add("body", issue.Body)
    47  	issueURL.RawQuery = params.Encode()
    48  
    49  	c.logger.Debugf("Open URL in browser: %s", issueURL)
    50  	cmd, err := registry.CreateBrowserCmd(issueURL.String(), runtime.GOOS)
    51  	if err != nil {
    52  		return err
    53  	}
    54  
    55  	return cmd.Start()
    56  }