From 8bd0297f057b01ea7e302cdac4802216359c09f1 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Fri, 1 May 2015 03:37:48 -0600 Subject: [PATCH 01/70] Added support for create events. --- github.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/github.go b/github.go index 0575977..1e3711b 100644 --- a/github.go +++ b/github.go @@ -65,6 +65,16 @@ func (s *Session) hookServer(port int, secret string) { payload.Issue.HTMLURL, ) s.sendMessage(msg, "") + case gohook.CreateEventType: + payload, ok := et.Event.(*gohook.CreateEvent) + if !ok { + panic("Malformed *CreateEvent.") + } + msg := fmt.Sprintf("[ %s ] %s created.", + payload.Repository.Name, + payload.RefType, + ) + s.sendMessage(msg, "") } } } From 6d0790eb9d0d7404deaa3ff9e23f87a2fb8c51b8 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Fri, 1 May 2015 03:51:35 -0600 Subject: [PATCH 02/70] Added support for repository events. --- github.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/github.go b/github.go index 1e3711b..6e7c89d 100644 --- a/github.go +++ b/github.go @@ -75,6 +75,15 @@ func (s *Session) hookServer(port int, secret string) { payload.RefType, ) s.sendMessage(msg, "") + case gohook.RepositoryEventType: + payload, ok := et.Event.(*gohook.RepositoryEvent) + if !ok { + panic("Malformed *RepositoryEvent.") + } + msg := fmt.Sprintf("[ %s ] was created. ", + payload.Repository.Name, + ) + s.sendMessage(msg, "") } } } From 36497b48593195f6502fe7f2198d950da6587b68 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 11 May 2015 12:56:46 -0600 Subject: [PATCH 03/70] Added support for specifying secret and port. --- main/main.go | 4 ++++ session.go | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/main/main.go b/main/main.go index bd7c353..f897dbe 100644 --- a/main/main.go +++ b/main/main.go @@ -11,11 +11,15 @@ import ( var roomName string var password string var verbose bool +var port int +var secret string func init() { flag.StringVar(&roomName, "room", "test", "room for the bot to join.") flag.StringVar(&password, "pass", "", "optional password for the bot to join.") flag.BoolVar(&verbose, "v", false, "Toggle whether debug statements are displayed.") + flag.IntVar(&port, "port", "8080", "Specify the port to listen on for webhook events.") + flag.StringVar(&secret, "secret", "", "Secret string used to encrypt webhook events.") } func main() { diff --git a/session.go b/session.go index 274718b..31e7ddd 100644 --- a/session.go +++ b/session.go @@ -20,6 +20,8 @@ type Session struct { outbound chan *PacketEvent errChan chan error msgID int + port int + secret string logger *logrus.Logger } @@ -136,7 +138,7 @@ func (s *Session) outboundHandler() { } } -func NewSession(roomName, password string, logger *logrus.Logger) (*Session, error) { +func NewSession(roomName, password string, port int, secret string, logger *logrus.Logger) (*Session, error) { inbound := make(chan *PacketEvent) outbound := make(chan *PacketEvent) errChan := make(chan error) @@ -148,6 +150,8 @@ func NewSession(roomName, password string, logger *logrus.Logger) (*Session, err errChan: errChan, msgID: 0, logger: logger, + port: port, + secret: secret, } if err := s.connect(); err != nil { return nil, err @@ -163,6 +167,6 @@ func (s *Session) Run() { go s.inboundHandler() go s.receiver() go s.sendNick() - go s.hookServer(8888, "secret") + go s.hookServer(s.port, s.secret) <-s.errChan } From 30a5606c974b9683e2ba7890f352065f54d36058 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 11 May 2015 13:01:07 -0600 Subject: [PATCH 04/70] change default port to int from string --- main/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/main.go b/main/main.go index f897dbe..c24074f 100644 --- a/main/main.go +++ b/main/main.go @@ -18,7 +18,7 @@ func init() { flag.StringVar(&roomName, "room", "test", "room for the bot to join.") flag.StringVar(&password, "pass", "", "optional password for the bot to join.") flag.BoolVar(&verbose, "v", false, "Toggle whether debug statements are displayed.") - flag.IntVar(&port, "port", "8080", "Specify the port to listen on for webhook events.") + flag.IntVar(&port, "port", 8080, "Specify the port to listen on for webhook events.") flag.StringVar(&secret, "secret", "", "Secret string used to encrypt webhook events.") } From f30df5dfe97c694e447556dd790673abfc7eb9e4 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 11 May 2015 13:01:44 -0600 Subject: [PATCH 05/70] Update main script. --- main/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/main.go b/main/main.go index c24074f..4546f59 100644 --- a/main/main.go +++ b/main/main.go @@ -37,7 +37,7 @@ func main() { logrus.SetLevel(logrus.InfoLevel) } logger.Debugln("Flags parsed. Creating session...") - s, err := gb.NewSession(roomName, password, logger) + s, err := gb.NewSession(roomName, password, port, secret, logger) if err != nil { logger.Fatalf("Fatal error: creating session: %s", err) } From 6b54be65d142b6c7361477445aafce5315bb60ff Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sun, 17 May 2015 14:31:27 -0600 Subject: [PATCH 06/70] Added more robust disconnect handling. --- session.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/session.go b/session.go index 31e7ddd..88f8a9f 100644 --- a/session.go +++ b/session.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "strconv" + "time" "github.com/Sirupsen/logrus" "github.com/gorilla/websocket" @@ -25,7 +26,7 @@ type Session struct { logger *logrus.Logger } -func (s *Session) connect() error { +func (s *Session) connectOnce() error { s.logger.Debugln("Connecting to euphoria via TLS...") tlsConn, err := tls.Dial("tcp", "euphoria.io:443", &tls.Config{}) if err != nil { @@ -43,11 +44,27 @@ func (s *Session) connect() error { return nil } +func (s *Session) connect() error { + var err error + for i := 0; i < 5; i++ { + if err = s.connectOnce(); err == nil { + return nil + } + time.Sleep(time.Duration(i+1) * time.Second * 5) + } + return err +} + func (s *Session) receivePacket() error { var packet PacketEvent err := s.conn.ReadJSON(&packet) if err != nil { - return err + if err := s.connect(); err != nil { + return err + } + if err := s.conn.ReadJSON(&packet); err != nil { + return nil + } } s.inbound <- &packet return nil @@ -133,7 +150,12 @@ func (s *Session) outboundHandler() { s.logger.Debugf("Sending packet of type '%s'\n", packet.Type) err := s.conn.WriteJSON(packet) if err != nil { - s.logger.Fatalf("Error sending packet: %s\n", err) + if err := s.connect(); err != nil { + s.logger.Fatalf("Error sending packet: %s\n", err) + } + if err := s.conn.WriteJSON(packet); err != nil { + s.logger.Fatalf("Error sending packet: %s\n", err) + } } } } From f7547c37592674a59442fc960269a2c67dc5c084 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 18 May 2015 14:05:44 -0600 Subject: [PATCH 07/70] Added drone support. --- drone.go | 14 ++++++++++++++ session.go | 1 + 2 files changed, 15 insertions(+) create mode 100644 drone.go diff --git a/drone.go b/drone.go new file mode 100644 index 0000000..e3b3350 --- /dev/null +++ b/drone.go @@ -0,0 +1,14 @@ +package githubbot + +import ( + "github.com/cpalone/dronehook" +) + +func (s *Session) droneServer(port int) { + server := dronehook.NewServer(port, "/dronehook") + server.GoListenAndServe() + for { + p := <-server.Out + s.sendMessage(p.String(), "") + } +} diff --git a/session.go b/session.go index 88f8a9f..fb6b5d3 100644 --- a/session.go +++ b/session.go @@ -190,5 +190,6 @@ func (s *Session) Run() { go s.receiver() go s.sendNick() go s.hookServer(s.port, s.secret) + go s.droneServer(8081) <-s.errChan } From e589f9868e5b1591331bab0e59a298025cdf1b6e Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 18 May 2015 20:15:14 +0000 Subject: [PATCH 08/70] Update port. --- session.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/session.go b/session.go index fb6b5d3..62a4dae 100644 --- a/session.go +++ b/session.go @@ -190,6 +190,6 @@ func (s *Session) Run() { go s.receiver() go s.sendNick() go s.hookServer(s.port, s.secret) - go s.droneServer(8081) + go s.droneServer(8082) <-s.errChan } From 8d8f594d7a0cd5c41f90cefe2fd5716c28584902 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 18 May 2015 14:15:50 -0600 Subject: [PATCH 09/70] Add drone config file. --- .drone.yaml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .drone.yaml diff --git a/.drone.yaml b/.drone.yaml new file mode 100644 index 0000000..4b02019 --- /dev/null +++ b/.drone.yaml @@ -0,0 +1,4 @@ +notify: + webhook: + urls: + - "http://52.10.123.209:8082/dronehook" \ No newline at end of file From ef59816adc46216788fd70546f403b46ee0ea5a3 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 18 May 2015 21:24:33 +0000 Subject: [PATCH 10/70] Rename drone config. --- .drone.yaml => .drone.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .drone.yaml => .drone.yml (100%) diff --git a/.drone.yaml b/.drone.yml similarity index 100% rename from .drone.yaml rename to .drone.yml From 63ef324c7ee5b337c50978808c0d460f31b7fe44 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 18 May 2015 15:38:08 -0600 Subject: [PATCH 11/70] Update .drone.yml --- .drone.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 4b02019..7c0da89 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,4 +1,7 @@ notify: webhook: urls: - - "http://52.10.123.209:8082/dronehook" \ No newline at end of file + - "http://52.10.123.209:8082/dronehook" + - on_started: true + - on_success: true + - on_failure: true From 9a0766bddb4b22a1a8d4596728acc3f523e33f17 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 18 May 2015 15:45:05 -0600 Subject: [PATCH 12/70] Update .drone.yml --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 7c0da89..b9ef948 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,7 +1,7 @@ notify: webhook: urls: - - "http://52.10.123.209:8082/dronehook" + - http://52.10.123.209:8082/dronehook - on_started: true - on_success: true - on_failure: true From 06671baed1002657663798dc72bc66ba51150a0f Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 18 May 2015 15:47:58 -0600 Subject: [PATCH 13/70] Update .drone.yml --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index b9ef948..85e6676 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,7 +1,7 @@ notify: webhook: urls: - - http://52.10.123.209:8082/dronehook + - http://172.31.38.240:8082/dronehook - on_started: true - on_success: true - on_failure: true From b4fcf2ff4a768ea9a15e1ab18163596173371bba Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Mon, 18 May 2015 15:49:57 -0600 Subject: [PATCH 14/70] Update .drone.yml --- .drone.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.drone.yml b/.drone.yml index 85e6676..0c1b048 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2,6 +2,6 @@ notify: webhook: urls: - http://172.31.38.240:8082/dronehook - - on_started: true - - on_success: true - - on_failure: true + on_started: true + on_success: true + on_failure: true From 537abf6bef5d55e2e6cc95fa39f8ceb85355007c Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sat, 23 May 2015 14:47:55 -0600 Subject: [PATCH 15/70] Initial travis integration. --- session.go | 3 ++- travis.go | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 travis.go diff --git a/session.go b/session.go index 62a4dae..7bb0e6e 100644 --- a/session.go +++ b/session.go @@ -190,6 +190,7 @@ func (s *Session) Run() { go s.receiver() go s.sendNick() go s.hookServer(s.port, s.secret) - go s.droneServer(8082) + // go s.droneServer(8082) + go s.travisServer(8085) <-s.errChan } diff --git a/travis.go b/travis.go new file mode 100644 index 0000000..91bc052 --- /dev/null +++ b/travis.go @@ -0,0 +1,19 @@ +package githubbot + +import ( + "fmt" + + "github.com/cpalone/travishook" +) + +func (s *Session) travisServer(port int) { + server := travishook.NewServer(port, "/travishook") + server.GoListenAndServe() + for { + p := <-server.Out + fmt.Printf("Received payload with status: %s\n", p.Status) + s.sendMessage(fmt.Sprintf( + "[travis | %s | %s ] Status: %s", + p.Repository.Name, p.Branch, p.Status), "") + } +} From 1a575bad6b99baeb343a53ef31b3f8e4336c7064 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Sat, 23 May 2015 14:54:42 -0600 Subject: [PATCH 16/70] Create .travis.yml --- .travis.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4799e27 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,11 @@ +language: go + +go: + - 1.4 + +install: + - go get github.com/cpalone/dronehook + - go get github.com/cpalone/travishook + - go get github.com/cpalone/gohook + - go get github.com/Sirupsen/logrus + - go get github.com/gorilla/websocket From d5802e08de12c56e07c435943c08c6670dae352a Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Tue, 26 May 2015 13:49:36 -0600 Subject: [PATCH 17/70] Add support for pull request events and comments. --- github.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/github.go b/github.go index 6e7c89d..5581e3d 100644 --- a/github.go +++ b/github.go @@ -84,6 +84,30 @@ func (s *Session) hookServer(port int, secret string) { payload.Repository.Name, ) s.sendMessage(msg, "") + case gohook.PullRequestEventType: + payload, ok := et.Event.(*gohook.PullRequestEvent) + if !ok { + panic("Malformed *PullRequestEvent.") + } + msg := fmt.Sprintf("[ %s | %s ] %s", + payload.Repository.Name, + payload.PullRequest.Title, + payload.Action, + ) + s.sendMessage(msg, "") + case gohook.PullRequestReviewCommentEventType: + payload, ok := et.Event.(*gohook.PullRequestReviewCommentEvent) + if !ok { + panic("Malformed *PullRequestReviewCommentEvent.") + } + msg := fmt.Sprintf("[ %s | %s ] %s: %s", + payload.Repository.Name, + payload.PullRequest.Title, + payload.Sender.Login, + payload.Comment.Body, + ) + s.sendMessage(msg, "") } + } } From f67e968b13142f0bf94a859b65570e176678934d Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 29 May 2015 20:58:22 -0600 Subject: [PATCH 18/70] Send nick upon reconnect. --- session.go | 1 + 1 file changed, 1 insertion(+) diff --git a/session.go b/session.go index 7bb0e6e..844ef53 100644 --- a/session.go +++ b/session.go @@ -48,6 +48,7 @@ func (s *Session) connect() error { var err error for i := 0; i < 5; i++ { if err = s.connectOnce(); err == nil { + s.sendNick() return nil } time.Sleep(time.Duration(i+1) * time.Second * 5) From 9c2f461bd484c4cf6ea3a7100d6c3a15e1655458 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 29 May 2015 21:05:03 -0600 Subject: [PATCH 19/70] Don't run anything except github for debug. --- session.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/session.go b/session.go index 844ef53..2fa0d9d 100644 --- a/session.go +++ b/session.go @@ -192,6 +192,6 @@ func (s *Session) Run() { go s.sendNick() go s.hookServer(s.port, s.secret) // go s.droneServer(8082) - go s.travisServer(8085) + // go s.travisServer(8085) <-s.errChan } From 8e683d8d0f81797809681cc89dd44652e080c906 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 29 May 2015 21:15:05 -0600 Subject: [PATCH 20/70] Change some debug messages to info. --- github.go | 6 +++--- main/main.go | 4 ++-- session.go | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/github.go b/github.go index 5581e3d..df015c1 100644 --- a/github.go +++ b/github.go @@ -8,9 +8,9 @@ import ( func (s *Session) hookServer(port int, secret string) { server := gohook.NewServer(port, secret, "/postreceive") - s.logger.Debug("Starting webhook server...") + s.logger.Info("Starting webhook server...") server.GoListenAndServe() - s.logger.Debug("...started.") + s.logger.Info("...started.") for { et := <-server.EventAndTypes s.logger.Infof("Received hook event of type '%s'.", et.Type) @@ -18,7 +18,7 @@ func (s *Session) hookServer(port int, secret string) { case gohook.PingEventType: continue case gohook.PushEventType: - s.logger.Debug("Entering PushEventType case.") + s.logger.Info("Entering PushEventType case.") payload, ok := et.Event.(*gohook.PushEvent) if !ok { panic("Malformed *PushEvent.") diff --git a/main/main.go b/main/main.go index 4546f59..1da6217 100644 --- a/main/main.go +++ b/main/main.go @@ -17,8 +17,8 @@ var secret string func init() { flag.StringVar(&roomName, "room", "test", "room for the bot to join.") flag.StringVar(&password, "pass", "", "optional password for the bot to join.") - flag.BoolVar(&verbose, "v", false, "Toggle whether debug statements are displayed.") - flag.IntVar(&port, "port", 8080, "Specify the port to listen on for webhook events.") + flag.BoolVar(&verbose, "v", true, "Toggle whether debug statements are displayed.") + flag.IntVar(&port, "port", 8081, "Specify the port to listen on for webhook events.") flag.StringVar(&secret, "secret", "", "Secret string used to encrypt webhook events.") } diff --git a/session.go b/session.go index 2fa0d9d..955e760 100644 --- a/session.go +++ b/session.go @@ -96,7 +96,7 @@ func (s *Session) sendPayload(payload interface{}, pType PacketType) { } func (s *Session) sendAuth() { - s.logger.Debugln("Sending auth.") + s.logger.Infoln("Sending auth.") payload := AuthCommand{ Type: "passcode", Passcode: s.password} @@ -104,13 +104,13 @@ func (s *Session) sendAuth() { } func (s *Session) sendNick() { - s.logger.Debugln("Sending nick.") + s.logger.Infoln("Sending nick.") payload := NickCommand{Name: "GithubBot"} s.sendPayload(payload, NickType) } func (s *Session) sendMessage(text string, parent string) { - s.logger.Debugf("Sending text message: '%s'", text) + s.logger.Infof("Sending text message: '%s'", text) payload := SendCommand{ Content: text, Parent: parent, From f6c32fcd8c707cb1c222a0d6dcb53c38bdc489bb Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 29 May 2015 21:18:47 -0600 Subject: [PATCH 21/70] More debug --- main/main.go | 4 ++-- session.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/main/main.go b/main/main.go index 1da6217..a6bb6a9 100644 --- a/main/main.go +++ b/main/main.go @@ -36,11 +36,11 @@ func main() { } else { logrus.SetLevel(logrus.InfoLevel) } - logger.Debugln("Flags parsed. Creating session...") + logger.Infoln("Flags parsed. Creating session...") s, err := gb.NewSession(roomName, password, port, secret, logger) if err != nil { logger.Fatalf("Fatal error: creating session: %s", err) } - logger.Debugln("Session created.") + logger.Infoln("Session created.") s.Run() } diff --git a/session.go b/session.go index 955e760..37e824d 100644 --- a/session.go +++ b/session.go @@ -135,7 +135,7 @@ func (s *Session) handlePing(p *PacketEvent) { func (s *Session) inboundHandler() { for { packet := <-s.inbound - s.logger.Debugf("Receiving packet of type '%s'\n", packet.Type) + s.logger.Infof("Receiving packet of type '%s'\n", packet.Type) switch packet.Type { case PingEventType: s.handlePing(packet) @@ -148,7 +148,7 @@ func (s *Session) inboundHandler() { func (s *Session) outboundHandler() { for { packet := <-s.outbound - s.logger.Debugf("Sending packet of type '%s'\n", packet.Type) + s.logger.Infof("Sending packet of type '%s'\n", packet.Type) err := s.conn.WriteJSON(packet) if err != nil { if err := s.connect(); err != nil { From 4230b57c90166c006705d8a6a7045c4cd4461d9f Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 29 May 2015 21:23:28 -0600 Subject: [PATCH 22/70] more debug --- session.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/session.go b/session.go index 37e824d..61f94cc 100644 --- a/session.go +++ b/session.go @@ -50,8 +50,10 @@ func (s *Session) connect() error { if err = s.connectOnce(); err == nil { s.sendNick() return nil + } else { + s.logger.Infof("Error while connecting: %s\n", err) + time.Sleep(time.Duration(i+1) * time.Second * 5) } - time.Sleep(time.Duration(i+1) * time.Second * 5) } return err } From fa032877a2b6d3b993474f880ba49d0632241126 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 29 May 2015 21:25:42 -0600 Subject: [PATCH 23/70] and more debug --- session.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/session.go b/session.go index 61f94cc..b9710de 100644 --- a/session.go +++ b/session.go @@ -48,7 +48,7 @@ func (s *Session) connect() error { var err error for i := 0; i < 5; i++ { if err = s.connectOnce(); err == nil { - s.sendNick() + go s.sendNick() return nil } else { s.logger.Infof("Error while connecting: %s\n", err) From 2358efb777125325b682e7e2bfa5322574c9ba03 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 1 Jun 2015 18:56:09 -0600 Subject: [PATCH 24/70] Standardized event messages. --- github.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/github.go b/github.go index df015c1..b59c8c7 100644 --- a/github.go +++ b/github.go @@ -23,7 +23,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *PushEvent.") } - msg := fmt.Sprintf("[ %s | %s ] Commit: %s (%s)", + msg := fmt.Sprintf("[ %s | Branch %s ] Commit: %s (%s)", payload.Repository.Name, payload.Ref[11:], // this discards "refs/heads/" payload.HeadCommit.Message, @@ -35,6 +35,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *CommitCommentEvent.") } + // TODO: can we get the branch here? msg := fmt.Sprintf("[ %s ] Comment on commit: %s (%s)", payload.Repository.Name, payload.Comment.Body, @@ -46,7 +47,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *CommitCommentEvent.") } - msg := fmt.Sprintf("[ %s ] Comment on issue '%s': %s (%s)", + msg := fmt.Sprintf("[ %s | Issue %s ] Comment: %s (%s)", payload.Repository.Name, payload.Issue.Title, payload.Comment.Body, @@ -58,7 +59,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *IssuesEvent.") } - msg := fmt.Sprintf("[ %s ] Issue '%s' was %s. (%s)", + msg := fmt.Sprintf("[ %s | Issue %s ] Action: %s. (%s)", payload.Repository.Name, payload.Issue.Title, payload.Action, @@ -70,6 +71,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *CreateEvent.") } + // TODO: Figure out what to do here msg := fmt.Sprintf("[ %s ] %s created.", payload.Repository.Name, payload.RefType, @@ -80,7 +82,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *RepositoryEvent.") } - msg := fmt.Sprintf("[ %s ] was created. ", + msg := fmt.Sprintf("[ Repository %s ] Action: created. ", payload.Repository.Name, ) s.sendMessage(msg, "") @@ -100,7 +102,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *PullRequestReviewCommentEvent.") } - msg := fmt.Sprintf("[ %s | %s ] %s: %s", + msg := fmt.Sprintf("[ %s | Pull Request %s ] Comment: %s: %s", payload.Repository.Name, payload.PullRequest.Title, payload.Sender.Login, From bece041a597885eebe89b493f6dbffe31d192b72 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 1 Jun 2015 19:06:04 -0600 Subject: [PATCH 25/70] Add support for DeleteEvents and sort by alpha. --- github.go | 77 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/github.go b/github.go index b59c8c7..ae09d6d 100644 --- a/github.go +++ b/github.go @@ -17,19 +17,6 @@ func (s *Session) hookServer(port int, secret string) { switch et.Type { case gohook.PingEventType: continue - case gohook.PushEventType: - s.logger.Info("Entering PushEventType case.") - payload, ok := et.Event.(*gohook.PushEvent) - if !ok { - panic("Malformed *PushEvent.") - } - msg := fmt.Sprintf("[ %s | Branch %s ] Commit: %s (%s)", - payload.Repository.Name, - payload.Ref[11:], // this discards "refs/heads/" - payload.HeadCommit.Message, - payload.HeadCommit.URL, - ) - s.sendMessage(msg, "") case gohook.CommitCommentEventType: payload, ok := et.Event.(*gohook.CommitCommentEvent) if !ok { @@ -42,6 +29,28 @@ func (s *Session) hookServer(port int, secret string) { payload.Comment.HTMLURL, ) s.sendMessage(msg, "") + case gohook.CreateEventType: + payload, ok := et.Event.(*gohook.CreateEvent) + if !ok { + panic("Malformed *CreateEvent.") + } + // TODO: Figure out what to do here + msg := fmt.Sprintf("[ %s ] %s created.", + payload.Repository.Name, + payload.RefType, + ) + s.sendMessage(msg, "") + case gohook.DeleteEventType: + payload, ok := et.Event.(*gohook.DeleteEvent) + if !ok { + panic("Malformed *DeleteEvent.") + } + // TODO: Figure out what to do here + msg := fmt.Sprintf("[ %s ] %s deleted.", + payload.Repository, + payload.RefType, + ) + s.sendMessage(msg, "") case gohook.IssueCommentEventType: payload, ok := et.Event.(*gohook.IssueCommentEvent) if !ok { @@ -66,26 +75,6 @@ func (s *Session) hookServer(port int, secret string) { payload.Issue.HTMLURL, ) s.sendMessage(msg, "") - case gohook.CreateEventType: - payload, ok := et.Event.(*gohook.CreateEvent) - if !ok { - panic("Malformed *CreateEvent.") - } - // TODO: Figure out what to do here - msg := fmt.Sprintf("[ %s ] %s created.", - payload.Repository.Name, - payload.RefType, - ) - s.sendMessage(msg, "") - case gohook.RepositoryEventType: - payload, ok := et.Event.(*gohook.RepositoryEvent) - if !ok { - panic("Malformed *RepositoryEvent.") - } - msg := fmt.Sprintf("[ Repository %s ] Action: created. ", - payload.Repository.Name, - ) - s.sendMessage(msg, "") case gohook.PullRequestEventType: payload, ok := et.Event.(*gohook.PullRequestEvent) if !ok { @@ -109,6 +98,28 @@ func (s *Session) hookServer(port int, secret string) { payload.Comment.Body, ) s.sendMessage(msg, "") + case gohook.PushEventType: + s.logger.Info("Entering PushEventType case.") + payload, ok := et.Event.(*gohook.PushEvent) + if !ok { + panic("Malformed *PushEvent.") + } + msg := fmt.Sprintf("[ %s | Branch %s ] Commit: %s (%s)", + payload.Repository.Name, + payload.Ref[11:], // this discards "refs/heads/" + payload.HeadCommit.Message, + payload.HeadCommit.URL, + ) + s.sendMessage(msg, "") + case gohook.RepositoryEventType: + payload, ok := et.Event.(*gohook.RepositoryEvent) + if !ok { + panic("Malformed *RepositoryEvent.") + } + msg := fmt.Sprintf("[ Repository %s ] Action: created. ", + payload.Repository.Name, + ) + s.sendMessage(msg, "") } } From 6e953a08bfa4e9974eca6c97e070e84430d7e2e7 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 1 Jun 2015 20:53:35 -0600 Subject: [PATCH 26/70] Add uptime command. --- github.go | 18 ++++++++---------- packet.go | 4 ++++ session.go | 23 +++++++++++++++++++++++ 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/github.go b/github.go index ae09d6d..4965195 100644 --- a/github.go +++ b/github.go @@ -34,8 +34,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *CreateEvent.") } - // TODO: Figure out what to do here - msg := fmt.Sprintf("[ %s ] %s created.", + msg := fmt.Sprintf("[ %s | Branch/Tag: %s] Created.", payload.Repository.Name, payload.RefType, ) @@ -45,8 +44,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *DeleteEvent.") } - // TODO: Figure out what to do here - msg := fmt.Sprintf("[ %s ] %s deleted.", + msg := fmt.Sprintf("[ %s | Branch/Tag: %s] Deleted.", payload.Repository, payload.RefType, ) @@ -56,7 +54,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *CommitCommentEvent.") } - msg := fmt.Sprintf("[ %s | Issue %s ] Comment: %s (%s)", + msg := fmt.Sprintf("[ %s | Issue: %s ] Comment: %s (%s)", payload.Repository.Name, payload.Issue.Title, payload.Comment.Body, @@ -68,7 +66,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *IssuesEvent.") } - msg := fmt.Sprintf("[ %s | Issue %s ] Action: %s. (%s)", + msg := fmt.Sprintf("[ %s | Issue: %s ] Action: %s. (%s)", payload.Repository.Name, payload.Issue.Title, payload.Action, @@ -80,7 +78,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *PullRequestEvent.") } - msg := fmt.Sprintf("[ %s | %s ] %s", + msg := fmt.Sprintf("[ %s | PR: %s ] %s", payload.Repository.Name, payload.PullRequest.Title, payload.Action, @@ -91,7 +89,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *PullRequestReviewCommentEvent.") } - msg := fmt.Sprintf("[ %s | Pull Request %s ] Comment: %s: %s", + msg := fmt.Sprintf("[ %s | PR: %s ] Comment: %s: %s", payload.Repository.Name, payload.PullRequest.Title, payload.Sender.Login, @@ -104,7 +102,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *PushEvent.") } - msg := fmt.Sprintf("[ %s | Branch %s ] Commit: %s (%s)", + msg := fmt.Sprintf("[ %s | Branch: %s ] Commit: %s (%s)", payload.Repository.Name, payload.Ref[11:], // this discards "refs/heads/" payload.HeadCommit.Message, @@ -116,7 +114,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *RepositoryEvent.") } - msg := fmt.Sprintf("[ Repository %s ] Action: created. ", + msg := fmt.Sprintf("[ Repository: %s ] Action: created. ", payload.Repository.Name, ) s.sendMessage(msg, "") diff --git a/packet.go b/packet.go index 7c424b1..598a69f 100644 --- a/packet.go +++ b/packet.go @@ -49,6 +49,8 @@ type SendCommand struct { Parent string `json:"parent"` } +type SendEvent SendCommand + type NickCommand struct { Name string `json:"name"` } @@ -69,6 +71,8 @@ func (p *PacketEvent) Payload() (interface{}, error) { payload = &PingReply{} case AuthType: payload = &AuthCommand{} + case SendEventType: + payload = &SendEvent{} default: return p.Data, fmt.Errorf("Unexpected packet type: %s", p.Type) } diff --git a/session.go b/session.go index b9710de..ca3ba9f 100644 --- a/session.go +++ b/session.go @@ -24,6 +24,7 @@ type Session struct { port int secret string logger *logrus.Logger + uptime time.Time } func (s *Session) connectOnce() error { @@ -134,6 +135,25 @@ func (s *Session) handlePing(p *PacketEvent) { s.sendPayload(out, PingReplyType) } +func (s *Session) handleSend(p *PacketEvent) { + s.logger.Debugln("Handling send-event.") + data, err := p.Payload() + if err != nil { + panic(err) + } + payload, ok := data.(*SendEvent) + if !ok { + logrus.Fatalln("Cannot assert *SendEvent as such.") + } + if payload.Content == "!uptime" { + since := time.Since(s.uptime) + s.sendMessage(fmt.Sprintf( + "This bot has been up for %s.", + since.String()), + p.ID) + } +} + func (s *Session) inboundHandler() { for { packet := <-s.inbound @@ -141,6 +161,8 @@ func (s *Session) inboundHandler() { switch packet.Type { case PingEventType: s.handlePing(packet) + case SendEventType: + s.handleSend(packet) default: s.logger.Infof("Unhandled packet type '%s'", packet.Type) } @@ -177,6 +199,7 @@ func NewSession(roomName, password string, port int, secret string, logger *logr logger: logger, port: port, secret: secret, + uptime: time.Now(), } if err := s.connect(); err != nil { return nil, err From 3f725aab99972dd99ce5045e70ddee024aa6273f Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 1 Jun 2015 21:18:55 -0600 Subject: [PATCH 27/70] Try everything in .drone.yml? --- .drone.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.drone.yml b/.drone.yml index 0c1b048..8875b90 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,3 +1,9 @@ +image: go1.4 +git: + path: github.com/cpalone/githubbot +script: + - go get + - go build notify: webhook: urls: From d0a5f420c1c7c852319287f9326c187c6de0cdcf Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 1 Jun 2015 21:43:05 -0600 Subject: [PATCH 28/70] Testing out travis cfg. --- .travis.yml | 5 ++++- session.go | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4799e27..c15e9e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,13 @@ language: go go: - 1.4 - + install: - go get github.com/cpalone/dronehook - go get github.com/cpalone/travishook - go get github.com/cpalone/gohook - go get github.com/Sirupsen/logrus - go get github.com/gorilla/websocket + +notifications: + webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file diff --git a/session.go b/session.go index ca3ba9f..0d0c297 100644 --- a/session.go +++ b/session.go @@ -217,6 +217,6 @@ func (s *Session) Run() { go s.sendNick() go s.hookServer(s.port, s.secret) // go s.droneServer(8082) - // go s.travisServer(8085) + go s.travisServer(8085) <-s.errChan } From 604e029522ca47c6671248b9be53173f5ca099e5 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 1 Jun 2015 21:52:10 -0600 Subject: [PATCH 29/70] Update .travis.yml. --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index c15e9e0..933bac7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,5 +10,7 @@ install: - go get github.com/Sirupsen/logrus - go get github.com/gorilla/websocket +script: go test ./... + notifications: webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file From 6bf6eaffe2f78d374a53246312016b5a78f7bea3 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 1 Jun 2015 21:57:52 -0600 Subject: [PATCH 30/70] Update import path. --- main/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/main.go b/main/main.go index a6bb6a9..f2b533b 100644 --- a/main/main.go +++ b/main/main.go @@ -5,7 +5,7 @@ import ( "os" "github.com/Sirupsen/logrus" - gb "github.com/fireside-chat/githubbot" + gb "github.com/cpalone/githubbot" ) var roomName string From ece92fede5fce747a63cc26f112b2a1c2dc6173a Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Tue, 2 Jun 2015 05:10:13 +0000 Subject: [PATCH 31/70] Edit message. --- travis.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/travis.go b/travis.go index 91bc052..6642151 100644 --- a/travis.go +++ b/travis.go @@ -11,9 +11,9 @@ func (s *Session) travisServer(port int) { server.GoListenAndServe() for { p := <-server.Out - fmt.Printf("Received payload with status: %s\n", p.Status) + fmt.Printf("Received payload with status: %s\n", p.StatusMessage) s.sendMessage(fmt.Sprintf( "[travis | %s | %s ] Status: %s", - p.Repository.Name, p.Branch, p.Status), "") + p.Repository.Name, p.Branch, p.StatusMessage), "") } } From aa13ef1c2b2910f73c1c92e92071fa650c98809a Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Tue, 2 Jun 2015 05:17:56 +0000 Subject: [PATCH 32/70] Try older version of go? --- .drone.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 8875b90..3059632 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,9 @@ -image: go1.4 +image: go1.2 git: path: github.com/cpalone/githubbot +env: + - GOROOT=/usr/local/go + - PATH=$PATH:$GOROOT/bin:$GOPATH/bin script: - go get - go build From ba111fbd9a85841391df25407546c4a7ddb4e28f Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Tue, 2 Jun 2015 05:28:52 +0000 Subject: [PATCH 33/70] debugging --- .drone.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.drone.yml b/.drone.yml index 3059632..8903856 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,6 +7,7 @@ env: script: - go get - go build + - echo from-yml notify: webhook: urls: From cbe28a07da3a782b0561ff3d4d31f279e51cd7a1 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Tue, 2 Jun 2015 01:38:15 -0600 Subject: [PATCH 34/70] Update to recent image. --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 8903856..7d55325 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,4 +1,4 @@ -image: go1.2 +image: go1.4 git: path: github.com/cpalone/githubbot env: From 288599a526abc8b544d8f5901283910e8cc15259 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Tue, 2 Jun 2015 05:10:13 +0000 Subject: [PATCH 35/70] Edit message. --- .drone.yml | 4 ++++ travis.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 8875b90..7d55325 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,9 +1,13 @@ image: go1.4 git: path: github.com/cpalone/githubbot +env: + - GOROOT=/usr/local/go + - PATH=$PATH:$GOROOT/bin:$GOPATH/bin script: - go get - go build + - echo from-yml notify: webhook: urls: diff --git a/travis.go b/travis.go index 91bc052..6642151 100644 --- a/travis.go +++ b/travis.go @@ -11,9 +11,9 @@ func (s *Session) travisServer(port int) { server.GoListenAndServe() for { p := <-server.Out - fmt.Printf("Received payload with status: %s\n", p.Status) + fmt.Printf("Received payload with status: %s\n", p.StatusMessage) s.sendMessage(fmt.Sprintf( "[travis | %s | %s ] Status: %s", - p.Repository.Name, p.Branch, p.Status), "") + p.Repository.Name, p.Branch, p.StatusMessage), "") } } From 4c5fb5fc421bbbfb0919a21f9e5230f28af00270 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Tue, 2 Jun 2015 08:36:07 +0000 Subject: [PATCH 36/70] Enable drone. --- .drone.yml | 7 ++----- session.go | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.drone.yml b/.drone.yml index 8903856..c664dd0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,9 +1,6 @@ -image: go1.2 +image: go1.4 git: path: github.com/cpalone/githubbot -env: - - GOROOT=/usr/local/go - - PATH=$PATH:$GOROOT/bin:$GOPATH/bin script: - go get - go build @@ -11,7 +8,7 @@ script: notify: webhook: urls: - - http://172.31.38.240:8082/dronehook + - http://52.10.123.209:8082/dronehook on_started: true on_success: true on_failure: true diff --git a/session.go b/session.go index 0d0c297..ed1fe78 100644 --- a/session.go +++ b/session.go @@ -216,7 +216,7 @@ func (s *Session) Run() { go s.receiver() go s.sendNick() go s.hookServer(s.port, s.secret) - // go s.droneServer(8082) + go s.droneServer(8082) go s.travisServer(8085) <-s.errChan } From 1979c971ae77c6ac1e0b4d1fe51ecd27e527f5fb Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Tue, 2 Jun 2015 02:42:35 -0600 Subject: [PATCH 37/70] Use earlier go version. --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 57cdf5f..5fcce64 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,4 +1,4 @@ -image: go1.4 +image: go1.3 git: path: github.com/cpalone/githubbot env: From dbc2a8fcd934fb70ee18deea7a77b8612492411b Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Tue, 2 Jun 2015 08:49:15 +0000 Subject: [PATCH 38/70] Clean up debug. --- .drone.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index 5fcce64..9a08f45 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,9 +1,4 @@ image: go1.3 -git: - path: github.com/cpalone/githubbot -env: - - GOROOT=/usr/local/go - - PATH=$PATH:$GOROOT/bin:$GOPATH/bin script: - go get - go build From aab5f747e7d8a003ec2d8cba55058818a7643653 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Tue, 2 Jun 2015 03:37:06 -0600 Subject: [PATCH 39/70] Change verbosity default to off. --- main/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/main.go b/main/main.go index f2b533b..3d2728f 100644 --- a/main/main.go +++ b/main/main.go @@ -17,7 +17,7 @@ var secret string func init() { flag.StringVar(&roomName, "room", "test", "room for the bot to join.") flag.StringVar(&password, "pass", "", "optional password for the bot to join.") - flag.BoolVar(&verbose, "v", true, "Toggle whether debug statements are displayed.") + flag.BoolVar(&verbose, "v", false, "Toggle whether debug statements are displayed.") flag.IntVar(&port, "port", 8081, "Specify the port to listen on for webhook events.") flag.StringVar(&secret, "secret", "", "Secret string used to encrypt webhook events.") } From b6eef144d0a1f21f050874586bc4baeb561e70f4 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Tue, 2 Jun 2015 03:40:43 -0600 Subject: [PATCH 40/70] Formatting. --- travis.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/travis.go b/travis.go index 6642151..7b0f547 100644 --- a/travis.go +++ b/travis.go @@ -13,7 +13,7 @@ func (s *Session) travisServer(port int) { p := <-server.Out fmt.Printf("Received payload with status: %s\n", p.StatusMessage) s.sendMessage(fmt.Sprintf( - "[travis | %s | %s ] Status: %s", - p.Repository.Name, p.Branch, p.StatusMessage), "") + "[travis | %s | %s ] Commit '%s' - Status '%s.'", + p.Repository.Name, p.Branch,p.Com p.StatusMessage), "") } } From e7fa5bbb30e4841c1edbc525c3477c8e405a0ab9 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Tue, 2 Jun 2015 03:47:45 -0600 Subject: [PATCH 41/70] Fix syntax error. --- travis.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis.go b/travis.go index 7b0f547..d50f338 100644 --- a/travis.go +++ b/travis.go @@ -14,6 +14,6 @@ func (s *Session) travisServer(port int) { fmt.Printf("Received payload with status: %s\n", p.StatusMessage) s.sendMessage(fmt.Sprintf( "[travis | %s | %s ] Commit '%s' - Status '%s.'", - p.Repository.Name, p.Branch,p.Com p.StatusMessage), "") + p.Repository.Name, p.Branch, p.Commit, p.StatusMessage), "") } } From 40320f521de62cbc5f8823208a21dc06f76a1d75 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 5 Jun 2015 13:47:16 -0600 Subject: [PATCH 42/70] Remove debug statement. --- .drone.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 9a08f45..703b5b5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2,7 +2,6 @@ image: go1.3 script: - go get - go build - - echo from-yml notify: webhook: urls: From 60f9a67154af1f3680da2467732a11f391434339 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 5 Jun 2015 14:33:18 -0600 Subject: [PATCH 43/70] Remove webhooks. --- .drone.yml | 11 ----------- .travis.yml | 3 --- 2 files changed, 14 deletions(-) delete mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 703b5b5..0000000 --- a/.drone.yml +++ /dev/null @@ -1,11 +0,0 @@ -image: go1.3 -script: - - go get - - go build -notify: - webhook: - urls: - - http://52.10.123.209:8082/dronehook - on_started: true - on_success: true - on_failure: true diff --git a/.travis.yml b/.travis.yml index 933bac7..9a652e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,3 @@ install: - go get github.com/gorilla/websocket script: go test ./... - -notifications: - webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file From 02ef77476f04338aedcce69d171c5682aab34dba Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Wed, 10 Jun 2015 12:01:21 -0600 Subject: [PATCH 44/70] Move .String() from dronehook to the bot. --- drone.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drone.go b/drone.go index e3b3350..e56f959 100644 --- a/drone.go +++ b/drone.go @@ -9,6 +9,19 @@ func (s *Session) droneServer(port int) { server.GoListenAndServe() for { p := <-server.Out - s.sendMessage(p.String(), "") + var emoji string + if p.Commit.Status == "Success" { + emoji = ":white_check_mark:" + } else { + emoji = ":x:" + } + str := fmt.Sprintf("%s [ drone.io | %s | %s ] %s | %s", + emoji, + p.Repository.Name, + p.Commit.Branch, + p.Commit.Message, + p.Commit.Status, + ) + s.sendMessage(str, "") } } From b35f30cc18c0cc824f6e4c8a70f7e88bbf13e293 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Wed, 10 Jun 2015 13:51:52 -0600 Subject: [PATCH 45/70] CI message formatting. --- drone.go | 2 +- travis.go | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drone.go b/drone.go index e56f959..200bbe6 100644 --- a/drone.go +++ b/drone.go @@ -15,7 +15,7 @@ func (s *Session) droneServer(port int) { } else { emoji = ":x:" } - str := fmt.Sprintf("%s [ drone.io | %s | %s ] %s | %s", + str := fmt.Sprintf("%s [ drone.io | Branch: %s | %s ] %s | %s", emoji, p.Repository.Name, p.Commit.Branch, diff --git a/travis.go b/travis.go index d50f338..199c25e 100644 --- a/travis.go +++ b/travis.go @@ -11,9 +11,16 @@ func (s *Session) travisServer(port int) { server.GoListenAndServe() for { p := <-server.Out + var emoji string + if p.StatusMessage == "Passed" || p.StatusMessage == "Fixed" { + emoji = ":white_check_mark:" + } else { + emoji = ":no_entry:" + } + fmt.Printf("Received payload with status: %s\n", p.StatusMessage) s.sendMessage(fmt.Sprintf( - "[travis | %s | %s ] Commit '%s' - Status '%s.'", - p.Repository.Name, p.Branch, p.Commit, p.StatusMessage), "") + "%s [ travis.ci | Branch: %s | %s ] %s | %s.", + emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), "") } } From 98a4d0626b633678a9c72817c2ef88078ab523cc Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Wed, 10 Jun 2015 19:53:13 +0000 Subject: [PATCH 46/70] Fix missing import. --- drone.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drone.go b/drone.go index 200bbe6..ea1566b 100644 --- a/drone.go +++ b/drone.go @@ -1,6 +1,8 @@ package githubbot import ( + "fmt" + "github.com/cpalone/dronehook" ) From e831c57b7930bc50d420d6b1f81279dab8b7728f Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Wed, 10 Jun 2015 19:54:35 +0000 Subject: [PATCH 47/70] Emoji changed. --- drone.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drone.go b/drone.go index ea1566b..9100577 100644 --- a/drone.go +++ b/drone.go @@ -15,7 +15,7 @@ func (s *Session) droneServer(port int) { if p.Commit.Status == "Success" { emoji = ":white_check_mark:" } else { - emoji = ":x:" + emoji = ":no_entry:" } str := fmt.Sprintf("%s [ drone.io | Branch: %s | %s ] %s | %s", emoji, From 20c10bac10f73ef3cff490fba0e5fcf95cfef8e9 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Thu, 11 Jun 2015 12:14:39 -0600 Subject: [PATCH 48/70] Update github.go --- github.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github.go b/github.go index 4965195..f04b40d 100644 --- a/github.go +++ b/github.go @@ -102,7 +102,7 @@ func (s *Session) hookServer(port int, secret string) { if !ok { panic("Malformed *PushEvent.") } - msg := fmt.Sprintf("[ %s | Branch: %s ] Commit: %s (%s)", + msg := fmt.Sprintf(":repeat: [ %s | Branch: %s ] Commit: %s (%s)", payload.Repository.Name, payload.Ref[11:], // this discards "refs/heads/" payload.HeadCommit.Message, From e3ca91be286f08b9441b9980fa81f86e0b434cd4 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Fri, 12 Jun 2015 23:08:03 -0600 Subject: [PATCH 49/70] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04cb9a2..ea6ce1e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# fireside-gitbot +# gitbot Listens for github webhook events and posts them as messages to a Euphoria room. From 399f151812e7fb05309fd0824e2a2b150ba6030e Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sat, 13 Jun 2015 12:46:00 -0600 Subject: [PATCH 50/70] Reply to commit message with build statuses. --- drone.go | 2 +- packet.go | 17 ++++++++++++++++- session.go | 41 ++++++++++++++++++++++++++++++----------- travis.go | 2 +- 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/drone.go b/drone.go index 9100577..74a9535 100644 --- a/drone.go +++ b/drone.go @@ -24,6 +24,6 @@ func (s *Session) droneServer(port int) { p.Commit.Message, p.Commit.Status, ) - s.sendMessage(str, "") + s.sendMessage(str, s.commitMsgID) } } diff --git a/packet.go b/packet.go index 598a69f..3470f3f 100644 --- a/packet.go +++ b/packet.go @@ -49,7 +49,20 @@ type SendCommand struct { Parent string `json:"parent"` } -type SendEvent SendCommand +type Message struct { + ID string `json:"id"` + Parent string `json:"parent"` + PreviousEditID string `json:"previous_edit_id,omitempty"` + UnixTime int64 `json:"time"` + Sender string `json:"sender"` + Content string `json:"content"` + EncryptionKeyID string `json:"encryption_key_id,omitempty"` + Edited int64 `json:"edited,omitempty"` + Deleted int64 `json:"deleted,omitempty"` +} + +type SendEvent Message +type SendReply Message type NickCommand struct { Name string `json:"name"` @@ -73,6 +86,8 @@ func (p *PacketEvent) Payload() (interface{}, error) { payload = &AuthCommand{} case SendEventType: payload = &SendEvent{} + case SendReplyType: + payload = &SendReply{} default: return p.Data, fmt.Errorf("Unexpected packet type: %s", p.Type) } diff --git a/session.go b/session.go index ed1fe78..612c812 100644 --- a/session.go +++ b/session.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "strconv" + "strings" "time" "github.com/Sirupsen/logrus" @@ -14,17 +15,18 @@ import ( ) type Session struct { - RoomName string - password string - conn *websocket.Conn - inbound chan *PacketEvent - outbound chan *PacketEvent - errChan chan error - msgID int - port int - secret string - logger *logrus.Logger - uptime time.Time + RoomName string + password string + conn *websocket.Conn + inbound chan *PacketEvent + outbound chan *PacketEvent + errChan chan error + msgID int + port int + secret string + logger *logrus.Logger + uptime time.Time + commitMsgID string } func (s *Session) connectOnce() error { @@ -154,6 +156,21 @@ func (s *Session) handleSend(p *PacketEvent) { } } +func (s *Session) handleSendReply(p *PacketEvent) { + s.logger.Debugln("Handling send-reply...") + data, err := p.Payload() + if err != nil { + panic(err) + } + payload, ok := data.(*SendReply) + if !ok { + s.logger.Fatalln("Cannot assert *SendReplyType as such.") + } + if strings.HasPrefix(payload.Content, ":repeat:") { + s.commitMsgID = payload.ID + } +} + func (s *Session) inboundHandler() { for { packet := <-s.inbound @@ -163,6 +180,8 @@ func (s *Session) inboundHandler() { s.handlePing(packet) case SendEventType: s.handleSend(packet) + case SendReplyType: + s.handleSendReply(packet) default: s.logger.Infof("Unhandled packet type '%s'", packet.Type) } diff --git a/travis.go b/travis.go index 199c25e..20f6597 100644 --- a/travis.go +++ b/travis.go @@ -21,6 +21,6 @@ func (s *Session) travisServer(port int) { fmt.Printf("Received payload with status: %s\n", p.StatusMessage) s.sendMessage(fmt.Sprintf( "%s [ travis.ci | Branch: %s | %s ] %s | %s.", - emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), "") + emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), s.commitMsgID) } } From 57cff66aef58d466d6fac4f0fe31ece62e8bdcc7 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Fri, 12 Jun 2015 23:08:03 -0600 Subject: [PATCH 51/70] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04cb9a2..ea6ce1e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# fireside-gitbot +# gitbot Listens for github webhook events and posts them as messages to a Euphoria room. From 6c943a611aee49ec17dd778fee8751490c338cca Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sat, 13 Jun 2015 13:02:20 -0600 Subject: [PATCH 52/70] Fix packet type. --- packet.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packet.go b/packet.go index 3470f3f..0a7a44b 100644 --- a/packet.go +++ b/packet.go @@ -49,16 +49,23 @@ type SendCommand struct { Parent string `json:"parent"` } -type Message struct { +]type Message struct { ID string `json:"id"` Parent string `json:"parent"` PreviousEditID string `json:"previous_edit_id,omitempty"` - UnixTime int64 `json:"time"` - Sender string `json:"sender"` + Time int64 `json:"time"` + Sender User `json:"sender"` Content string `json:"content"` EncryptionKeyID string `json:"encryption_key_id,omitempty"` - Edited int64 `json:"edited,omitempty"` - Deleted int64 `json:"deleted,omitempty"` + Edited int `json:"edited,omitempty"` + Deleted int `json:"deleted,omitempty"` +} + +type User struct { + ID string `json:"id"` + Name string `json:"name"` + ServerID string `json:"server_id"` + ServerEra string `json:"server_era"` } type SendEvent Message From 7ef0724e570ff98fd2690af241fa2f79023cefae Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sun, 14 Jun 2015 11:47:30 -0600 Subject: [PATCH 53/70] Refactor: can now specify packet ID. --- drone.go | 4 +++- github.go | 45 ++++++++++++++++++++++++++++----------------- packet.go | 2 +- session.go | 20 ++++++++++++-------- travis.go | 6 +++++- 5 files changed, 49 insertions(+), 28 deletions(-) diff --git a/drone.go b/drone.go index 74a9535..d4ccd51 100644 --- a/drone.go +++ b/drone.go @@ -2,6 +2,7 @@ package githubbot import ( "fmt" + "strconv" "github.com/cpalone/dronehook" ) @@ -24,6 +25,7 @@ func (s *Session) droneServer(port int) { p.Commit.Message, p.Commit.Status, ) - s.sendMessage(str, s.commitMsgID) + s.sendMessage(str, s.commitMsgID, strconv.Itoa(s.msgID)) + s.msgID++ } } diff --git a/github.go b/github.go index f04b40d..bbd60cf 100644 --- a/github.go +++ b/github.go @@ -2,6 +2,8 @@ package githubbot import ( "fmt" + "strconv" + "time" "github.com/cpalone/gohook" ) @@ -28,7 +30,8 @@ func (s *Session) hookServer(port int, secret string) { payload.Comment.Body, payload.Comment.HTMLURL, ) - s.sendMessage(msg, "") + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ case gohook.CreateEventType: payload, ok := et.Event.(*gohook.CreateEvent) if !ok { @@ -38,7 +41,8 @@ func (s *Session) hookServer(port int, secret string) { payload.Repository.Name, payload.RefType, ) - s.sendMessage(msg, "") + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ case gohook.DeleteEventType: payload, ok := et.Event.(*gohook.DeleteEvent) if !ok { @@ -48,7 +52,8 @@ func (s *Session) hookServer(port int, secret string) { payload.Repository, payload.RefType, ) - s.sendMessage(msg, "") + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ case gohook.IssueCommentEventType: payload, ok := et.Event.(*gohook.IssueCommentEvent) if !ok { @@ -60,7 +65,8 @@ func (s *Session) hookServer(port int, secret string) { payload.Comment.Body, payload.Comment.HTMLURL, ) - s.sendMessage(msg, "") + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ case gohook.IssuesEventType: payload, ok := et.Event.(*gohook.IssuesEvent) if !ok { @@ -72,7 +78,8 @@ func (s *Session) hookServer(port int, secret string) { payload.Action, payload.Issue.HTMLURL, ) - s.sendMessage(msg, "") + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ case gohook.PullRequestEventType: payload, ok := et.Event.(*gohook.PullRequestEvent) if !ok { @@ -83,7 +90,8 @@ func (s *Session) hookServer(port int, secret string) { payload.PullRequest.Title, payload.Action, ) - s.sendMessage(msg, "") + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ case gohook.PullRequestReviewCommentEventType: payload, ok := et.Event.(*gohook.PullRequestReviewCommentEvent) if !ok { @@ -95,7 +103,18 @@ func (s *Session) hookServer(port int, secret string) { payload.Sender.Login, payload.Comment.Body, ) - s.sendMessage(msg, "") + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ + case gohook.RepositoryEventType: + payload, ok := et.Event.(*gohook.RepositoryEvent) + if !ok { + panic("Malformed *RepositoryEvent.") + } + msg := fmt.Sprintf("[ Repository: %s ] Action: created. ", + payload.Repository.Name, + ) + s.sendMessage(msg, "", strconv.Itoa(s.msgID)) + s.msgID++ case gohook.PushEventType: s.logger.Info("Entering PushEventType case.") payload, ok := et.Event.(*gohook.PushEvent) @@ -108,16 +127,8 @@ func (s *Session) hookServer(port int, secret string) { payload.HeadCommit.Message, payload.HeadCommit.URL, ) - s.sendMessage(msg, "") - case gohook.RepositoryEventType: - payload, ok := et.Event.(*gohook.RepositoryEvent) - if !ok { - panic("Malformed *RepositoryEvent.") - } - msg := fmt.Sprintf("[ Repository: %s ] Action: created. ", - payload.Repository.Name, - ) - s.sendMessage(msg, "") + t := strconv.Itoa(int(time.Now().Unix())) + s.sendMessage(msg, "", t) } } diff --git a/packet.go b/packet.go index 0a7a44b..ba4395f 100644 --- a/packet.go +++ b/packet.go @@ -49,7 +49,7 @@ type SendCommand struct { Parent string `json:"parent"` } -]type Message struct { +type Message struct { ID string `json:"id"` Parent string `json:"parent"` PreviousEditID string `json:"previous_edit_id,omitempty"` diff --git a/session.go b/session.go index 612c812..fcf2e50 100644 --- a/session.go +++ b/session.go @@ -85,13 +85,13 @@ func (s *Session) receiver() { } } -func (s *Session) sendPayload(payload interface{}, pType PacketType) { +func (s *Session) sendPayload(payload interface{}, pType PacketType, packetID string) { rawPayload, err := json.Marshal(payload) if err != nil { s.logger.Fatalf("Could not marshal payload: %s\n", err) } packet := &PacketEvent{ - ID: strconv.Itoa(s.msgID), + ID: packetID, Type: pType, } if err := packet.Data.UnmarshalJSON(rawPayload); err != nil { @@ -105,22 +105,24 @@ func (s *Session) sendAuth() { payload := AuthCommand{ Type: "passcode", Passcode: s.password} - s.sendPayload(payload, AuthType) + s.sendPayload(payload, AuthType, strconv.Itoa(s.msgID)) + s.msgID++ } func (s *Session) sendNick() { s.logger.Infoln("Sending nick.") payload := NickCommand{Name: "GithubBot"} - s.sendPayload(payload, NickType) + s.sendPayload(payload, NickType, strconv.Itoa(s.msgID)) + s.msgID++ } -func (s *Session) sendMessage(text string, parent string) { +func (s *Session) sendMessage(text string, parent string, packetID string) { s.logger.Infof("Sending text message: '%s'", text) payload := SendCommand{ Content: text, Parent: parent, } - s.sendPayload(payload, SendType) + s.sendPayload(payload, SendType, packetID) } func (s *Session) handlePing(p *PacketEvent) { @@ -134,7 +136,8 @@ func (s *Session) handlePing(p *PacketEvent) { logrus.Fatalln("Cannot assert *PingEvent as such.") } out := PingReply{UnixTime: payload.Time} - s.sendPayload(out, PingReplyType) + s.sendPayload(out, PingReplyType, strconv.Itoa(s.msgID)) + s.msgID++ } func (s *Session) handleSend(p *PacketEvent) { @@ -152,7 +155,8 @@ func (s *Session) handleSend(p *PacketEvent) { s.sendMessage(fmt.Sprintf( "This bot has been up for %s.", since.String()), - p.ID) + p.ID, strconv.Itoa(s.msgID)) + s.msgID++ } } diff --git a/travis.go b/travis.go index 20f6597..03ee73c 100644 --- a/travis.go +++ b/travis.go @@ -2,6 +2,7 @@ package githubbot import ( "fmt" + "strconv" "github.com/cpalone/travishook" ) @@ -21,6 +22,9 @@ func (s *Session) travisServer(port int) { fmt.Printf("Received payload with status: %s\n", p.StatusMessage) s.sendMessage(fmt.Sprintf( "%s [ travis.ci | Branch: %s | %s ] %s | %s.", - emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), s.commitMsgID) + emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), + s.commitMsgID, + strconv.Itoa(s.msgID)) + s.msgID++ } } From f981255ff73028a77c7a1931405b709a259130b4 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sun, 14 Jun 2015 13:10:34 -0600 Subject: [PATCH 54/70] Big rewrite. --- .travis.yml | 3 ++ drone.go | 31 ------------------ github.go | 94 +++++++++++++++++++++++++++++++++++++++++++++++++---- session.go | 31 +++++------------- travis.go | 30 ----------------- 5 files changed, 99 insertions(+), 90 deletions(-) delete mode 100644 drone.go delete mode 100644 travis.go diff --git a/.travis.yml b/.travis.yml index 9a652e1..933bac7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,3 +11,6 @@ install: - go get github.com/gorilla/websocket script: go test ./... + +notifications: + webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file diff --git a/drone.go b/drone.go deleted file mode 100644 index d4ccd51..0000000 --- a/drone.go +++ /dev/null @@ -1,31 +0,0 @@ -package githubbot - -import ( - "fmt" - "strconv" - - "github.com/cpalone/dronehook" -) - -func (s *Session) droneServer(port int) { - server := dronehook.NewServer(port, "/dronehook") - server.GoListenAndServe() - for { - p := <-server.Out - var emoji string - if p.Commit.Status == "Success" { - emoji = ":white_check_mark:" - } else { - emoji = ":no_entry:" - } - str := fmt.Sprintf("%s [ drone.io | Branch: %s | %s ] %s | %s", - emoji, - p.Repository.Name, - p.Commit.Branch, - p.Commit.Message, - p.Commit.Status, - ) - s.sendMessage(str, s.commitMsgID, strconv.Itoa(s.msgID)) - s.msgID++ - } -} diff --git a/github.go b/github.go index bbd60cf..6559ac0 100644 --- a/github.go +++ b/github.go @@ -5,16 +5,30 @@ import ( "strconv" "time" + "github.com/cpalone/dronehook" "github.com/cpalone/gohook" + "github.com/cpalone/travishook" ) -func (s *Session) hookServer(port int, secret string) { - server := gohook.NewServer(port, secret, "/postreceive") - s.logger.Info("Starting webhook server...") - server.GoListenAndServe() - s.logger.Info("...started.") +func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketEvent) { + // spin off github server + gServer := gohook.NewServer(port, secret, "/postreceive") + s.logger.Info("Starting github server...") + gServer.GoListenAndServe() + + // spin off travis server + tServer := travishook.NewServer(8085, "/travishook") + s.logger.Info("Starting travis server...") + tServer.GoListenAndServe() + + //spin off drone server + dServer := dronehook.NewServer(8082, "/dronehook") + s.logger.Info("Starting drone server...") + dServer.GoListenAndServe() + + // Wait for github hook event for { - et := <-server.EventAndTypes + et := <-gServer.EventAndTypes s.logger.Infof("Received hook event of type '%s'.", et.Type) switch et.Type { case gohook.PingEventType: @@ -128,8 +142,74 @@ func (s *Session) hookServer(port int, secret string) { payload.HeadCommit.URL, ) t := strconv.Itoa(int(time.Now().Unix())) + s.waiting = true s.sendMessage(msg, "", t) - } + var reply PacketEvent + for s.waiting { + reply = <-sendReplyChan + if reply.ID == t { + s.waiting = false + } + } + srPayload, err := reply.Payload() + if err != nil { + s.logger.Fatalln(err) + } + // need send-reply for msgID to reply to + data, ok := srPayload.(*SendReply) + if !ok { + s.logger.Fatalln("Could not assert *SendReply as such.") + } + + // wait for travis build message + go func() { + select { + case p := <-tServer.Out: + var emoji string + if p.StatusMessage == "Passed" || p.StatusMessage == "Fixed" { + emoji = ":white_check_mark:" + } else { + emoji = ":no_entry:" + } + s.sendMessage(fmt.Sprintf( + "%s [ travis.ci | Branch: %s | %s ] %s | %s.", + emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), + data.ID, strconv.Itoa(s.msgID)) + s.msgID++ + case <-time.After(time.Duration(10) * time.Minute): + s.sendMessage("Timed out waiting for build status from travis.", + data.ID, strconv.Itoa(s.msgID)) + s.msgID++ + } + }() + + // wait for drone build message + go func() { + select { + case p := <-dServer.Out: + var emoji string + if p.Commit.Status == "Success" { + emoji = ":white_check_mark:" + } else { + emoji = ":no_entry:" + } + str := fmt.Sprintf("%s [ drone.io | Branch: %s | %s ] %s | %s", + emoji, + p.Repository.Name, + p.Commit.Branch, + p.Commit.Message, + p.Commit.Status, + ) + s.sendMessage(str, + data.ID, strconv.Itoa(s.msgID)) + s.msgID++ + case <-time.After(time.Duration(10) * time.Minute): + s.sendMessage("Timed out waiting for build status from drone.", + data.ID, strconv.Itoa(s.msgID)) + s.msgID++ + } + }() + } } } diff --git a/session.go b/session.go index fcf2e50..c2a95ae 100644 --- a/session.go +++ b/session.go @@ -7,7 +7,6 @@ import ( "net/http" "net/url" "strconv" - "strings" "time" "github.com/Sirupsen/logrus" @@ -27,6 +26,7 @@ type Session struct { logger *logrus.Logger uptime time.Time commitMsgID string + waiting bool } func (s *Session) connectOnce() error { @@ -160,22 +160,7 @@ func (s *Session) handleSend(p *PacketEvent) { } } -func (s *Session) handleSendReply(p *PacketEvent) { - s.logger.Debugln("Handling send-reply...") - data, err := p.Payload() - if err != nil { - panic(err) - } - payload, ok := data.(*SendReply) - if !ok { - s.logger.Fatalln("Cannot assert *SendReplyType as such.") - } - if strings.HasPrefix(payload.Content, ":repeat:") { - s.commitMsgID = payload.ID - } -} - -func (s *Session) inboundHandler() { +func (s *Session) inboundHandler(sendReplyChan chan PacketEvent) { for { packet := <-s.inbound s.logger.Infof("Receiving packet of type '%s'\n", packet.Type) @@ -185,7 +170,10 @@ func (s *Session) inboundHandler() { case SendEventType: s.handleSend(packet) case SendReplyType: - s.handleSendReply(packet) + if !s.waiting { + continue + } + sendReplyChan <- *packet default: s.logger.Infof("Unhandled packet type '%s'", packet.Type) } @@ -234,12 +222,11 @@ func (s *Session) Run() { if s.password != "" { go s.sendAuth() } + sendReplyChan := make(chan PacketEvent) go s.outboundHandler() - go s.inboundHandler() + go s.inboundHandler(sendReplyChan) go s.receiver() go s.sendNick() - go s.hookServer(s.port, s.secret) - go s.droneServer(8082) - go s.travisServer(8085) + go s.hookServer(s.port, s.secret, sendReplyChan) <-s.errChan } diff --git a/travis.go b/travis.go deleted file mode 100644 index 03ee73c..0000000 --- a/travis.go +++ /dev/null @@ -1,30 +0,0 @@ -package githubbot - -import ( - "fmt" - "strconv" - - "github.com/cpalone/travishook" -) - -func (s *Session) travisServer(port int) { - server := travishook.NewServer(port, "/travishook") - server.GoListenAndServe() - for { - p := <-server.Out - var emoji string - if p.StatusMessage == "Passed" || p.StatusMessage == "Fixed" { - emoji = ":white_check_mark:" - } else { - emoji = ":no_entry:" - } - - fmt.Printf("Received payload with status: %s\n", p.StatusMessage) - s.sendMessage(fmt.Sprintf( - "%s [ travis.ci | Branch: %s | %s ] %s | %s.", - emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), - s.commitMsgID, - strconv.Itoa(s.msgID)) - s.msgID++ - } -} From 30c0befec89083d2b7f45f6a4a3407cedf1de62d Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sun, 14 Jun 2015 13:12:04 -0600 Subject: [PATCH 55/70] Don't add webhook yet --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 933bac7..a6197ea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,5 +12,5 @@ install: script: go test ./... -notifications: - webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file +# notifications: +# webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file From dd27fc2a710dce09d14b4c0f382bf78198ba5dda Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sun, 14 Jun 2015 13:16:53 -0600 Subject: [PATCH 56/70] Add travis webhook. --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a6197ea..933bac7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,5 +12,5 @@ install: script: go test ./... -# notifications: -# webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file +notifications: + webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file From e106f50352f4c9b3e6ed0f1507d5e8d146efb009 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sun, 14 Jun 2015 13:29:45 -0600 Subject: [PATCH 57/70] Update .travis --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 933bac7..a92263d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,4 @@ install: - go get github.com/Sirupsen/logrus - go get github.com/gorilla/websocket -script: go test ./... - -notifications: - webhooks: http://52.10.123.209:8085/travishook \ No newline at end of file +script: go test ./... \ No newline at end of file From 945c6632487bdc26a688ceba5a0fed1f5a63f4a2 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Tue, 16 Jun 2015 12:12:34 -0600 Subject: [PATCH 58/70] Store parent IDs and use for CI. --- ci.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ github.go | 62 +-------------------------------------------------- session.go | 52 +++++++++++++++++++++++-------------------- 3 files changed, 94 insertions(+), 85 deletions(-) create mode 100644 ci.go diff --git a/ci.go b/ci.go new file mode 100644 index 0000000..594d407 --- /dev/null +++ b/ci.go @@ -0,0 +1,65 @@ +package githubbot + +import ( + "fmt" + "strconv" + + "github.com/cpalone/dronehook" + "github.com/cpalone/travishook" +) + +func (s *Session) ciHandler() error { + // spin off travis server + tServer := travishook.NewServer(8085, "/travishook") + s.logger.Info("Starting travis server...") + tServer.GoListenAndServe() + + //spin off drone server + dServer := dronehook.NewServer(8082, "/dronehook") + s.logger.Info("Starting drone server...") + dServer.GoListenAndServe() + + for { + select { + case p := <-tServer.Out: + var parent string + parent, ok := s.commitParent[p.Commit] + if !ok { + parent = "" + } + var emoji string + if p.StatusMessage == "Passed" || p.StatusMessage == "Fixed" { + emoji = ":white_check_mark:" + } else { + emoji = ":no_entry:" + } + s.sendMessage(fmt.Sprintf( + "%s [ travis.ci | Branch: %s | %s ] %s | %s.", + emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), + parent, strconv.Itoa(s.msgID)) + s.msgID++ + case p := <-dServer.Out: + var parent string + parent, ok := s.commitParent[p.Commit.SHA] + if !ok { + parent = "" + } + var emoji string + if p.Commit.Status == "Success" { + emoji = ":white_check_mark:" + } else { + emoji = ":no_entry:" + } + str := fmt.Sprintf("%s [ drone.io | Branch: %s | %s ] %s | %s", + emoji, + p.Repository.Name, + p.Commit.Branch, + p.Commit.Message, + p.Commit.Status, + ) + s.sendMessage(str, + parent, strconv.Itoa(s.msgID)) + s.msgID++ + } + } +} diff --git a/github.go b/github.go index 6559ac0..aa0a749 100644 --- a/github.go +++ b/github.go @@ -5,9 +5,7 @@ import ( "strconv" "time" - "github.com/cpalone/dronehook" "github.com/cpalone/gohook" - "github.com/cpalone/travishook" ) func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketEvent) { @@ -16,16 +14,6 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE s.logger.Info("Starting github server...") gServer.GoListenAndServe() - // spin off travis server - tServer := travishook.NewServer(8085, "/travishook") - s.logger.Info("Starting travis server...") - tServer.GoListenAndServe() - - //spin off drone server - dServer := dronehook.NewServer(8082, "/dronehook") - s.logger.Info("Starting drone server...") - dServer.GoListenAndServe() - // Wait for github hook event for { et := <-gServer.EventAndTypes @@ -161,55 +149,7 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if !ok { s.logger.Fatalln("Could not assert *SendReply as such.") } - - // wait for travis build message - go func() { - select { - case p := <-tServer.Out: - var emoji string - if p.StatusMessage == "Passed" || p.StatusMessage == "Fixed" { - emoji = ":white_check_mark:" - } else { - emoji = ":no_entry:" - } - s.sendMessage(fmt.Sprintf( - "%s [ travis.ci | Branch: %s | %s ] %s | %s.", - emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), - data.ID, strconv.Itoa(s.msgID)) - s.msgID++ - case <-time.After(time.Duration(10) * time.Minute): - s.sendMessage("Timed out waiting for build status from travis.", - data.ID, strconv.Itoa(s.msgID)) - s.msgID++ - } - }() - - // wait for drone build message - go func() { - select { - case p := <-dServer.Out: - var emoji string - if p.Commit.Status == "Success" { - emoji = ":white_check_mark:" - } else { - emoji = ":no_entry:" - } - str := fmt.Sprintf("%s [ drone.io | Branch: %s | %s ] %s | %s", - emoji, - p.Repository.Name, - p.Commit.Branch, - p.Commit.Message, - p.Commit.Status, - ) - s.sendMessage(str, - data.ID, strconv.Itoa(s.msgID)) - s.msgID++ - case <-time.After(time.Duration(10) * time.Minute): - s.sendMessage("Timed out waiting for build status from drone.", - data.ID, strconv.Itoa(s.msgID)) - s.msgID++ - } - }() + s.commitParent[payload.HeadCommit.ID] = data.ID } } } diff --git a/session.go b/session.go index c2a95ae..28f534c 100644 --- a/session.go +++ b/session.go @@ -14,19 +14,19 @@ import ( ) type Session struct { - RoomName string - password string - conn *websocket.Conn - inbound chan *PacketEvent - outbound chan *PacketEvent - errChan chan error - msgID int - port int - secret string - logger *logrus.Logger - uptime time.Time - commitMsgID string - waiting bool + RoomName string + password string + conn *websocket.Conn + inbound chan *PacketEvent + outbound chan *PacketEvent + errChan chan error + msgID int + port int + secret string + logger *logrus.Logger + uptime time.Time + waiting bool + commitParent map[string]string } func (s *Session) connectOnce() error { @@ -201,16 +201,17 @@ func NewSession(roomName, password string, port int, secret string, logger *logr outbound := make(chan *PacketEvent) errChan := make(chan error) s := Session{ - RoomName: roomName, - password: password, - inbound: inbound, - outbound: outbound, - errChan: errChan, - msgID: 0, - logger: logger, - port: port, - secret: secret, - uptime: time.Now(), + RoomName: roomName, + password: password, + inbound: inbound, + outbound: outbound, + errChan: errChan, + msgID: 0, + logger: logger, + port: port, + secret: secret, + uptime: time.Now(), + commitParent: make(map[string]string), } if err := s.connect(); err != nil { return nil, err @@ -219,6 +220,7 @@ func NewSession(roomName, password string, port int, secret string, logger *logr } func (s *Session) Run() { + if s.password != "" { go s.sendAuth() } @@ -228,5 +230,7 @@ func (s *Session) Run() { go s.receiver() go s.sendNick() go s.hookServer(s.port, s.secret, sendReplyChan) - <-s.errChan + go s.ciHandler() + err := <-s.errChan + s.logger.Fatalln("Session.Run: %s", err) } From f625ecb0ef22bdae55fd7c8e4f5f6dcd5aabbb5a Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Wed, 17 Jun 2015 13:20:44 -0600 Subject: [PATCH 59/70] Add urls for builds. --- ci.go | 10 +++++----- github.go | 12 +++++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/ci.go b/ci.go index 594d407..54c5b64 100644 --- a/ci.go +++ b/ci.go @@ -34,8 +34,8 @@ func (s *Session) ciHandler() error { emoji = ":no_entry:" } s.sendMessage(fmt.Sprintf( - "%s [ travis.ci | Branch: %s | %s ] %s | %s.", - emoji, p.Repository.Name, p.Branch, p.Message, p.StatusMessage), + "%s [ travis-ci.org | %s | Branch: %s ] (%s)", + emoji, p.Repository.Name, p.Branch, p.BuildURL), parent, strconv.Itoa(s.msgID)) s.msgID++ case p := <-dServer.Out: @@ -50,12 +50,12 @@ func (s *Session) ciHandler() error { } else { emoji = ":no_entry:" } - str := fmt.Sprintf("%s [ drone.io | Branch: %s | %s ] %s | %s", + url := fmt.Sprintf("%s/%s", p.FromURL, p.Commit.SHA) + str := fmt.Sprintf("%s [ drone.io | %s | Branch: %s ] (%s)", emoji, p.Repository.Name, p.Commit.Branch, - p.Commit.Message, - p.Commit.Status, + url, ) s.sendMessage(str, parent, strconv.Itoa(s.msgID)) diff --git a/github.go b/github.go index aa0a749..033561f 100644 --- a/github.go +++ b/github.go @@ -87,10 +87,14 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if !ok { panic("Malformed *PullRequestEvent.") } + action := payload.Action + if action == "synced" { + action = "New commits made to synced branch." + } msg := fmt.Sprintf("[ %s | PR: %s ] %s", payload.Repository.Name, payload.PullRequest.Title, - payload.Action, + action, ) s.sendMessage(msg, "", strconv.Itoa(s.msgID)) s.msgID++ @@ -99,11 +103,12 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if !ok { panic("Malformed *PullRequestReviewCommentEvent.") } - msg := fmt.Sprintf("[ %s | PR: %s ] Comment: %s: %s", + msg := fmt.Sprintf("[ %s | PR: %s ] Comment: %s: %s (%s)", payload.Repository.Name, payload.PullRequest.Title, payload.Sender.Login, payload.Comment.Body, + payload.PullRequest.HTMLURL, ) s.sendMessage(msg, "", strconv.Itoa(s.msgID)) s.msgID++ @@ -112,8 +117,9 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if !ok { panic("Malformed *RepositoryEvent.") } - msg := fmt.Sprintf("[ Repository: %s ] Action: created. ", + msg := fmt.Sprintf("[ Repository: %s ] Action: created. (%s) ", payload.Repository.Name, + payload.Repository.HTMLURL, ) s.sendMessage(msg, "", strconv.Itoa(s.msgID)) s.msgID++ From ee27b68b45e25f107e13944de647e16ccde1eb9e Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Wed, 17 Jun 2015 17:01:01 -0600 Subject: [PATCH 60/70] Fix drone link. --- ci.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ci.go b/ci.go index 54c5b64..b9f50eb 100644 --- a/ci.go +++ b/ci.go @@ -50,7 +50,13 @@ func (s *Session) ciHandler() error { } else { emoji = ":no_entry:" } - url := fmt.Sprintf("%s/%s", p.FromURL, p.Commit.SHA) + // https://drone.in.euphoria.io/github.com/euphoria-io/heim/master/b816f23ec209d6f6d2f99788515329099e3d92d0 + url := fmt.Sprintf("drone.in.euphoria.io/%s/%s/%s/%s/%s", + p.Repository.Host, + p.Repository.Owner, + p.Repository.Name, + p.Commit.Branch, + p.Commit.SHA) str := fmt.Sprintf("%s [ drone.io | %s | Branch: %s ] (%s)", emoji, p.Repository.Name, From bf12a86b11d43b70f8522edf8d8d6e90141436ad Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Thu, 2 Jul 2015 23:32:14 -0600 Subject: [PATCH 61/70] Handle multiple commit pushes and pull request urls. --- github.go | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/github.go b/github.go index 033561f..467c06f 100644 --- a/github.go +++ b/github.go @@ -91,10 +91,11 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if action == "synced" { action = "New commits made to synced branch." } - msg := fmt.Sprintf("[ %s | PR: %s ] %s", + msg := fmt.Sprintf("[ %s | PR: %s ] %s (%s)", payload.Repository.Name, payload.PullRequest.Title, action, + payload.PullRequest.URL, ) s.sendMessage(msg, "", strconv.Itoa(s.msgID)) s.msgID++ @@ -129,12 +130,23 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if !ok { panic("Malformed *PushEvent.") } - msg := fmt.Sprintf(":repeat: [ %s | Branch: %s ] Commit: %s (%s)", - payload.Repository.Name, - payload.Ref[11:], // this discards "refs/heads/" - payload.HeadCommit.Message, - payload.HeadCommit.URL, - ) + var msg string + if len(payload.Commits) > 1 { + msg = fmt.Sprintf(":repeat: [ %s | Branch: %s ] %v Commits: %s (%s)", + payload.Repository.Name, + payload.Ref[11:], // this discards "refs/heads/" + len(payload.Commits), + payload.HeadCommit.Message, + payload.Compare, + ) + } else { + msg = fmt.Sprintf(":repeat: [ %s | Branch: %s ] Commit: %s (%s)", + payload.Repository.Name, + payload.Ref[11:], // this discards "refs/heads/" + payload.HeadCommit.Message, + payload.HeadCommit.URL, + ) + } t := strconv.Itoa(int(time.Now().Unix())) s.waiting = true s.sendMessage(msg, "", t) From aa70c01857b51a3ecf78b88ee83748c2b0085535 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Sat, 4 Jul 2015 15:59:25 -0600 Subject: [PATCH 62/70] Github message style changes. --- github.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/github.go b/github.go index 467c06f..3643c2b 100644 --- a/github.go +++ b/github.go @@ -91,11 +91,11 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if action == "synced" { action = "New commits made to synced branch." } - msg := fmt.Sprintf("[ %s | PR: %s ] %s (%s)", + msg := fmt.Sprintf(":pencil: [ %s | PR: %s ] %s (%s)", payload.Repository.Name, payload.PullRequest.Title, action, - payload.PullRequest.URL, + payload.PullRequest.HTMLURL, ) s.sendMessage(msg, "", strconv.Itoa(s.msgID)) s.msgID++ @@ -104,7 +104,7 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if !ok { panic("Malformed *PullRequestReviewCommentEvent.") } - msg := fmt.Sprintf("[ %s | PR: %s ] Comment: %s: %s (%s)", + msg := fmt.Sprintf(":speech_balloon: [ %s | PR: %s ] Comment: %s: %s (%s)", payload.Repository.Name, payload.PullRequest.Title, payload.Sender.Login, From 62cb3efc7118a803f6ccc3bcd8e280e83533b37d Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 6 Jul 2015 14:09:09 -0600 Subject: [PATCH 63/70] Don't show empty commits/branch deletions. --- github.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/github.go b/github.go index 3643c2b..83eebcc 100644 --- a/github.go +++ b/github.go @@ -130,6 +130,9 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE if !ok { panic("Malformed *PushEvent.") } + if payload.HeadCommit.Message == "" { + return + } var msg string if len(payload.Commits) > 1 { msg = fmt.Sprintf(":repeat: [ %s | Branch: %s ] %v Commits: %s (%s)", From ef107dae7193bb0472a2661979e189c87e255998 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Wed, 26 Aug 2015 13:04:38 -0600 Subject: [PATCH 64/70] Record SHA for PRs so we can attach CI results. --- github.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/github.go b/github.go index 83eebcc..f37781a 100644 --- a/github.go +++ b/github.go @@ -88,7 +88,7 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE panic("Malformed *PullRequestEvent.") } action := payload.Action - if action == "synced" { + if action == "synchronize" { action = "New commits made to synced branch." } msg := fmt.Sprintf(":pencil: [ %s | PR: %s ] %s (%s)", @@ -97,8 +97,28 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE action, payload.PullRequest.HTMLURL, ) - s.sendMessage(msg, "", strconv.Itoa(s.msgID)) s.msgID++ + t := strconv.Itoa(int(time.Now().Unix())) + s.waiting = true + s.sendMessage(msg, "", t) + var reply PacketEvent + for s.waiting { + reply = <-sendReplyChan + if reply.ID == t { + s.waiting = false + } + } + srPayload, err := reply.Payload() + if err != nil { + s.logger.Fatalln(err) + } + + // need send-reply for msgID to reply to + data, ok := srPayload.(*SendReply) + if !ok { + s.logger.Fatalln("Could not assert *SendReply as such.") + } + s.commitParent[payload.PullRequest.Head.SHA] = data.ID case gohook.PullRequestReviewCommentEventType: payload, ok := et.Event.(*gohook.PullRequestReviewCommentEvent) if !ok { From 37d1353f95182f2a0d40e3ca0338e324296e7e57 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Fri, 4 Sep 2015 10:51:47 -0600 Subject: [PATCH 65/70] Add notification on ping. --- github.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/github.go b/github.go index f37781a..1ee4cbf 100644 --- a/github.go +++ b/github.go @@ -191,6 +191,14 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE s.logger.Fatalln("Could not assert *SendReply as such.") } s.commitParent[payload.HeadCommit.ID] = data.ID + case gohook.PingEventType: + payload, ok := et.Event.(*gohook.PingEvent) + if !ok { + panic("Malformed *PingEvent") + } + s.sendMessage("[ Github Webhook | ping ]", "", strconv.Itoa(s.msgID)) + s.msgID++ } + } } From 4d8ff88523f390007ca0a8d3f801505db4d471a4 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Wed, 7 Oct 2015 12:21:38 -0600 Subject: [PATCH 66/70] Don't exit on empty commit, continue instead --- github.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github.go b/github.go index 1ee4cbf..8549d94 100644 --- a/github.go +++ b/github.go @@ -151,7 +151,7 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE panic("Malformed *PushEvent.") } if payload.HeadCommit.Message == "" { - return + continue } var msg string if len(payload.Commits) > 1 { From 70f11dc6629f9462bc3c2df6f094cf48753c41a6 Mon Sep 17 00:00:00 2001 From: "M. Cameron Palone" Date: Wed, 7 Oct 2015 19:38:37 +0000 Subject: [PATCH 67/70] Send a message when a ping is received. --- github.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/github.go b/github.go index 8549d94..1d419f6 100644 --- a/github.go +++ b/github.go @@ -19,8 +19,6 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE et := <-gServer.EventAndTypes s.logger.Infof("Received hook event of type '%s'.", et.Type) switch et.Type { - case gohook.PingEventType: - continue case gohook.CommitCommentEventType: payload, ok := et.Event.(*gohook.CommitCommentEvent) if !ok { @@ -192,10 +190,10 @@ func (s *Session) hookServer(port int, secret string, sendReplyChan chan PacketE } s.commitParent[payload.HeadCommit.ID] = data.ID case gohook.PingEventType: - payload, ok := et.Event.(*gohook.PingEvent) - if !ok { - panic("Malformed *PingEvent") - } + //payload, ok := et.Event.(*gohook.PingEvent) + //if !ok { + // panic("Malformed *PingEvent") + //} s.sendMessage("[ Github Webhook | ping ]", "", strconv.Itoa(s.msgID)) s.msgID++ } From b495ca5381198871b0957dcaf5fe3c4a3d8ab197 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 9 Nov 2015 14:25:02 -0700 Subject: [PATCH 68/70] Update to use new drone payload. --- ci.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/ci.go b/ci.go index b9f50eb..7846340 100644 --- a/ci.go +++ b/ci.go @@ -40,27 +40,22 @@ func (s *Session) ciHandler() error { s.msgID++ case p := <-dServer.Out: var parent string - parent, ok := s.commitParent[p.Commit.SHA] + parent, ok := s.commitParent[p.Build.Ref] if !ok { parent = "" } var emoji string - if p.Commit.Status == "Success" { + if p.Build.Status == "Success" { emoji = ":white_check_mark:" } else { emoji = ":no_entry:" } // https://drone.in.euphoria.io/github.com/euphoria-io/heim/master/b816f23ec209d6f6d2f99788515329099e3d92d0 - url := fmt.Sprintf("drone.in.euphoria.io/%s/%s/%s/%s/%s", - p.Repository.Host, - p.Repository.Owner, - p.Repository.Name, - p.Commit.Branch, - p.Commit.SHA) + url := p.Build.LinkURL str := fmt.Sprintf("%s [ drone.io | %s | Branch: %s ] (%s)", emoji, - p.Repository.Name, - p.Commit.Branch, + p.Repo.Name, + p.Build.Branch, url, ) s.sendMessage(str, From 086041b844a40ef65ed043d719f67e30d2137b80 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 9 Nov 2015 15:04:22 -0700 Subject: [PATCH 69/70] Change URL to new format and fix commit association. --- ci.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ci.go b/ci.go index 7846340..beb89dc 100644 --- a/ci.go +++ b/ci.go @@ -40,18 +40,22 @@ func (s *Session) ciHandler() error { s.msgID++ case p := <-dServer.Out: var parent string - parent, ok := s.commitParent[p.Build.Ref] + parent, ok := s.commitParent[p.Build.Commit] if !ok { parent = "" } var emoji string - if p.Build.Status == "Success" { + if p.Build.Status == "success" { emoji = ":white_check_mark:" } else { emoji = ":no_entry:" } - // https://drone.in.euphoria.io/github.com/euphoria-io/heim/master/b816f23ec209d6f6d2f99788515329099e3d92d0 - url := p.Build.LinkURL + // https://drone.in.euphoria.io/euphoria-io/heim/77 + url := fmt.Sprintf("drone.in.euphoria.io/%s/%s/%s", + p.Repo.Name, + p.Build.Branch, + p.Build.Number, + ) str := fmt.Sprintf("%s [ drone.io | %s | Branch: %s ] (%s)", emoji, p.Repo.Name, From a3a4006d1ff8f7070b5c4f07e0195626bd3df3f6 Mon Sep 17 00:00:00 2001 From: Cameron Palone Date: Mon, 9 Nov 2015 16:24:17 -0700 Subject: [PATCH 70/70] Change URL formatting code from string to integer. --- ci.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci.go b/ci.go index beb89dc..9085b80 100644 --- a/ci.go +++ b/ci.go @@ -51,7 +51,7 @@ func (s *Session) ciHandler() error { emoji = ":no_entry:" } // https://drone.in.euphoria.io/euphoria-io/heim/77 - url := fmt.Sprintf("drone.in.euphoria.io/%s/%s/%s", + url := fmt.Sprintf("drone.in.euphoria.io/%s/%s/%v", p.Repo.Name, p.Build.Branch, p.Build.Number,