github.com/YousefHaggyHeroku/pack@v1.5.5/internal/registry/github.go (about)

     1  package registry
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"net/url"
     7  	"os/exec"
     8  	"strings"
     9  	"text/template"
    10  
    11  	"github.com/pkg/errors"
    12  
    13  	"github.com/YousefHaggyHeroku/pack/internal/style"
    14  )
    15  
    16  type GithubIssue struct {
    17  	Title string
    18  	Body  string
    19  }
    20  
    21  func CreateGithubIssue(b Buildpack) (GithubIssue, error) {
    22  	titleTemplate, err := template.New("buildpack").Parse(GithubIssueTitleTemplate)
    23  	if err != nil {
    24  		return GithubIssue{}, err
    25  	}
    26  
    27  	bodyTemplate, err := template.New("buildpack").Parse(GithubIssueBodyTemplate)
    28  	if err != nil {
    29  		return GithubIssue{}, err
    30  	}
    31  
    32  	var title bytes.Buffer
    33  	err = titleTemplate.Execute(&title, b)
    34  	if err != nil {
    35  		return GithubIssue{}, err
    36  	}
    37  
    38  	var body bytes.Buffer
    39  	err = bodyTemplate.Execute(&body, b)
    40  	if err != nil {
    41  		return GithubIssue{}, err
    42  	}
    43  
    44  	return GithubIssue{
    45  		title.String(),
    46  		body.String(),
    47  	}, nil
    48  }
    49  
    50  func CreateBrowserCmd(browserURL, os string) (*exec.Cmd, error) {
    51  	_, err := url.ParseRequestURI(browserURL)
    52  	if err != nil {
    53  		return nil, errors.Wrapf(err, "invalid URL %s", style.Symbol(browserURL))
    54  	}
    55  
    56  	switch os {
    57  	case "linux":
    58  		return exec.Command("xdg-open", browserURL), nil
    59  	case "windows":
    60  		return exec.Command("rundll32", "url.dll,FileProtocolHandler", browserURL), nil
    61  	case "darwin":
    62  		return exec.Command("open", browserURL), nil
    63  	default:
    64  		return nil, fmt.Errorf("unsupported platform %s", style.Symbol(os))
    65  	}
    66  }
    67  
    68  func GetIssueURL(githubURL string) (*url.URL, error) {
    69  	if githubURL == "" {
    70  		return nil, errors.New("missing github URL")
    71  	}
    72  	return url.Parse(fmt.Sprintf("%s/issues/new", strings.TrimSuffix(githubURL, "/")))
    73  }