@@ -7,14 +7,13 @@ import (
77
88 "github.com/github/gh-cli/api"
99 "github.com/hashicorp/go-version"
10- "github.com/mitchellh/go-homedir"
1110 "gopkg.in/yaml.v3"
1211)
1312
1413// ReleaseInfo stores information about a release
1514type ReleaseInfo struct {
16- Version string
17- URL string
15+ Version string `json:"tag_name"`
16+ URL string `json:"html_url"`
1817}
1918
2019type StateEntry struct {
@@ -23,21 +22,22 @@ type StateEntry struct {
2322}
2423
2524// CheckForUpdate checks whether this software has had a newer relase on GitHub
26- func CheckForUpdate (client * api.Client , repo , currentVersion string ) (* ReleaseInfo , error ) {
27- latestRelease , err := getLatestReleaseInfo (client , repo , currentVersion )
25+ func CheckForUpdate (client * api.Client , stateFilePath , repo , currentVersion string ) (* ReleaseInfo , error ) {
26+ latestRelease , err := getLatestReleaseInfo (client , stateFilePath , repo , currentVersion )
2827 if err != nil {
2928 return nil , err
3029 }
3130
31+ fmt .Printf ("🌭 %+v -> %+v\n " , latestRelease .Version , currentVersion )
3232 if versionGreaterThan (latestRelease .Version , currentVersion ) {
3333 return latestRelease , nil
3434 }
3535
3636 return nil , nil
3737}
3838
39- func getLatestReleaseInfo (client * api.Client , repo , currentVersion string ) (* ReleaseInfo , error ) {
40- stateEntry , err := getStateEntry ()
39+ func getLatestReleaseInfo (client * api.Client , stateFilePath , repo , currentVersion string ) (* ReleaseInfo , error ) {
40+ stateEntry , err := getStateEntry (stateFilePath )
4141 if err != nil {
4242 return nil , err
4343 }
@@ -52,26 +52,23 @@ func getLatestReleaseInfo(client *api.Client, repo, currentVersion string) (*Rel
5252 if err != nil {
5353 return nil , err
5454 }
55+ fmt .Printf ("🌭 latestRelease: %+v\n " , latestRelease )
5556
56- err = setStateEntry (time .Now (), latestRelease )
57+ err = setStateEntry (stateFilePath , time .Now (), latestRelease )
5758 if err != nil {
5859 return nil , err
5960 }
6061
6162 return & latestRelease , nil
6263}
6364
64- func stateFileName () string {
65- f , _ := homedir .Expand ("~/.config/gh/state.yml" )
66- return f
67- }
68-
69- func getStateEntry () (* StateEntry , error ) {
70- f := stateFileName ()
71- content , err := ioutil .ReadFile (f )
65+ func getStateEntry (stateFilePath string ) (* StateEntry , error ) {
66+ content , err := ioutil .ReadFile (stateFilePath )
7267 if err != nil {
68+ // State files doesn't exist, so create one with default values.
69+ lastWeek := time .Now ().Add (- time .Hour * 24 * 7 )
7370 data := StateEntry {
74- CheckedForUpdateAt : time . Now () ,
71+ CheckedForUpdateAt : lastWeek ,
7572 LatestRelease : ReleaseInfo {
7673 Version : "v0.0.0" ,
7774 URL : "<?>" ,
@@ -81,7 +78,7 @@ func getStateEntry() (*StateEntry, error) {
8178 if err != nil {
8279 return nil , err
8380 }
84- ioutil .WriteFile (f , content , 0600 )
81+ ioutil .WriteFile (stateFilePath , content , 0600 )
8582 }
8683
8784 var stateEntry StateEntry
@@ -93,7 +90,7 @@ func getStateEntry() (*StateEntry, error) {
9390 return & stateEntry , nil
9491}
9592
96- func setStateEntry (t time.Time , r ReleaseInfo ) error {
93+ func setStateEntry (stateFilePath string , t time.Time , r ReleaseInfo ) error {
9794 data := StateEntry {
9895 CheckedForUpdateAt : t ,
9996 LatestRelease : r ,
@@ -102,7 +99,7 @@ func setStateEntry(t time.Time, r ReleaseInfo) error {
10299 if err != nil {
103100 return err
104101 }
105- ioutil .WriteFile (stateFileName () , content , 0600 )
102+ ioutil .WriteFile (stateFilePath , content , 0600 )
106103
107104 return nil
108105}
0 commit comments