-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
109 lines (96 loc) · 2.54 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package main
import (
"fmt"
"os/exec"
"strings"
"github.com/pkg/errors"
)
func gitBranch() (branch string, err error) {
cmd := exec.Command("/bin/bash", "-c", "git rev-parse --abbrev-ref HEAD")
out, err := cmd.CombinedOutput()
if err != nil {
err = errors.Wrap(err, "请在git仓库目录下运行!!!")
return
}
branch = strings.TrimSpace(string(out))
return
}
func gitUser() (username string, err error) {
cmd := exec.Command("/bin/bash", "-c", "git config user.name")
out, err := cmd.CombinedOutput()
if err != nil {
err = errors.Wrap(err, "请在git仓库目录下运行!!!")
return
}
username = strings.TrimSpace(string(out))
return
}
func gitPull(branch string) error {
fmt.Printf("开始同步分支 %s 远端代码到本地...\n", branch)
shell := `
#!/bin/bash
set -e
export TARGET_BRANCH="%s"
RES=$(git ls-remote --heads origin refs/heads/${TARGET_BRANCH})
if [[ "RES" == "" ]]; then
echo "远端仓库里不存在分支:${TARGET_BRANCH},请先创建好该分支"
exit 1
fi
git pull origin ${TARGET_BRANCH}
`
args := []string{"-c", fmt.Sprintf(shell, branch)}
cmd := exec.Command("/bin/sh", args...)
out, err := cmd.CombinedOutput()
if err != nil {
err = errors.Wrapf(err, "执行失败,错误信息如下:\n%s", string(out))
return err
}
fmt.Println("同步远端代码到本地成功.")
return nil
}
func gitPush(username, branch string) error {
fmt.Println("推送代码到远端仓库并发起评审任务...")
shell := `
#!/bin/bash
set -e
export USER_NAME="%s"
export TARGET_BRANCH="%s"
export SOURCE_BRANCH="cr/${USER_NAME}/${TARGET_BRANCH}"
git push origin HEAD:${SOURCE_BRANCH} \
-o merge_request.create \
-o merge_request.title="%s" \
-o merge_request.target=${TARGET_BRANCH} \
-o merge_request.source=${SOURCE_BRANCH} \
-o merge_request.remove_source_branch=true
`
args := []string{"-c", fmt.Sprintf(shell, username, branch, fmt.Sprintf("%s merge code into %s", username, branch))}
cmd := exec.Command("/bin/sh", args...)
out, err := cmd.CombinedOutput()
if err != nil {
err = errors.Wrapf(err, "执行失败,错误信息如下:\n%s", string(out))
return err
}
fmt.Println("推送代码并创建评审任务成功,详情如下:")
fmt.Println(string(out))
return nil
}
func main() {
branch, err := gitBranch()
if err != nil {
fmt.Println(err)
return
}
username, err := gitUser()
if err != nil {
fmt.Println(err)
return
}
if err = gitPull(branch); err != nil {
fmt.Println(err)
return
}
if err = gitPush(username, branch); err != nil {
fmt.Println(err)
return
}
}