From cfd20cbefe57c5f844a40e579f5b5bd4d5403adf Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Sun, 9 Mar 2025 01:32:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BAQQ=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0Git=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增了Git仓库管理相关功能: 1. 在router中添加/git路由组 2. 新增代码拉取、构建和重启的HTTP接口 3. 将Git拉取逻辑抽取到util包中 4. 支持通过HTTP请求触发代码拉取、构建和重启操作 5. 扩展CORS配置,允许git.lxtend.com域名访问 --- handler/restart/restart.go | 36 ++++++++++++++++++++++++------------ router.go | 7 ++++++- util/automatic.go | 22 ++++++++++++++++++++++ 3 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 util/automatic.go diff --git a/handler/restart/restart.go b/handler/restart/restart.go index 2587893..735fa51 100644 --- a/handler/restart/restart.go +++ b/handler/restart/restart.go @@ -3,6 +3,7 @@ package restart import ( "errors" "log" + "net/http" "os" "os/exec" "time" @@ -11,6 +12,8 @@ import ( "git.lxtend.com/qqbot/handler" "git.lxtend.com/qqbot/model" docker "git.lxtend.com/qqbot/service/exec" + "git.lxtend.com/qqbot/util" + "github.com/gin-gonic/gin" ) var hasVaildBuild = true @@ -94,7 +97,7 @@ func buildAndRestart(msg model.Message) model.Reply { } func pullCode(msg model.Message) model.Reply { - err := gitPull() + err := util.GitPull() if err != nil { return model.Reply{ ReplyMsg: "拉取代码失败,报错如下\n" + err.Error(), @@ -164,17 +167,26 @@ func buildBot() error { return nil } -func gitPull() error { - workDir, err := os.Getwd() +func PullCodeHandler(c *gin.Context) { + err := util.GitPull() if err != nil { - return err + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) } - cmd := exec.Command("git", "pull") - cmd.Dir = workDir - - output, err := cmd.CombinedOutput() - if err != nil { - return errors.New(string(output) + err.Error()) - } - return nil + c.JSON(http.StatusOK, gin.H{"message": "拉取代码成功"}) +} + +func BuildBotHandler(c *gin.Context) { + err := buildBot() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + } + c.JSON(http.StatusOK, gin.H{"message": "构建成功"}) +} + +func RestartBotHandler(c *gin.Context) { + err := restartProgram() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + } + c.JSON(http.StatusOK, gin.H{"message": "重启成功"}) } diff --git a/router.go b/router.go index b027c3c..513e73f 100644 --- a/router.go +++ b/router.go @@ -3,6 +3,7 @@ package main import ( "time" + "git.lxtend.com/qqbot/handler/restart" "git.lxtend.com/qqbot/handler/ticket" "git.lxtend.com/qqbot/health" "github.com/gin-contrib/cors" @@ -12,7 +13,7 @@ import ( func startRouter() { ginServer := gin.New() ginServer.Use(cors.New(cors.Config{ - AllowOrigins: []string{"https://www.lxtend.com"}, + AllowOrigins: []string{"https://www.lxtend.com", "https://git.lxtend.com"}, AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization", "X-CSRF-Token"}, ExposeHeaders: []string{"Content-Length", "X-CSRF-Token"}, @@ -23,5 +24,9 @@ func startRouter() { healthEngine.GET("/ping", health.HealthHandler) ticketEngine := ginServer.Group("/ticket") ticketEngine.GET("", ticket.TicketHandler) + gitEngine := ginServer.Group("/git") + gitEngine.GET("/pull", restart.PullCodeHandler) + gitEngine.GET("/build", restart.BuildBotHandler) + gitEngine.GET("/restart", restart.RestartBotHandler) go ginServer.Run(":3434") } diff --git a/util/automatic.go b/util/automatic.go new file mode 100644 index 0000000..487b160 --- /dev/null +++ b/util/automatic.go @@ -0,0 +1,22 @@ +package util + +import ( + "errors" + "os" + "os/exec" +) + +func GitPull() error { + workDir, err := os.Getwd() + if err != nil { + return err + } + cmd := exec.Command("git", "pull") + cmd.Dir = workDir + + output, err := cmd.CombinedOutput() + if err != nil { + return errors.New(string(output) + err.Error()) + } + return nil +}