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  }