Merge pull request #22 from appleboy/parseID
Support send notification to commit author by check email.
This commit is contained in:
commit
b154d3d0d0
@ -40,7 +40,7 @@ script:
|
|||||||
after_success:
|
after_success:
|
||||||
# ignore main.go coverage
|
# ignore main.go coverage
|
||||||
- sed -i '/main.go/d' coverage.txt
|
- sed -i '/main.go/d' coverage.txt
|
||||||
- bash <(curl -s https://codecov.io/bash) -f coverage.txt
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
# deploy from master
|
# deploy from master
|
||||||
- if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_GO_VERSION" == "1.7.3" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
|
- if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_GO_VERSION" == "1.7.3" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
|
||||||
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD";
|
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD";
|
||||||
|
6
main.go
6
main.go
@ -109,6 +109,11 @@ func main() {
|
|||||||
Usage: "git author name",
|
Usage: "git author name",
|
||||||
EnvVar: "DRONE_COMMIT_AUTHOR",
|
EnvVar: "DRONE_COMMIT_AUTHOR",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "commit.author.email",
|
||||||
|
Usage: "git author email",
|
||||||
|
EnvVar: "DRONE_COMMIT_AUTHOR_EMAIL",
|
||||||
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "commit.message",
|
Name: "commit.message",
|
||||||
Usage: "commit message",
|
Usage: "commit message",
|
||||||
@ -163,6 +168,7 @@ func run(c *cli.Context) error {
|
|||||||
Commit: c.String("commit.sha"),
|
Commit: c.String("commit.sha"),
|
||||||
Branch: c.String("commit.branch"),
|
Branch: c.String("commit.branch"),
|
||||||
Author: c.String("commit.author"),
|
Author: c.String("commit.author"),
|
||||||
|
Email: c.String("commit.author.email"),
|
||||||
Message: c.String("commit.message"),
|
Message: c.String("commit.message"),
|
||||||
Link: c.String("build.link"),
|
Link: c.String("build.link"),
|
||||||
Started: c.Float64("job.started"),
|
Started: c.Float64("job.started"),
|
||||||
|
31
plugin.go
31
plugin.go
@ -27,6 +27,7 @@ type (
|
|||||||
Message string
|
Message string
|
||||||
Branch string
|
Branch string
|
||||||
Author string
|
Author string
|
||||||
|
Email string
|
||||||
Status string
|
Status string
|
||||||
Link string
|
Link string
|
||||||
Started float64
|
Started float64
|
||||||
@ -134,20 +135,21 @@ func convertLocation(value string) (Location, bool) {
|
|||||||
}, false
|
}, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseID(keys []string) []int64 {
|
func parseTo(value, authorEmail string) (int64, bool) {
|
||||||
var newKeys []int64
|
ids := trimElement(strings.Split(value, ","))
|
||||||
|
|
||||||
for _, value := range keys {
|
if len(ids) > 1 {
|
||||||
id, err := strconv.ParseInt(value, 10, 64)
|
if email := ids[1]; email != authorEmail {
|
||||||
if err != nil {
|
return int64(0), false
|
||||||
log.Println(err.Error())
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
newKeys = append(newKeys, id)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return newKeys
|
id, err := strconv.ParseInt(ids[0], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return int64(0), false
|
||||||
|
}
|
||||||
|
|
||||||
|
return id, true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exec executes the plugin.
|
// Exec executes the plugin.
|
||||||
@ -176,8 +178,6 @@ func (p Plugin) Exec() error {
|
|||||||
|
|
||||||
bot.Debug = p.Config.Debug
|
bot.Debug = p.Config.Debug
|
||||||
|
|
||||||
// parse ids
|
|
||||||
ids := parseID(p.Config.To)
|
|
||||||
photos := fileExist(trimElement(p.Config.Photo))
|
photos := fileExist(trimElement(p.Config.Photo))
|
||||||
documents := fileExist(trimElement(p.Config.Document))
|
documents := fileExist(trimElement(p.Config.Document))
|
||||||
stickers := fileExist(trimElement(p.Config.Sticker))
|
stickers := fileExist(trimElement(p.Config.Sticker))
|
||||||
@ -188,7 +188,12 @@ func (p Plugin) Exec() error {
|
|||||||
venues := trimElement(p.Config.Venue)
|
venues := trimElement(p.Config.Venue)
|
||||||
|
|
||||||
// send message.
|
// send message.
|
||||||
for _, user := range ids {
|
for _, to := range p.Config.To {
|
||||||
|
user, enable := parseTo(to, p.Build.Email)
|
||||||
|
if !enable {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
for _, value := range trimElement(message) {
|
for _, value := range trimElement(message) {
|
||||||
txt, err := template.RenderTrim(value, p)
|
txt, err := template.RenderTrim(value, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -63,11 +63,12 @@ func TestSendMessage(t *testing.T) {
|
|||||||
Branch: "master",
|
Branch: "master",
|
||||||
Message: "update travis by drone plugin",
|
Message: "update travis by drone plugin",
|
||||||
Commit: "e7c4f0a63ceeb42a39ac7806f7b51f3f0d204fd2",
|
Commit: "e7c4f0a63ceeb42a39ac7806f7b51f3f0d204fd2",
|
||||||
|
Email: "test@gmail.com",
|
||||||
},
|
},
|
||||||
|
|
||||||
Config: Config{
|
Config: Config{
|
||||||
Token: os.Getenv("TELEGRAM_TOKEN"),
|
Token: os.Getenv("TELEGRAM_TOKEN"),
|
||||||
To: []string{os.Getenv("TELEGRAM_TO"), "中文ID", "1234567890"},
|
To: []string{os.Getenv("TELEGRAM_TO"), os.Getenv("TELEGRAM_TO") + ",appleboy@gmail.com", "中文ID", "1234567890"},
|
||||||
Message: []string{"Test Telegram Chat Bot From Travis or Local", "commit message: 『{{ build.message }}』", " "},
|
Message: []string{"Test Telegram Chat Bot From Travis or Local", "commit message: 『{{ build.message }}』", " "},
|
||||||
Photo: []string{"tests/github.png", "1234", " "},
|
Photo: []string{"tests/github.png", "1234", " "},
|
||||||
Document: []string{"tests/gophercolor.png", "1234", " "},
|
Document: []string{"tests/gophercolor.png", "1234", " "},
|
||||||
@ -131,19 +132,31 @@ func TestTrimElement(t *testing.T) {
|
|||||||
assert.Equal(t, result, trimElement(input))
|
assert.Equal(t, result, trimElement(input))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseID(t *testing.T) {
|
func TestParseTo(t *testing.T) {
|
||||||
var input []string
|
id, enable := parseTo("1234567890", "test@gmail.com")
|
||||||
var result []int64
|
|
||||||
|
|
||||||
input = []string{"1", "測試", "3"}
|
assert.Equal(t, true, enable)
|
||||||
result = []int64{int64(1), int64(3)}
|
assert.Equal(t, int64(1234567890), id)
|
||||||
|
|
||||||
assert.Equal(t, result, parseID(input))
|
id, enable = parseTo("1234567890,test2@gmail.com", "test@gmail.com")
|
||||||
|
|
||||||
input = []string{"1", "2"}
|
assert.Equal(t, false, enable)
|
||||||
result = []int64{int64(1), int64(2)}
|
assert.Equal(t, int64(0), id)
|
||||||
|
|
||||||
assert.Equal(t, result, parseID(input))
|
id, enable = parseTo("1234567890,test@gmail.com", "test@gmail.com")
|
||||||
|
|
||||||
|
assert.Equal(t, true, enable)
|
||||||
|
assert.Equal(t, int64(1234567890), id)
|
||||||
|
|
||||||
|
id, enable = parseTo("測試,test@gmail.com", "test@gmail.com")
|
||||||
|
|
||||||
|
assert.Equal(t, false, enable)
|
||||||
|
assert.Equal(t, int64(0), id)
|
||||||
|
|
||||||
|
id, enable = parseTo("測試", "test@gmail.com")
|
||||||
|
|
||||||
|
assert.Equal(t, false, enable)
|
||||||
|
assert.Equal(t, int64(0), id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCheckFileExist(t *testing.T) {
|
func TestCheckFileExist(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user