@@ -43,45 +43,88 @@ var (
4343)
4444
4545// MaybePrintUpdateTextFromGithub prints update text if needed, from github
46- func MaybePrintUpdateTextFromGithub () bool {
47- return MaybePrintUpdateText (GithubMinikubeReleasesURL , lastUpdateCheckFilePath )
46+ func MaybePrintUpdateTextFromGithub () {
47+ maybePrintUpdateText (GithubMinikubeReleasesURL , GithubMinikubeBetaReleasesURL , lastUpdateCheckFilePath )
4848}
4949
50- // MaybePrintUpdateText prints update text, returns a bool if life is good.
51- func MaybePrintUpdateText (url string , lastUpdatePath string ) bool {
50+ func maybePrintUpdateText (latestReleasesURL string , betaReleasesURL string , lastUpdatePath string ) {
5251 if ! shouldCheckURLVersion (lastUpdatePath ) {
53- return false
52+ return
5453 }
55- latestVersion , err := getLatestVersionFromURL ( url )
54+ latestVersion , err := latestVersionFromURL ( latestReleasesURL )
5655 if err != nil {
5756 klog .Warning (err )
58- return true
57+ return
5958 }
6059 localVersion , err := version .GetSemverVersion ()
6160 if err != nil {
6261 klog .Warning (err )
63- return true
64- }
65- if localVersion .Compare (latestVersion ) < 0 {
66- if err := writeTimeToFile (lastUpdateCheckFilePath , time .Now ().UTC ()); err != nil {
67- klog .Errorf ("write time failed: %v" , err )
68- }
69- url := "https://github.com/kubernetes/minikube/releases/tag/v" + latestVersion .String ()
70- out .Styled (style .Celebrate , `minikube {{.version}} is available! Download it: {{.url}}` , out.V {"version" : latestVersion , "url" : url })
71- out .Styled (style .Tip , "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n " )
72- return true
73- }
74- return false
62+ return
63+ }
64+ if maybePrintBetaUpdateText (betaReleasesURL , localVersion , latestVersion , lastUpdatePath ) {
65+ return
66+ }
67+ if localVersion .Compare (latestVersion ) >= 0 {
68+ return
69+ }
70+ printUpdateText (latestVersion )
71+ }
72+
73+ // maybePrintBetaUpdateText returns true if update text is printed
74+ func maybePrintBetaUpdateText (betaReleasesURL string , localVersion semver.Version , latestFullVersion semver.Version , lastUpdatePath string ) bool {
75+ if ! shouldCheckURLBetaVersion (lastUpdatePath ) {
76+ return false
77+ }
78+ latestBetaVersion , err := latestVersionFromURL (betaReleasesURL )
79+ if err != nil {
80+ klog .Warning (err )
81+ return false
82+ }
83+ if latestFullVersion .Compare (latestBetaVersion ) >= 0 {
84+ return false
85+ }
86+ if localVersion .Compare (latestBetaVersion ) >= 0 {
87+ return false
88+ }
89+ printBetaUpdateText (latestBetaVersion )
90+ return true
91+ }
92+
93+ func printUpdateTextCommon (version semver.Version ) {
94+ if err := writeTimeToFile (lastUpdateCheckFilePath , time .Now ().UTC ()); err != nil {
95+ klog .Errorf ("write time failed: %v" , err )
96+ }
97+ url := "https://github.com/kubernetes/minikube/releases/tag/v" + version .String ()
98+ out .Styled (style .Celebrate , `minikube {{.version}} is available! Download it: {{.url}}` , out.V {"version" : version , "url" : url })
99+ }
100+
101+ func printUpdateText (version semver.Version ) {
102+ printUpdateTextCommon (version )
103+ out .Styled (style .Tip , "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n " )
104+ }
105+
106+ func printBetaUpdateText (version semver.Version ) {
107+ printUpdateTextCommon (version )
108+ out .Styled (style .Tip , "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'" )
109+ out .Styled (style .Tip , "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n " )
75110}
76111
77112func shouldCheckURLVersion (filePath string ) bool {
78113 if ! viper .GetBool (config .WantUpdateNotification ) {
79114 return false
80115 }
81- lastUpdateTime := getTimeFromFileIfExists (filePath )
116+ lastUpdateTime := timeFromFileIfExists (filePath )
82117 return time .Since (lastUpdateTime ).Hours () >= viper .GetFloat64 (config .ReminderWaitPeriodInHours )
83118}
84119
120+ func shouldCheckURLBetaVersion (filePath string ) bool {
121+ if ! viper .GetBool (config .WantBetaUpdateNotification ) {
122+ return false
123+ }
124+
125+ return shouldCheckURLVersion (filePath )
126+ }
127+
85128// Release represents a release
86129type Release struct {
87130 Name string
@@ -112,16 +155,16 @@ func getJSON(url string, target *Releases) error {
112155 return json .NewDecoder (resp .Body ).Decode (target )
113156}
114157
115- func getLatestVersionFromURL (url string ) (semver.Version , error ) {
116- r , err := GetAllVersionsFromURL (url )
158+ var latestVersionFromURL = func (url string ) (semver.Version , error ) {
159+ r , err := AllVersionsFromURL (url )
117160 if err != nil {
118161 return semver.Version {}, err
119162 }
120163 return semver .Make (strings .TrimPrefix (r [0 ].Name , version .VersionPrefix ))
121164}
122165
123- // GetAllVersionsFromURL get all versions from a JSON URL
124- func GetAllVersionsFromURL (url string ) (Releases , error ) {
166+ // AllVersionsFromURL get all versions from a JSON URL
167+ func AllVersionsFromURL (url string ) (Releases , error ) {
125168 var releases Releases
126169 klog .Info ("Checking for updates..." )
127170 if err := getJSON (url , & releases ); err != nil {
@@ -141,7 +184,7 @@ func writeTimeToFile(path string, inputTime time.Time) error {
141184 return nil
142185}
143186
144- func getTimeFromFileIfExists (path string ) time.Time {
187+ func timeFromFileIfExists (path string ) time.Time {
145188 lastUpdateCheckTime , err := ioutil .ReadFile (path )
146189 if err != nil {
147190 return time.Time {}
0 commit comments