github.com/kamiazya/dot-github@v1.3.0/app.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "github.com/blang/semver" 6 "github.com/rhysd/go-github-selfupdate/selfupdate" 7 "io" 8 ) 9 10 const version = "1.3.0" 11 12 type App struct { 13 stdout io.Writer 14 stderr io.Writer 15 } 16 17 func (a *App) selfUpdate() int { 18 v := semver.MustParse(version) 19 latest, err := selfupdate.UpdateSelf(v, "rhysd/dot-github") 20 if err != nil { 21 fmt.Fprintln(a.stderr, err) 22 return 1 23 } 24 25 if v.Equals(latest.Version) { 26 fmt.Println("Current binary is the latest version", v) 27 } else { 28 fmt.Println("Successfully updated to version", latest.Version) 29 fmt.Println("Release note:\n", latest.ReleaseNotes) 30 } 31 return 0 32 } 33 34 func (a *App) Run() int { 35 parsed, err := ParseCmdArgs(a.stderr) 36 if err != nil { 37 return 1 38 } 39 if parsed.Help { 40 parsed.ShowUsage(a.stderr) 41 return 0 42 } else if parsed.Version { 43 fmt.Fprintln(a.stdout, version) 44 return 0 45 } else if parsed.SelfUpdate { 46 return a.selfUpdate() 47 } 48 49 g := NewGenerator( 50 TemplateDir(), 51 NewRepositoryFromURL(GitHubRemoteURL("origin")), 52 ) 53 if parsed.IssueOnly { 54 g.GenerateIssueTemplate() 55 } 56 if parsed.PROnly { 57 g.GeneratePRTemplate() 58 } 59 if parsed.ContributingOnly { 60 g.GenerateContributingTemplate() 61 } 62 if !parsed.IssueOnly && !parsed.PROnly && !parsed.ContributingOnly { 63 g.GenerateAllTemplates() 64 } 65 if !g.FileCreated { 66 fmt.Fprintln(a.stdout, "No file created. Add template files to "+g.templateDir) 67 } 68 return 0 69 }