Merge pull request #22 from appleboy/parseID

Support send notification to commit author by check email.
This commit is contained in:
Bo-Yi Wu 2016-11-04 10:10:37 +08:00 committed by GitHub
commit b154d3d0d0
4 changed files with 48 additions and 24 deletions

View File

@ -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";

View File

@ -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"),

View File

@ -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 {
return int64(0), false
}
}
id, err := strconv.ParseInt(ids[0], 10, 64)
if err != nil { if err != nil {
log.Println(err.Error()) return int64(0), false
continue
}
newKeys = append(newKeys, id)
} }
return newKeys 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 {

View File

@ -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) {