From 351a05bc28cbed212b4846ce05d6857b1712fe49 Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Wed, 28 Jul 2021 11:39:54 -0500 Subject: [PATCH 01/10] Use commit URL instead of commit SHA --- cmd/main.go | 14 +++++++------- pkg/notifier/slack/slack.go | 30 +++++++++++++++++++++++++----- pkg/subscriber/subscriber.go | 4 ++-- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index c691777..206a2e8 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -24,8 +24,8 @@ func main() { } config := &subscriber.Config{ - ProjectID: viper.GetString("GCLOUD_PROJECT_ID"), - SubName: subName, + ProjectID: viper.GetString("GCLOUD_PROJECT_ID"), + SubName: subName, } sub, err := subscriber.New(config) @@ -41,7 +41,7 @@ func main() { } }() - notifier := slack.New(viper.GetString("SLACK_WEBHOOK_URL")) + notifier := slack.New(viper.GetString("SLACK_WEBHOOK_URL"), viper.GetString("GIT_USER_URL")) cloudbuildClient, _ := cloudbuild.New(config.ProjectID) // HTTP Handler @@ -60,8 +60,8 @@ func main() { type pubSubHTTPMessage struct { Message struct { - Data []byte `json:"data,omitempty"` - Attributes map[string]string `json:"attributes,omitempty"` + Data []byte `json:"data,omitempty"` + Attributes map[string]string `json:"attributes,omitempty"` } `json:"message"` Subscription string `json:"subscription"` } @@ -80,9 +80,9 @@ func httpHandler(n cloudbuildnotifier.Notifier, c *cloudbuild.CloudbuildClient) } m := &pubsub.Message{ - ID: pubsubHttp.Message.Attributes["buildId"], + ID: pubsubHttp.Message.Attributes["buildId"], Attributes: pubsubHttp.Message.Attributes, - Data: pubsubHttp.Message.Data, + Data: pubsubHttp.Message.Data, } if err := handleMessage(m, n, c); err != nil { diff --git a/pkg/notifier/slack/slack.go b/pkg/notifier/slack/slack.go index 9561aa2..a92a76d 100644 --- a/pkg/notifier/slack/slack.go +++ b/pkg/notifier/slack/slack.go @@ -3,6 +3,8 @@ package slack import ( "fmt" "log" + "net/url" + "path" cloudbuildnotifier "github.com/cloudkite-io/cloudbuild-notifier" "github.com/cloudkite-io/cloudbuild-notifier/pkg/cloudbuild" @@ -10,12 +12,16 @@ import ( ) type notifier struct { - webhookURL string + webhookURL string + githubUserURL string } // New creates a slack notifier. -func New(webhookURL string) cloudbuildnotifier.Notifier { - return notifier{webhookURL} +func New(webhookURL, githubUserURL string) cloudbuildnotifier.Notifier { + return notifier{ + webhookURL, + githubUserURL, + } } func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, buildParams cloudbuild.BuildParameters) error { @@ -34,11 +40,16 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, return nil } + commitShaURL, err := buildURL(buildParams, n.githubUserURL) + if err != nil { + return fmt.Errorf("failed posting to webhook %s: %s", n.webhookURL, err) + } + attachment := slack.Attachment{ Title: fmt.Sprintf("Cloudbuild: %s", cloudbuildResponse.Status), Color: color, Text: fmt.Sprintf("Repo: %s\nBranch: %s\nCommit SHA: %s\nTrigger: %s\n", - buildParams.REPO_NAME, buildParams.BRANCH_NAME, buildParams.COMMIT_SHA, buildParams.TRIGGER_NAME), + buildParams.REPO_NAME, buildParams.BRANCH_NAME, commitShaURL, buildParams.TRIGGER_NAME), Actions: []slack.AttachmentAction{ { Text: "View Logs", @@ -52,7 +63,7 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, Attachments: []slack.Attachment{attachment}, } - err := slack.PostWebhook(n.webhookURL, &msg) + err = slack.PostWebhook(n.webhookURL, &msg) if err != nil { return fmt.Errorf("failed posting to webhook %s: %s", n.webhookURL, err) } @@ -62,6 +73,15 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, return nil } +func buildURL(buildParams cloudbuild.BuildParameters, gitUserURL string) (string, error) { + u, err := url.Parse(gitUserURL) + if err != nil { + return "", err + } + u.Path = path.Join(u.Path, buildParams.REPO_NAME, "commit", buildParams.COMMIT_SHA) + return u.String(), nil +} + func stringInSlice(needle string, haystack []string) bool { for _, b := range haystack { if b == needle { diff --git a/pkg/subscriber/subscriber.go b/pkg/subscriber/subscriber.go index ce8faa1..260dcae 100644 --- a/pkg/subscriber/subscriber.go +++ b/pkg/subscriber/subscriber.go @@ -11,8 +11,8 @@ import ( // Config is a notifiers configuration. type Config struct { - ProjectID string - SubName string + ProjectID string + SubName string } // Subscriber listens for cloudbuild events. From 7f685e4f58237709cfd6ca2abc406a042772747a Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Thu, 29 Jul 2021 12:14:44 -0500 Subject: [PATCH 02/10] Use gitSourceURL for commit SHA --- cmd/main.go | 4 ++-- pkg/cloudbuild/cloudbuild.go | 3 ++- pkg/notifier/slack/slack.go | 10 ++++++---- pkg/subscriber/subscriber.go | 4 ++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 206a2e8..1a03100 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -24,8 +24,8 @@ func main() { } config := &subscriber.Config{ - ProjectID: viper.GetString("GCLOUD_PROJECT_ID"), - SubName: subName, + ProjectID: viper.GetString("GCLOUD_PROJECT_ID"), + SubName: subName, } sub, err := subscriber.New(config) diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index 7a65d52..68a506c 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -32,9 +32,10 @@ type BuildParameters struct { COMMIT_SHA string REVISION_ID string TRIGGER_NAME string + URL string } -func (c *CloudbuildClient) GetBuildParameterss(buildId string) (BuildParameters, error) { +func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, error) { buildParams := &BuildParameters{ Id: buildId, } diff --git a/pkg/notifier/slack/slack.go b/pkg/notifier/slack/slack.go index a92a76d..cd495e4 100644 --- a/pkg/notifier/slack/slack.go +++ b/pkg/notifier/slack/slack.go @@ -5,6 +5,7 @@ import ( "log" "net/url" "path" + "strings" cloudbuildnotifier "github.com/cloudkite-io/cloudbuild-notifier" "github.com/cloudkite-io/cloudbuild-notifier/pkg/cloudbuild" @@ -40,7 +41,7 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, return nil } - commitShaURL, err := buildURL(buildParams, n.githubUserURL) + commitShaURL, err := buildGitSourceURL(buildParams) if err != nil { return fmt.Errorf("failed posting to webhook %s: %s", n.webhookURL, err) } @@ -73,12 +74,13 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, return nil } -func buildURL(buildParams cloudbuild.BuildParameters, gitUserURL string) (string, error) { - u, err := url.Parse(gitUserURL) +func buildGitSourceURL(buildParams cloudbuild.BuildParameters) (string, error) { + u, err := url.Parse(buildParams.URL) if err != nil { return "", err } - u.Path = path.Join(u.Path, buildParams.REPO_NAME, "commit", buildParams.COMMIT_SHA) + u.Path = strings.Trim(u.Path, ".git") + u.Path = path.Join(u.Path, "commit", buildParams.COMMIT_SHA) return u.String(), nil } diff --git a/pkg/subscriber/subscriber.go b/pkg/subscriber/subscriber.go index 260dcae..ce8faa1 100644 --- a/pkg/subscriber/subscriber.go +++ b/pkg/subscriber/subscriber.go @@ -11,8 +11,8 @@ import ( // Config is a notifiers configuration. type Config struct { - ProjectID string - SubName string + ProjectID string + SubName string } // Subscriber listens for cloudbuild events. From 97b40d07fba6c31fe16d2bb71597df0f6934142e Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Thu, 29 Jul 2021 23:12:15 -0500 Subject: [PATCH 03/10] Fix func name in main --- cmd/main.go | 4 ++-- pkg/notifier/slack/slack.go | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 1a03100..a2b9271 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -41,7 +41,7 @@ func main() { } }() - notifier := slack.New(viper.GetString("SLACK_WEBHOOK_URL"), viper.GetString("GIT_USER_URL")) + notifier := slack.New(viper.GetString("SLACK_WEBHOOK_URL")) cloudbuildClient, _ := cloudbuild.New(config.ProjectID) // HTTP Handler @@ -108,7 +108,7 @@ func handleMessage(msg *pubsub.Message, notifier cloudbuildnotifier.Notifier, cl return fmt.Errorf("failed unmarshaling json from cloudbuild response: %s", err) } - buildParams, err := cloudbuild.GetBuildParameterss(msg.Attributes["buildId"]) + buildParams, err := cloudbuild.GetBuildParameters(msg.Attributes["buildId"]) if err != nil { return fmt.Errorf("Failed getting build parameters from cloudbuild for build %s: %s", msg.Attributes["buildId"], err) diff --git a/pkg/notifier/slack/slack.go b/pkg/notifier/slack/slack.go index cd495e4..7e2bd6e 100644 --- a/pkg/notifier/slack/slack.go +++ b/pkg/notifier/slack/slack.go @@ -14,15 +14,11 @@ import ( type notifier struct { webhookURL string - githubUserURL string } // New creates a slack notifier. -func New(webhookURL, githubUserURL string) cloudbuildnotifier.Notifier { - return notifier{ - webhookURL, - githubUserURL, - } +func New(webhookURL string) cloudbuildnotifier.Notifier { + return notifier{webhookURL} } func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, buildParams cloudbuild.BuildParameters) error { From f25b8fc01b4219537e074e567535f1291e1b62c2 Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Mon, 2 Aug 2021 15:09:18 -0500 Subject: [PATCH 04/10] Log substitutions available --- pkg/cloudbuild/cloudbuild.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index 68a506c..168d24d 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/fatih/structs" cloudbuild "google.golang.org/api/cloudbuild/v1" + "log" ) type CloudbuildClient struct { @@ -44,6 +45,7 @@ func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, if err != nil { return *buildParams, err } + log.Println("Substitutions available:", result.Substitutions) for k, v := range result.Substitutions { if f, ok := b.FieldOk(k); ok { f.Set(v) From 27c709ecfec4fb45de447425caea16e6bbde8c3d Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Mon, 2 Aug 2021 16:22:59 -0500 Subject: [PATCH 05/10] Use git source url from cloudbuild substitution --- pkg/cloudbuild/cloudbuild.go | 14 +++++++------- pkg/notifier/slack/slack.go | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index 168d24d..0684b73 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -27,13 +27,13 @@ func New(projectId string) (*CloudbuildClient, error) { } type BuildParameters struct { - Id string - REPO_NAME string - BRANCH_NAME string - COMMIT_SHA string - REVISION_ID string - TRIGGER_NAME string - URL string + Id string + REPO_NAME string + BRANCH_NAME string + COMMIT_SHA string + REVISION_ID string + TRIGGER_NAME string + _HEAD_REPO_URL string } func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, error) { diff --git a/pkg/notifier/slack/slack.go b/pkg/notifier/slack/slack.go index 7e2bd6e..1cf58ea 100644 --- a/pkg/notifier/slack/slack.go +++ b/pkg/notifier/slack/slack.go @@ -13,7 +13,7 @@ import ( ) type notifier struct { - webhookURL string + webhookURL string } // New creates a slack notifier. @@ -71,7 +71,7 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, } func buildGitSourceURL(buildParams cloudbuild.BuildParameters) (string, error) { - u, err := url.Parse(buildParams.URL) + u, err := url.Parse(buildParams._) if err != nil { return "", err } From d5a07b244e13f2a6c3da269979546daf165b3a07 Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Mon, 2 Aug 2021 16:48:46 -0500 Subject: [PATCH 06/10] User struct field HEAD_REPO_URL --- pkg/cloudbuild/cloudbuild.go | 14 +++++++------- pkg/notifier/slack/slack.go | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index 0684b73..69198ed 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -27,13 +27,13 @@ func New(projectId string) (*CloudbuildClient, error) { } type BuildParameters struct { - Id string - REPO_NAME string - BRANCH_NAME string - COMMIT_SHA string - REVISION_ID string - TRIGGER_NAME string - _HEAD_REPO_URL string + Id string + REPO_NAME string + BRANCH_NAME string + COMMIT_SHA string + REVISION_ID string + TRIGGER_NAME string + HEAD_REPO_URL string } func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, error) { diff --git a/pkg/notifier/slack/slack.go b/pkg/notifier/slack/slack.go index 1cf58ea..5796852 100644 --- a/pkg/notifier/slack/slack.go +++ b/pkg/notifier/slack/slack.go @@ -71,7 +71,7 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse, } func buildGitSourceURL(buildParams cloudbuild.BuildParameters) (string, error) { - u, err := url.Parse(buildParams._) + u, err := url.Parse(buildParams.HEAD_REPO_URL) if err != nil { return "", err } From 4988823040092e8050d2e8d57ca1395f10fa3980 Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Mon, 2 Aug 2021 18:34:56 -0500 Subject: [PATCH 07/10] Use debug logging --- pkg/cloudbuild/cloudbuild.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index 69198ed..169f096 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -4,7 +4,7 @@ import ( "context" "fmt" "github.com/fatih/structs" - cloudbuild "google.golang.org/api/cloudbuild/v1" + "google.golang.org/api/cloudbuild/v1" "log" ) @@ -37,12 +37,14 @@ type BuildParameters struct { } func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, error) { + log.Println("Getting build parameters...") buildParams := &BuildParameters{ Id: buildId, } b := structs.New(buildParams) result, err := c.client.Get(c.ProjectID, buildId).Do() if err != nil { + log.Printf("error getting build parameters: %s\n", err) return *buildParams, err } log.Println("Substitutions available:", result.Substitutions) From efa089a41038db197235ac625f67c46fb83defa4 Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Mon, 2 Aug 2021 18:46:34 -0500 Subject: [PATCH 08/10] User formatted logging --- pkg/cloudbuild/cloudbuild.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index 169f096..497ca82 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -37,7 +37,7 @@ type BuildParameters struct { } func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, error) { - log.Println("Getting build parameters...") + log.Printf("Getting build parameters...\n") buildParams := &BuildParameters{ Id: buildId, } @@ -47,7 +47,7 @@ func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, log.Printf("error getting build parameters: %s\n", err) return *buildParams, err } - log.Println("Substitutions available:", result.Substitutions) + log.Printf("Substitutions available: %v\n", result.Substitutions) for k, v := range result.Substitutions { if f, ok := b.FieldOk(k); ok { f.Set(v) From b6346e1438b71c1613a336afad4189c293e22b04 Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Mon, 2 Aug 2021 19:18:39 -0500 Subject: [PATCH 09/10] Log message attribues --- cmd/main.go | 2 ++ pkg/cloudbuild/cloudbuild.go | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index a2b9271..b1421fb 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -108,6 +108,8 @@ func handleMessage(msg *pubsub.Message, notifier cloudbuildnotifier.Notifier, cl return fmt.Errorf("failed unmarshaling json from cloudbuild response: %s", err) } + log.Println("messages attr:", msg.Attributes ) + buildParams, err := cloudbuild.GetBuildParameters(msg.Attributes["buildId"]) if err != nil { return fmt.Errorf("Failed getting build parameters from cloudbuild for build %s: %s", diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index 497ca82..b0eed74 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -37,7 +37,6 @@ type BuildParameters struct { } func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, error) { - log.Printf("Getting build parameters...\n") buildParams := &BuildParameters{ Id: buildId, } @@ -47,7 +46,7 @@ func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, log.Printf("error getting build parameters: %s\n", err) return *buildParams, err } - log.Printf("Substitutions available: %v\n", result.Substitutions) + for k, v := range result.Substitutions { if f, ok := b.FieldOk(k); ok { f.Set(v) From c04cfb757a69ebed72e5585f931b2b6e7d4dfb3e Mon Sep 17 00:00:00 2001 From: Eduar Tua Date: Mon, 2 Aug 2021 20:38:59 -0500 Subject: [PATCH 10/10] Inspect source --- cmd/main.go | 2 -- pkg/cloudbuild/cloudbuild.go | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index b1421fb..a2b9271 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -108,8 +108,6 @@ func handleMessage(msg *pubsub.Message, notifier cloudbuildnotifier.Notifier, cl return fmt.Errorf("failed unmarshaling json from cloudbuild response: %s", err) } - log.Println("messages attr:", msg.Attributes ) - buildParams, err := cloudbuild.GetBuildParameters(msg.Attributes["buildId"]) if err != nil { return fmt.Errorf("Failed getting build parameters from cloudbuild for build %s: %s", diff --git a/pkg/cloudbuild/cloudbuild.go b/pkg/cloudbuild/cloudbuild.go index b0eed74..843afe7 100644 --- a/pkg/cloudbuild/cloudbuild.go +++ b/pkg/cloudbuild/cloudbuild.go @@ -42,6 +42,7 @@ func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, } b := structs.New(buildParams) result, err := c.client.Get(c.ProjectID, buildId).Do() + log.Println("source:", result.Source) if err != nil { log.Printf("error getting build parameters: %s\n", err) return *buildParams, err