1
0
mirror of https://github.com/beego/bee.git synced 2025-06-11 13:30:39 +00:00

Automatic update bee every day

Backup only when content changes
Fix the version
This commit is contained in:
wangle
2020-08-01 17:12:09 +08:00
parent c562cedf96
commit a23c76305a
6 changed files with 148 additions and 30 deletions

View File

@ -24,6 +24,7 @@ import (
"path/filepath"
"regexp"
"runtime"
"strconv"
"strings"
"text/template"
"time"
@ -31,6 +32,7 @@ import (
beeLogger "github.com/beego/bee/logger"
"github.com/beego/bee/logger/colors"
"github.com/beego/bee/internal/pkg/system"
)
func GetBeeWorkPath() string {
@ -463,3 +465,65 @@ func IsGOMODULE() bool {
}
return false
}
func UpdateBee() {
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"
timeNow := time.Now().Unix()
var timeOld int64
if IsExist(fp) {
oldContent, err := ioutil.ReadFile(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)
}
}
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)
}
}
}
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:
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`")
}
}