-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgit_pull_slack.go
More file actions
153 lines (127 loc) · 3.57 KB
/
git_pull_slack.go
File metadata and controls
153 lines (127 loc) · 3.57 KB
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package main
import (
"fmt"
"flag"
"github.com/codeskyblue/go-sh"
"github.com/nlopes/slack"
"gopkg.in/yaml.v2"
"io/ioutil"
)
//"github.com/nlopes/slack"
func main() {
// get flags
var (
gitPath string
gitOrigin string
gitBranchMergeFrom string
gitBranchMergeTo string
slackToken string
slackChannel string
commandAfterGitPull string
)
flag.StringVar(&gitPath, "git.path", "blank", "git path")
flag.StringVar(&gitOrigin, "git.origin", "blank", "git origin url")
flag.StringVar(&gitBranchMergeFrom, "git.branch.merge.from", "blank", "git branch merge from")
flag.StringVar(&gitBranchMergeTo, "git.branch.merge.to", "blank", "git branch merge to")
flag.StringVar(&slackToken, "slack.token", "blank", "slack api token")
flag.StringVar(&slackChannel, "slack.channel", "blank", "slack channel")
flag.StringVar(&commandAfterGitPull, "command.after.git.pull", "blank", "command after git pull")
flag.Parse()
fmt.Printf("--git.path:%s, --git.origin:%s, --git.branch.merge.from:%s, --git.branch.merge.to:%s, --slack.token:%s, --slack.channel:%s, --command.after.git.pull:%s\n", gitPath, gitOrigin, gitBranchMergeFrom, gitBranchMergeTo, slackToken, slackChannel, commandAfterGitPull)
session := sh.NewSession()
session.SetDir("./gitpullslack")
branch, _ := session.Command("git", "branch").Output()
fmt.Printf("branch:%s",branch)
slackMessage := ""
if session.Test("executable", "git fetch origin master"){
session.Command("git", "fetch", "origin", "master").Run()
diff, _ := session.Command("git", "diff").Output()
slackMessage = string(diff)
}else {
slackMessage = "no updates"
}
session.ShowCMD = true // for debug
fmt.Println(slackMessage)
// load yaml
buf, err := ioutil.ReadFile("./gitpullslack/conf.yml")
if err != nil {
fmt.Printf("yml_read%s\n", err)
}
m := make(map[interface{}]interface{})
err = yaml.Unmarshal(buf, &m)
if err != nil {
fmt.Printf("yml_marsh:%s\n", err)
}
fmt.Printf("%s\n", m["slack_token"])
slackToken = m["slack_token"].(string)
slackChannel = m["slack_channel"].(string)
api := slack.New(slackToken)
//os.Exit(run(api, slackMessage, slackChannel))
run(api, slackMessage, slackChannel)
}
func run(api *slack.Client, mes string, channel string) {
rtm := api.NewRTM()
rtm.SendMessage(rtm.NewOutgoingMessage(mes, channel)) // input chnel as channel id
/*
go rtm.ManageConnection()
for {
select {
case msg := <-rtm.IncomingEvents:
switch ev := msg.Data.(type) {
case *slack.HelloEvent:
log.Print("Hello Event")
case *slack.MessageEvent:
log.Printf("Message: %v\n", ev)
log.Printf("Channel: %v\n", ev.Channel)
rtm.SendMessage(rtm.NewOutgoingMessage("hi", ev.Channel))
case *slack.InvalidAuthEvent:
log.Print("Invalid credentials")
return 1
}
}
}
*/
}
/*
TODO
[done]- get command line flags
-- sub option
-- git path
-- git local branch(ex. develop)
-- git remote branch(ex. local)
-- slack token
-- slack channel
-- after pull command(ex. supervisor restart)
[done]- run system command
-- git branch develop
-- git fetch
-- git diff (develop) origin/(local)
// do them later
-- git merge dry run
-- git pull origin local
-- command after git pull
[done]- load external yml
-- install lib
-- read yml
-- set gitignore
-- save slack api token
[doing]- slack notify
-- install lib
-- send merge diff
-- show reaction button
-- merge by reaction callback
[doing]- debug
-- install debugger(delve)
-- how to use it
- err handle
-- logging
-- exception
- refactor
-- naming
-- package/file
- write tests
- include cross compiled binary
- example of run with supervisor
-- logging
-- restart process
*/