commit 08d0662fe6e53d3b39cbb9067824d70dc2f72529 Author: Young Xu Date: Sun Jan 1 23:31:51 2023 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e8e8267 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +go.sum diff --git a/README.md b/README.md new file mode 100644 index 0000000..95617fd --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# coco + +coco 快速项目开发脚手架 + +## 功能 + +- 新建项目 +- 代码生成 +- 自更新 \ No newline at end of file diff --git a/coco_config.go b/coco_config.go new file mode 100644 index 0000000..85e7418 --- /dev/null +++ b/coco_config.go @@ -0,0 +1,5 @@ +package main + +type Config struct { + Version string `yaml:"version"` +} diff --git a/coco_update.go b/coco_update.go new file mode 100644 index 0000000..74d16e0 --- /dev/null +++ b/coco_update.go @@ -0,0 +1,54 @@ +package main + +import ( + "fmt" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + gitea_api "gitter.top/coco/components/gitea-api" + "gitter.top/coco/components/runtime" + "gitter.top/coco/components/yaml" +) + +func cocoUpdate() *cobra.Command { + var config Config + var configPath string + return &cobra.Command{ + Use: "update", + Short: "coco tool update", + PreRun: func(cmd *cobra.Command, args []string) { + configPath = runtime.ReplaceEachSlash(fmt.Sprintf("%s/.coco.yaml", runtime.GetHomeDir())) + _ = yaml.Read(configPath, &config) + }, + Run: func(cmd *cobra.Command, args []string) { + client, err := gitea_api.NewClient("https://gitter.top") + if err != nil { + logrus.Errorf("new gitea api failed: %v", err) + return + } + commitID, err := client.GetLatestCommitID("coco", "bootstrap") + if err != nil { + logrus.Errorf("get coco bootstrap info failed: %v", err) + return + } + if commitID == config.Version { + logrus.Infof("version is latest!") + return + } + + // exec update + repo := fmt.Sprintf("gitter.top/coco/bootstrap@%s", commitID) + if output, err := runtime.Exec("go", "build", "-o", "coco", repo); err != nil { + logrus.Errorf("update coco failed: %v", err) + return + } else { + logrus.Infof("%s", output) + } + + config.Version = commitID + if err := yaml.Write(configPath, &config); err != nil { + logrus.Errorf("write config failed: %v", err) + return + } + }, + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..bfbc943 --- /dev/null +++ b/go.mod @@ -0,0 +1,18 @@ +module gitter.top/xuthus5/coco + +go 1.18 + +require ( + github.com/sirupsen/logrus v1.9.0 + github.com/spf13/cobra v1.6.1 + gitter.top/coco/components v0.0.0-20230101151943-8e94d6d01339 +) + +require ( + code.gitea.io/sdk/gitea v0.15.1 // indirect + github.com/hashicorp/go-version v1.2.1 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/main.go b/main.go new file mode 100644 index 0000000..297bd25 --- /dev/null +++ b/main.go @@ -0,0 +1,23 @@ +package main + +import ( + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +var ( + rootCmd = &cobra.Command{ + Use: "coco", + Short: "golang project generator", + } +) + +func init() { + rootCmd.AddCommand(cocoUpdate()) +} + +func main() { + if err := rootCmd.Execute(); err != nil { + logrus.Fatalln(err) + } +}