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 }