添加go语言运行支持
This commit is contained in:
parent
5ced570d06
commit
78620cf6cb
|
@ -8,6 +8,7 @@ env:
|
||||||
COMMIT_ID: "${{ github.sha }}"
|
COMMIT_ID: "${{ github.sha }}"
|
||||||
PR_PROMPT: "::warning:: Build artifact will not be uploaded due to the workflow is trigged by pull request."
|
PR_PROMPT: "::warning:: Build artifact will not be uploaded due to the workflow is trigged by pull request."
|
||||||
LD_FLAGS: "-w -s"
|
LD_FLAGS: "-w -s"
|
||||||
|
VERSION: "action"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
@ -50,7 +51,7 @@ jobs:
|
||||||
if [ $GOOS = "windows" ]; then export BINARY_SUFFIX="$BINARY_SUFFIX.exe"; fi
|
if [ $GOOS = "windows" ]; then export BINARY_SUFFIX="$BINARY_SUFFIX.exe"; fi
|
||||||
if $IS_PR ; then echo $PR_PROMPT; fi
|
if $IS_PR ; then echo $PR_PROMPT; fi
|
||||||
export BINARY_NAME="$BINARY_PREFIX$GOOS_$GOARCH$BINARY_SUFFIX"
|
export BINARY_NAME="$BINARY_PREFIX$GOOS_$GOARCH$BINARY_SUFFIX"
|
||||||
export LD_FLAGS="-w -s -X github.com/huoxue1/qinglong-go/service/config.VERSION=$COMMIT_ID"
|
export LD_FLAGS="-w -s -X github.com/huoxue1/qinglong-go/service/config.VERSION=${{VERSION}}"
|
||||||
go mod tidy
|
go mod tidy
|
||||||
go build -o "output/$BINARY_NAME" -trimpath -ldflags "$LD_FLAGS" ./
|
go build -o "output/$BINARY_NAME" -trimpath -ldflags "$LD_FLAGS" ./
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
|
|
|
@ -13,6 +13,8 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -34,6 +36,7 @@ type task struct {
|
||||||
isNow bool
|
isNow bool
|
||||||
isCon bool
|
isCon bool
|
||||||
envs map[string][]int
|
envs map[string][]int
|
||||||
|
dir string
|
||||||
}
|
}
|
||||||
|
|
||||||
func initTask() {
|
func initTask() {
|
||||||
|
@ -112,11 +115,18 @@ func runCron(crontabs *models.Crontabs) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
_ = os.Mkdir("data/log/"+time.Now().Format("2006-01-02"), 0666)
|
_ = os.Mkdir("data/log/"+time.Now().Format("2006-01-02"), 0666)
|
||||||
file, _ := os.OpenFile(crontabs.LogPath, os.O_RDWR|os.O_CREATE, 0666)
|
file, _ := os.OpenFile(crontabs.LogPath, os.O_RDWR|os.O_CREATE, 0666)
|
||||||
go utils.RunTask(ctx, ta.cmd, envFromDb,
|
cmdDir := "./data/scripts/"
|
||||||
func(ctx context.Context) {
|
if strings.HasPrefix(ta.cmd, "go") {
|
||||||
|
cmdDir = ta.dir
|
||||||
|
}
|
||||||
|
go utils.RunWithOption(ctx, &utils.RunOption{
|
||||||
|
Command: ta.cmd,
|
||||||
|
Env: envFromDb,
|
||||||
|
OnStart: func(ctx context.Context) {
|
||||||
writer := ctx.Value("log").(io.Writer)
|
writer := ctx.Value("log").(io.Writer)
|
||||||
writer.Write([]byte(fmt.Sprintf("##开始执行.. %s\n\n", now.Format("2006-01-02 15:04:05"))))
|
writer.Write([]byte(fmt.Sprintf("##开始执行.. %s\n\n", now.Format("2006-01-02 15:04:05"))))
|
||||||
}, func(ctx context.Context) {
|
},
|
||||||
|
OnEnd: func(ctx context.Context) {
|
||||||
writer := ctx.Value("log").(io.Writer)
|
writer := ctx.Value("log").(io.Writer)
|
||||||
writer.Write([]byte(fmt.Sprintf("\n##执行结束.. %s,耗时%.1f秒\n\n", time.Now().Format("2006-01-02 15:04:05"), time.Now().Sub(now).Seconds())))
|
writer.Write([]byte(fmt.Sprintf("\n##执行结束.. %s,耗时%.1f秒\n\n", time.Now().Format("2006-01-02 15:04:05"), time.Now().Sub(now).Seconds())))
|
||||||
crontabs.Status = 1
|
crontabs.Status = 1
|
||||||
|
@ -125,7 +135,10 @@ func runCron(crontabs *models.Crontabs) {
|
||||||
models.UpdateCron(crontabs)
|
models.UpdateCron(crontabs)
|
||||||
execManager.LoadAndDelete(crontabs.Id)
|
execManager.LoadAndDelete(crontabs.Id)
|
||||||
file.Close()
|
file.Close()
|
||||||
}, file)
|
},
|
||||||
|
LogFile: file,
|
||||||
|
CmdDir: cmdDir,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,6 +184,11 @@ func handCommand(command string) *task {
|
||||||
ta.cmd = ShCmd + " " + commands[1]
|
ta.cmd = ShCmd + " " + commands[1]
|
||||||
} else if strings.HasSuffix(commands[1], ".ts") {
|
} else if strings.HasSuffix(commands[1], ".ts") {
|
||||||
ta.cmd = "ts-node-transpile-only " + commands[1]
|
ta.cmd = "ts-node-transpile-only " + commands[1]
|
||||||
|
} else if strings.HasSuffix(commands[1], ".go") {
|
||||||
|
|
||||||
|
log.Infoln(filepath.Base(commands[1]))
|
||||||
|
ta.cmd = fmt.Sprintf(`go run %s`, filepath.Base(commands[1]))
|
||||||
|
ta.dir = path.Join("./data", "scripts", filepath.Dir(commands[1]))
|
||||||
}
|
}
|
||||||
if len(commands) > 2 {
|
if len(commands) > 2 {
|
||||||
if commands[2] == "now" {
|
if commands[2] == "now" {
|
||||||
|
@ -207,3 +225,12 @@ func handCommand(command string) *task {
|
||||||
}
|
}
|
||||||
return ta
|
return ta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getGoModule(filePath string) string {
|
||||||
|
file, err := os.ReadFile(filePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("not get the go module name")
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(strings.TrimPrefix(strings.Split(string(file), "\n")[0], "module"))
|
||||||
|
}
|
||||||
|
|
51
utils/run.go
51
utils/run.go
|
@ -51,3 +51,54 @@ func RunTask(ctx context.Context, command string, env map[string]string, onStart
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RunOption struct {
|
||||||
|
Command string
|
||||||
|
Env map[string]string
|
||||||
|
OnStart func(ctx context.Context)
|
||||||
|
OnEnd func(ctx context.Context)
|
||||||
|
LogFile io.Writer
|
||||||
|
CmdDir string
|
||||||
|
}
|
||||||
|
|
||||||
|
func RunWithOption(ctx context.Context, option *RunOption) {
|
||||||
|
cmd := exec.Command(strings.Split(option.Command, " ")[0], strings.Split(option.Command, " ")[1:]...)
|
||||||
|
for s, s2 := range option.Env {
|
||||||
|
cmd.Env = append(cmd.Env, s+"="+s2)
|
||||||
|
}
|
||||||
|
environ := os.Environ()
|
||||||
|
cmd.Env = append(cmd.Env, environ...)
|
||||||
|
stdoutPipe, _ := cmd.StdoutPipe()
|
||||||
|
stderrPipe, _ := cmd.StderrPipe()
|
||||||
|
cmd.Dir = option.CmdDir
|
||||||
|
option.OnStart(context.WithValue(ctx, "log", option.LogFile))
|
||||||
|
ch := make(chan int, 1)
|
||||||
|
go func() {
|
||||||
|
err := cmd.Start()
|
||||||
|
if err != nil {
|
||||||
|
ch <- 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
go io.Copy(option.LogFile, stderrPipe)
|
||||||
|
go io.Copy(option.LogFile, stdoutPipe)
|
||||||
|
err = cmd.Wait()
|
||||||
|
if err != nil {
|
||||||
|
ch <- 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ch <- 1
|
||||||
|
}()
|
||||||
|
cancel := ctx.Value("cancel").(chan int)
|
||||||
|
select {
|
||||||
|
case <-ch:
|
||||||
|
{
|
||||||
|
option.OnEnd(context.WithValue(ctx, "log", option.LogFile))
|
||||||
|
}
|
||||||
|
case <-cancel:
|
||||||
|
{
|
||||||
|
_ = cmd.Process.Kill()
|
||||||
|
option.OnEnd(context.WithValue(context.Background(), "log", option.LogFile))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue