Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
}
Expand All @@ -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 {
Expand All @@ -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)
Expand Down
21 changes: 13 additions & 8 deletions pkg/cloudbuild/cloudbuild.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import (
"context"
"fmt"
"github.com/fatih/structs"
cloudbuild "google.golang.org/api/cloudbuild/v1"
"google.golang.org/api/cloudbuild/v1"
"log"
)

type CloudbuildClient struct {
Expand All @@ -26,23 +27,27 @@ 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
Id string
REPO_NAME string
BRANCH_NAME string
COMMIT_SHA string
REVISION_ID string
TRIGGER_NAME string
HEAD_REPO_URL string
}

func (c *CloudbuildClient) GetBuildParameterss(buildId string) (BuildParameters, error) {
func (c *CloudbuildClient) GetBuildParameters(buildId string) (BuildParameters, error) {
buildParams := &BuildParameters{
Id: buildId,
}
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
}

for k, v := range result.Substitutions {
if f, ok := b.FieldOk(k); ok {
f.Set(v)
Expand Down
22 changes: 20 additions & 2 deletions pkg/notifier/slack/slack.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package slack
import (
"fmt"
"log"
"net/url"
"path"
"strings"

cloudbuildnotifier "github.com/cloudkite-io/cloudbuild-notifier"
"github.com/cloudkite-io/cloudbuild-notifier/pkg/cloudbuild"
Expand Down Expand Up @@ -34,11 +37,16 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse,
return nil
}

commitShaURL, err := buildGitSourceURL(buildParams)
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",
Expand All @@ -52,7 +60,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)
}
Expand All @@ -62,6 +70,16 @@ func (n notifier) Send(cloudbuildResponse cloudbuildnotifier.CloudbuildResponse,
return nil
}

func buildGitSourceURL(buildParams cloudbuild.BuildParameters) (string, error) {
u, err := url.Parse(buildParams.HEAD_REPO_URL)
if err != nil {
return "", err
}
u.Path = strings.Trim(u.Path, ".git")
u.Path = path.Join(u.Path, "commit", buildParams.COMMIT_SHA)
return u.String(), nil
}

func stringInSlice(needle string, haystack []string) bool {
for _, b := range haystack {
if b == needle {
Expand Down