|
|
|
@ -30,9 +30,12 @@ import ( |
|
|
|
|
"time" |
|
|
|
|
"unicode" |
|
|
|
|
|
|
|
|
|
"github.com/beego/bee/config" |
|
|
|
|
"github.com/beego/bee/internal/pkg/git" |
|
|
|
|
|
|
|
|
|
"github.com/beego/bee/internal/pkg/system" |
|
|
|
|
beeLogger "github.com/beego/bee/logger" |
|
|
|
|
"github.com/beego/bee/logger/colors" |
|
|
|
|
"github.com/beego/bee/internal/pkg/system" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func GetBeeWorkPath() string { |
|
|
|
@ -466,64 +469,70 @@ func IsGOMODULE() bool { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func UpdateBee() { |
|
|
|
|
func NoticeUpdateBee() { |
|
|
|
|
cmd := exec.Command("go", "version") |
|
|
|
|
cmd.Output() |
|
|
|
|
if cmd.Process == nil || cmd.Process.Pid <= 0 { |
|
|
|
|
beeLogger.Log.Warn("There is no go environment") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
path := system.BeegoHome |
|
|
|
|
fp := path + "/.updateBee" |
|
|
|
|
beeHome := system.BeegoHome |
|
|
|
|
fp := beeHome + "/.noticeUpdateBee" |
|
|
|
|
timeNow := time.Now().Unix() |
|
|
|
|
var timeOld int64 |
|
|
|
|
if IsExist(fp) { |
|
|
|
|
oldContent, err := ioutil.ReadFile(fp) |
|
|
|
|
if !IsExist(fp) { |
|
|
|
|
f, err := os.Create(fp) |
|
|
|
|
if err != nil { |
|
|
|
|
beeLogger.Log.Warnf("read file err: %s", err) |
|
|
|
|
} |
|
|
|
|
timeOld, _ = strconv.ParseInt(string(oldContent), 10, 64) |
|
|
|
|
} else { |
|
|
|
|
if cf, err := os.OpenFile(fp, os.O_CREATE, 0644); err == nil { |
|
|
|
|
cf.Close() |
|
|
|
|
} else { |
|
|
|
|
beeLogger.Log.Warnf("Create file err: %s", err) |
|
|
|
|
beeLogger.Log.Warnf("Create noticeUpdateBee file err: %s", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
defer f.Close() |
|
|
|
|
} |
|
|
|
|
if timeNow-timeOld > 24*60*60 { |
|
|
|
|
if w, err := os.OpenFile(fp, os.O_WRONLY|os.O_TRUNC, 0644); err == nil { |
|
|
|
|
defer w.Close() |
|
|
|
|
timeNowStr := strconv.FormatInt(timeNow, 10) |
|
|
|
|
if _, err := w.WriteString(timeNowStr); err != nil { |
|
|
|
|
beeLogger.Log.Warnf("Update file err: %s", err) |
|
|
|
|
} |
|
|
|
|
beeLogger.Log.Info("Updating bee") |
|
|
|
|
goGetBee() |
|
|
|
|
} else { |
|
|
|
|
beeLogger.Log.Warnf("Update Bee file err: %s", err) |
|
|
|
|
} |
|
|
|
|
oldContent, err := ioutil.ReadFile(fp) |
|
|
|
|
if err != nil { |
|
|
|
|
beeLogger.Log.Warnf("Read noticeUpdateBee file err: %s", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
timeOld, _ = strconv.ParseInt(string(oldContent), 10, 64) |
|
|
|
|
if timeNow-timeOld < 24*60*60 { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
w, err := os.OpenFile(fp, os.O_WRONLY|os.O_TRUNC, 0644) |
|
|
|
|
if err != nil { |
|
|
|
|
beeLogger.Log.Warnf("Open noticeUpdateBee file err: %s", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
defer w.Close() |
|
|
|
|
timeNowStr := strconv.FormatInt(timeNow, 10) |
|
|
|
|
if _, err := w.WriteString(timeNowStr); err != nil { |
|
|
|
|
beeLogger.Log.Warnf("Update noticeUpdateBee file err: %s", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
newVersion() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func goGetBee() { |
|
|
|
|
beePath := "github.com/beego/bee" |
|
|
|
|
done := make(chan int, 1) |
|
|
|
|
go func() { |
|
|
|
|
cmd := exec.Command("go", "get", "-u", beePath) |
|
|
|
|
output, err := cmd.Output() |
|
|
|
|
if err != nil { |
|
|
|
|
beeLogger.Log.Warnf("Update Bee err: %s", err) |
|
|
|
|
beeLogger.Log.Warnf("Update Bee err: %s", output) |
|
|
|
|
} |
|
|
|
|
beeLogger.Log.Infof("Bee was updated successfully %s", output) |
|
|
|
|
done <- 1 |
|
|
|
|
}() |
|
|
|
|
// wait 30 second
|
|
|
|
|
select { |
|
|
|
|
case <-done: |
|
|
|
|
func newVersion() { |
|
|
|
|
workPath := GetBeeWorkPath() |
|
|
|
|
repo, err := git.OpenRepository(workPath) |
|
|
|
|
if err != nil { |
|
|
|
|
beeLogger.Log.Fatalf("Fail to open repository, err: %s", err) |
|
|
|
|
return |
|
|
|
|
case <-time.After(time.Second * 30): |
|
|
|
|
beeLogger.Log.Warn("Update Bee timeout! The next automatic update will be in 24 hours.") |
|
|
|
|
beeLogger.Log.Warn("Or you can update it yourself with `go get -u github.com/beego/bee`") |
|
|
|
|
} |
|
|
|
|
tags, err := repo.GetTags() |
|
|
|
|
if err != nil { |
|
|
|
|
beeLogger.Log.Fatalf("Fail to get tags, err: %s", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
// v1.12.0 | V_1.12.0 => 1.12.0
|
|
|
|
|
re, _ := regexp.Compile(`[0-9.]+`) |
|
|
|
|
var versionLast string |
|
|
|
|
versionList := re.FindStringSubmatch(tags[0]) |
|
|
|
|
if len(versionList) >= 1 { |
|
|
|
|
versionLast = versionList[0] |
|
|
|
|
} |
|
|
|
|
versionNow := config.Version |
|
|
|
|
if versionNow != versionLast { |
|
|
|
|
beeLogger.Log.Warnf("Update available %s ==> %s", versionNow, versionLast) |
|
|
|
|
beeLogger.Log.Warn("Run `bee update` to update") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|