diff --git a/cmd/update.go b/cmd/update.go index 47562c9..a2ecb9e 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -2,13 +2,14 @@ package cmd import ( "context" - "github.com/ayflying/utility_go/package/s3" + "github.com/ayflying/utility_go/pkg" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gcfg" "github.com/gogf/gf/v2/os/gcmd" "github.com/gogf/gf/v2/os/gctx" "os" + "path" "time" ) @@ -17,6 +18,8 @@ type serverCfg struct { Address string `json:"address" dc:"服务地址"` Prod bool `json:"prod" dc:"是否生产环境"` S3 string `json:"s3" dc:"使用哪个对象储存中转"` + Arch string `json:"arch" dc:"架构"` + System string `json:"system" dc:"系统"` } type UpdateReq struct { @@ -24,8 +27,6 @@ type UpdateReq struct { FileUrl string `json:"file_url" dc:"文件地址"` } -var s3Mod *s3.Mod - var ( Update = gcmd.Command{ Name: "update", @@ -36,9 +37,30 @@ var ( g.Log().Info(ctx, "准备上传更新文件") //加载编辑配置文件 g.Cfg("hack").GetAdapter().(*gcfg.AdapterFile).SetFileName("hack/config.yaml") + //获取文件名 getFileName, err := g.Cfg("hack").Get(ctx, "gfcli.build.name") Filename := getFileName.String() + ////获取架构 + //getArch, err := g.Cfg("hack").Get(ctx, "gfcli.build.arch") + //Arch := getArch.String() + //if Arch == "" { + // Arch = "amd64" + //} + // + ////获取操作系统 + //getSystem, err := g.Cfg("hack").Get(ctx, "gfcli.build.system") + //System := getSystem.String() + // + //if System == "" { + // System = "linux" + //} + //var systemName = System + "_" + Arch + + //获取版本号 + getVersion, err := g.Cfg("hack").Get(ctx, "gfcli.build.version") + Version := getVersion.String() + var list []*serverCfg serverList := g.Cfg().MustGet(ctx, "server_list") serverList.Scan(&list) @@ -59,7 +81,9 @@ var ( g.Dump("需要更新的服务器", list) //获取上传链接 var url = make(map[string]string) - filename := "linux_amd64/" + Filename + var system = make(map[string]string) + //filename := "linux_amd64/" + Filename + //filename := path.Join(Version, "linux_amd64", Filename) client := g.Client() client.SetTimeout(time.Minute) @@ -73,13 +97,29 @@ var ( } //查询当前上传地址是否存在 - if _, ok := url[v.S3]; !ok { + _, ok2 := system[v.System+v.Arch] + if _, ok := url[v.S3]; !ok || !ok2 { + + var systemName = "linux_amd64" + if v.Arch != "" && v.System != "" { + systemName = v.System + "_" + v.Arch + } + var filename = path.Join(Version, systemName, Filename) + g.Log().Debugf(ctx, "当前上传文件:"+filename) + url[v.S3], err = UploadS3(v.S3, filename) if err != nil { g.Log().Error(ctx, err) return } + system[v.System+v.Arch] = filename + + if err != nil { + g.Log().Error(ctx, err) + return + } } + continue g.Log().Debugf(ctx, "准备同步服务器:%v,url=%v", v.Name, address+"/callback/update") get, err := client.Post(ctx, address+"/callback/update", &UpdateReq{ @@ -107,9 +147,13 @@ var ( func UploadS3(typ string, filename string) (res string, err error) { //updateServerS3Name, _ := g.Config().Get(ctx, "update_server_s3_name") - s3Mod = s3.New(typ) + var s3Mod = pkg.S3(typ) bucketName := s3Mod.GetCfg().BucketName obj, err := os.Open(filename) + if err != nil { + return + } + defer obj.Close() ff, err := obj.Stat() _, err = s3Mod.PutObject(obj, filename, bucketName, ff.Size()) if err != nil {