feat: 为QQ机器人添加Git仓库管理接口
新增了Git仓库管理相关功能: 1. 在router中添加/git路由组 2. 新增代码拉取、构建和重启的HTTP接口 3. 将Git拉取逻辑抽取到util包中 4. 支持通过HTTP请求触发代码拉取、构建和重启操作 5. 扩展CORS配置,允许git.lxtend.com域名访问
This commit is contained in:
parent
8049ec7946
commit
cfd20cbefe
@ -3,6 +3,7 @@ package restart
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"log"
|
"log"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"time"
|
"time"
|
||||||
@ -11,6 +12,8 @@ import (
|
|||||||
"git.lxtend.com/qqbot/handler"
|
"git.lxtend.com/qqbot/handler"
|
||||||
"git.lxtend.com/qqbot/model"
|
"git.lxtend.com/qqbot/model"
|
||||||
docker "git.lxtend.com/qqbot/service/exec"
|
docker "git.lxtend.com/qqbot/service/exec"
|
||||||
|
"git.lxtend.com/qqbot/util"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
var hasVaildBuild = true
|
var hasVaildBuild = true
|
||||||
@ -94,7 +97,7 @@ func buildAndRestart(msg model.Message) model.Reply {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func pullCode(msg model.Message) model.Reply {
|
func pullCode(msg model.Message) model.Reply {
|
||||||
err := gitPull()
|
err := util.GitPull()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return model.Reply{
|
return model.Reply{
|
||||||
ReplyMsg: "拉取代码失败,报错如下\n" + err.Error(),
|
ReplyMsg: "拉取代码失败,报错如下\n" + err.Error(),
|
||||||
@ -164,17 +167,26 @@ func buildBot() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func gitPull() error {
|
func PullCodeHandler(c *gin.Context) {
|
||||||
workDir, err := os.Getwd()
|
err := util.GitPull()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, gin.H{"message": "拉取代码成功"})
|
||||||
}
|
}
|
||||||
cmd := exec.Command("git", "pull")
|
|
||||||
cmd.Dir = workDir
|
|
||||||
|
|
||||||
output, err := cmd.CombinedOutput()
|
func BuildBotHandler(c *gin.Context) {
|
||||||
|
err := buildBot()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New(string(output) + err.Error())
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
}
|
}
|
||||||
return nil
|
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": "重启成功"})
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.lxtend.com/qqbot/handler/restart"
|
||||||
"git.lxtend.com/qqbot/handler/ticket"
|
"git.lxtend.com/qqbot/handler/ticket"
|
||||||
"git.lxtend.com/qqbot/health"
|
"git.lxtend.com/qqbot/health"
|
||||||
"github.com/gin-contrib/cors"
|
"github.com/gin-contrib/cors"
|
||||||
@ -12,7 +13,7 @@ import (
|
|||||||
func startRouter() {
|
func startRouter() {
|
||||||
ginServer := gin.New()
|
ginServer := gin.New()
|
||||||
ginServer.Use(cors.New(cors.Config{
|
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"},
|
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
||||||
AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization", "X-CSRF-Token"},
|
AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization", "X-CSRF-Token"},
|
||||||
ExposeHeaders: []string{"Content-Length", "X-CSRF-Token"},
|
ExposeHeaders: []string{"Content-Length", "X-CSRF-Token"},
|
||||||
@ -23,5 +24,9 @@ func startRouter() {
|
|||||||
healthEngine.GET("/ping", health.HealthHandler)
|
healthEngine.GET("/ping", health.HealthHandler)
|
||||||
ticketEngine := ginServer.Group("/ticket")
|
ticketEngine := ginServer.Group("/ticket")
|
||||||
ticketEngine.GET("", ticket.TicketHandler)
|
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")
|
go ginServer.Run(":3434")
|
||||||
}
|
}
|
||||||
|
22
util/automatic.go
Normal file
22
util/automatic.go
Normal file
@ -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
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user