pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/usage/update/update.go (about) 1 package update 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "os" 12 "time" 13 14 "pkg.re/essentialkaos/ek.v12/req" 15 ) 16 17 // ////////////////////////////////////////////////////////////////////////////////// // 18 19 // ReleaseInfo contains info about the latest version of application 20 type ReleaseInfo struct { 21 Version string `json:"version"` 22 Date time.Time `json:"date"` 23 } 24 25 // ////////////////////////////////////////////////////////////////////////////////// // 26 27 // UpdateChecker checks new releases on custom storage 28 func UpdateChecker(app, version, data string) (string, time.Time, bool) { 29 if version == "" || data == "" || !isUpdateCheckRequired() { 30 return "", time.Time{}, false 31 } 32 33 release := getLastReleaseInfo(app, version, data) 34 35 if release == nil { 36 return "", time.Time{}, false 37 } 38 39 return release.Version, release.Date, release.Version != version 40 } 41 42 // ////////////////////////////////////////////////////////////////////////////////// // 43 44 // getLastReleaseInfo fetches info about the latest version 45 func getLastReleaseInfo(app, version, storage string) *ReleaseInfo { 46 engine := req.Engine{} 47 48 engine.SetDialTimeout(3) 49 engine.SetRequestTimeout(3) 50 engine.SetUserAgent(app, version, "go.ek") 51 52 response, err := engine.Get(req.Request{ 53 URL: storage + "/latest.json", 54 Accept: req.CONTENT_TYPE_JSON, 55 AutoDiscard: true, 56 }) 57 58 if err != nil || response.StatusCode != 200 { 59 return nil 60 } 61 62 release := &ReleaseInfo{} 63 err = response.JSON(release) 64 65 if err != nil { 66 return nil 67 } 68 69 return release 70 } 71 72 // isUpdateCheckRequired checks if update check is required 73 func isUpdateCheckRequired() bool { 74 return !(os.Getenv("CI") == "true" && os.Getenv("EK_TEST_PORT") == "") 75 }