Skip to content

Commit aa628f2

Browse files
committed
fix:1.5.0
1 parent 5c57523 commit aa628f2

4 files changed

Lines changed: 90 additions & 32 deletions

File tree

config/config.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package config
22

33
import (
44
"errors"
5-
"github.com/howeyc/gopass"
6-
"github.com/yezihack/github-webhook/util"
75
"os"
86
"strconv"
97
"strings"
8+
9+
"github.com/howeyc/gopass"
10+
"github.com/yezihack/github-webhook/util"
1011
)
1112

1213
var (
13-
Version = "v1.4.3"
14+
Version = "v1.5.0"
1415
Author = "barry"
1516
Email = "freeit@126.com"
1617
Name = "github-webhook"

internal/backend.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package internal
2+
3+
import (
4+
"fmt"
5+
"sync"
6+
)
7+
8+
// 变量
9+
var (
10+
__backendOnce sync.Once
11+
__backend *Backend
12+
)
13+
14+
type Backend struct {
15+
pool chan func() // 一个管道的池子
16+
debug bool // 是否启动调试
17+
}
18+
19+
// 实例化对象
20+
// 不管实例多少次,对象就创建一次。
21+
func NewBackend(debug ...bool) *Backend {
22+
__backendOnce.Do(func() {
23+
var bug bool
24+
if len(debug) > 0 {
25+
bug = debug[0]
26+
}
27+
__backend = &Backend{
28+
debug: bug,
29+
}
30+
__backend.pool = make(chan func(), 10) // 初使 pool
31+
// 开启一个 goroutine
32+
go __backend.monitor()
33+
})
34+
return __backend
35+
}
36+
37+
// 添加服务
38+
func (b *Backend) Add(fn func()) {
39+
if b.debug {
40+
fmt.Println("add +1")
41+
}
42+
b.pool <- fn
43+
}
44+
45+
// 监听服务
46+
func (b *Backend) monitor() {
47+
for {
48+
select {
49+
case fn, ok := <-b.pool:
50+
if b.debug {
51+
fmt.Printf("ok:%v", ok)
52+
}
53+
if ok {
54+
fn()
55+
}
56+
}
57+
}
58+
}

internal/handler.go

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ package internal
33
import (
44
"encoding/json"
55
"fmt"
6-
"github.com/tidwall/gjson"
7-
"github.com/yezihack/github-webhook/logger"
8-
"github.com/yezihack/github-webhook/util"
96
"io/ioutil"
107
"net/http"
118
"strings"
9+
10+
"github.com/tidwall/gjson"
11+
"github.com/yezihack/github-webhook/logger"
12+
"github.com/yezihack/github-webhook/util"
1213
)
1314

1415
type WebHookHandler func(eventName string, payload *GitHubRepo, req *http.Request) error
@@ -56,6 +57,7 @@ func Handler(secret string, l logger.Logger, fn WebHookHandler) http.HandlerFunc
5657
_fail(err)
5758
return
5859
}
60+
fmt.Println("body", string(body))
5961
log.Verbose("RequestBody:%s\n", string(body))
6062
// Validate payload (only when secret is provided)
6163
if secret != "" {
@@ -65,20 +67,6 @@ func Handler(secret string, l logger.Logger, fn WebHookHandler) http.HandlerFunc
6567
return
6668
}
6769
}
68-
// Get payload. from github data is encode. fix by 2020.04.20
69-
//var payloadData []byte
70-
//if contentType == "application/x-www-form-urlencoded" {
71-
// payloadSplit := strings.SplitN(string(body), "=", 2)
72-
// payloadUrlDecode, err := url.QueryUnescape(payloadSplit[1])
73-
// if err != nil {
74-
// log.Printf("RequestBody:%s\n", string(body))
75-
// _fail(err)
76-
// return
77-
// }
78-
// payloadData = []byte(payloadUrlDecode)
79-
//} else if contentType == "application/json" {
80-
// payloadData = body
81-
//}
8270
repo := GitHubRepo{}
8371
result := gjson.ParseBytes(body)
8472
repo.Name = result.Get("repository.name").Str

router/router.go

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package router
22

33
import (
44
"fmt"
5+
"net/http"
6+
"os"
7+
"time"
8+
59
"github.com/yezihack/github-webhook/config"
610
"github.com/yezihack/github-webhook/internal"
711
"github.com/yezihack/github-webhook/logger"
812
"github.com/yezihack/github-webhook/util"
913
"github.com/yezihack/gorestful"
10-
"net/http"
11-
"os"
12-
"time"
1314
)
1415

1516
var (
@@ -23,18 +24,25 @@ func New(cfg config.Config) error {
2324
}
2425
log = logger.NewLogger(cfg.Quiet, cfg.Verbose)
2526
router := gorestful.New()
27+
router.GET("/", pong)
2628
router.GET("/ping", pong)
2729
router.POST("/web-hook", webHookLog(cfg))
2830
addr := fmt.Sprintf(":%d", cfg.Port)
29-
go func() {
30-
log.Printf("%s %d %s\n", time.Now().Format("2006/01/02 15:04:05"), os.Getpid(), addr)
31-
}()
31+
go log.Printf("%s %d %s\n", time.Now().Format("2006/01/02 15:04:05"), os.Getpid(), addr)
3232
if err := http.ListenAndServe(addr, router); err != nil {
3333
return err
3434
}
3535
return nil
3636
}
3737

38+
func version(w http.ResponseWriter, r *http.Request) {
39+
if r.Method != "GET" {
40+
util.Response(w, 405, "Method Not Allowed")
41+
return
42+
}
43+
util.Response(w, 200, config.Version)
44+
}
45+
3846
func pong(w http.ResponseWriter, r *http.Request) {
3947
if r.Method != "GET" {
4048
util.Response(w, 405, "Method Not Allowed")
@@ -54,12 +62,15 @@ func webHookLog(conf config.Config) http.HandlerFunc {
5462
payload.CommitName, payload.CommitEmail, payload.BranchName, payload.CommitID, payload.CommitAt)
5563
log.Printf("script filename:%s\n", conf.ScriptBash)
5664
// All is good (return an error to fail)
57-
str, err := util.CallScript(conf.ScriptBash)
58-
if err != nil {
59-
log.Println(err)
60-
return err
61-
}
62-
log.Println(str)
65+
internal.NewBackend(true).Add(func() {
66+
str, err := util.CallScript(conf.ScriptBash)
67+
if err != nil {
68+
fmt.Println("backend-err:", err)
69+
return
70+
}
71+
fmt.Println("backend-result:", str)
72+
})
73+
fmt.Println("exec end")
6374
return nil
6475
})
6576
}

0 commit comments

Comments
 (0)