From f656fdfce84ad4df05d71bff74ae3c27992f8cf9 Mon Sep 17 00:00:00 2001 From: Young Xu Date: Sat, 6 Apr 2024 12:39:35 +0800 Subject: [PATCH] fix: coco version command --- coco/main.go | 2 +- coco_config.go | 5 ++++- coco_proto_format.go | 2 +- coco_update.go | 52 ++++++++++++++++++++++++++++---------------- go.mod | 7 ++++-- util.go | 6 ++--- 6 files changed, 47 insertions(+), 27 deletions(-) diff --git a/coco/main.go b/coco/main.go index 3faafd9..0edb388 100644 --- a/coco/main.go +++ b/coco/main.go @@ -24,7 +24,7 @@ func init() { PadLevelText: false, QuoteEmptyFields: false, }) - rootCmd.AddCommand(bootstrap.Update()) + rootCmd.AddCommand(bootstrap.AddVersionCommand()) rootCmd.AddCommand(bootstrap.CreateProject()) rootCmd.AddCommand(bootstrap.AddAPICommand()) rootCmd.AddCommand(bootstrap.AddServiceCommand()) diff --git a/coco_config.go b/coco_config.go index da3d5e1..ae196a2 100644 --- a/coco_config.go +++ b/coco_config.go @@ -1,5 +1,8 @@ package bootstrap +import "time" + type Config struct { - Version string `yaml:"version"` + Version string `yaml:"version"` + CommitAt time.Time `yaml:"commit_at"` } diff --git a/coco_proto_format.go b/coco_proto_format.go index c6b0bea..f4c4394 100644 --- a/coco_proto_format.go +++ b/coco_proto_format.go @@ -5,7 +5,7 @@ import ( "github.com/emicklei/proto" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "gitter.top/sync/proto-contrib/pkg/protofmt" + "gitter.top/common/protofmt" "os" ) diff --git a/coco_update.go b/coco_update.go index 4ad152e..a6119d7 100644 --- a/coco_update.go +++ b/coco_update.go @@ -7,17 +7,25 @@ import ( "github.com/spf13/cobra" ) -func Update() *cobra.Command { +func AddVersionCommand() *cobra.Command { var config Config var configPath string + var update bool var easyaml = NewEasYaml() var rt = NewRuntime() - return &cobra.Command{ - Use: "update", - Short: "coco update", + cmd := &cobra.Command{ + Use: "version", + Short: "coco version", PreRun: func(cmd *cobra.Command, args []string) { + if !update && len(args) != 0 { + u := args[0] + if u == "update" { + update = true + } + } configPath = rt.ReplaceEachSlash(fmt.Sprintf("%s/.coco.yaml", rt.GetHomeDir())) _ = easyaml.Read(configPath, &config) + logrus.Infof("current version: %s, release at: %s", config.Version, config.CommitAt) }, Run: func(cmd *cobra.Command, args []string) { client, err := NewGiteaClient("https://gitter.top") @@ -25,30 +33,36 @@ func Update() *cobra.Command { logrus.Errorf("new gitea api failed: %v", err) return } - commitID, err := client.GetLatestCommitID("coco", "bootstrap") + commit, err := client.GetLatestCommit("coco", "bootstrap") if err != nil { - logrus.Errorf("get coco bootstrap info failed: %v", err) + logrus.Errorf("get coco vcs info failed: %v", err) return } - if commitID == config.Version { + if commit.SHA == config.Version { logrus.Infof("version is latest!") return } - // exec update - repo := fmt.Sprintf("gitter.top/coco/bootstrap/coco/...@%s", commitID) - if _, err := rt.Exec("go", "install", repo); err != nil { - logrus.Errorf("update bootstrap failed: %v", err) - return - } + var commitID = commit.SHA[:8] + logrus.Infof("latest version: %s, release at: %s", commitID, commit.CommitMeta.Created) - config.Version = commitID - if err := easyaml.Write(configPath, &config); err != nil { - logrus.Errorf("write config failed: %v", err) - return - } + if update { + repo := fmt.Sprintf("gitter.top/coco/bootstrap/coco/...@%s", commitID) + if _, err := rt.Exec("go", "install", repo); err != nil { + logrus.Errorf("update coco failed: %v", err) + return + } - logrus.Infof("update success!") + config.Version = commitID + config.CommitAt = commit.CommitMeta.Created + if err := easyaml.Write(configPath, &config); err != nil { + logrus.Errorf("write config failed: %v", err) + return + } + logrus.Infof("update success!") + } }, } + cmd.Flags().BoolVar(&update, "update", true, "update coco version") + return cmd } diff --git a/go.mod b/go.mod index 53a4ba9..ee21aa6 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,21 @@ module gitter.top/coco/bootstrap -go 1.20 +go 1.21 + +toolchain go1.21.8 require ( code.gitea.io/sdk/gitea v0.17.1 + github.com/emicklei/proto v1.13.2 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 gitter.top/common/gobuf v0.0.4 + gitter.top/common/protofmt v0.0.1 gopkg.in/yaml.v3 v3.0.1 ) require ( github.com/davidmz/go-pageant v1.0.2 // indirect - github.com/emicklei/proto v1.13.2 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect diff --git a/util.go b/util.go index 5f44572..46f5551 100644 --- a/util.go +++ b/util.go @@ -31,7 +31,7 @@ func NewGiteaClient(addr string) (*GiteaClient, error) { return &GiteaClient{client: client}, nil } -func (c *GiteaClient) GetLatestCommitID(owner, repoName string) (string, error) { +func (c *GiteaClient) GetLatestCommit(owner, repoName string) (*gitea.Commit, error) { commits, _, err := c.client.ListRepoCommits(owner, repoName, gitea.ListCommitOptions{ ListOptions: gitea.ListOptions{ Page: 1, @@ -39,9 +39,9 @@ func (c *GiteaClient) GetLatestCommitID(owner, repoName string) (string, error) }, }) if err != nil { - return "", err + return nil, err } - return commits[0].SHA, nil + return commits[0], nil } type EasYaml struct {