diff --git a/remote/github/github.go b/remote/github/github.go index 1f698ded..867c23ec 100644 --- a/remote/github/github.go +++ b/remote/github/github.go @@ -6,6 +6,7 @@ import ( "fmt" "net/http" "net/url" + "regexp" "strconv" "strings" @@ -25,6 +26,8 @@ const ( DefaultMergeRef = "merge" ) +var githubDeployRegex = regexp.MustCompile(".+/deployments/(\\d+)") + type Github struct { URL string API string @@ -236,10 +239,10 @@ func (g *Github) File(u *model.User, r *model.Repo, b *model.Build, f string) ([ // An example would be the GitHub pull request status. func (g *Github) Status(u *model.User, r *model.Repo, b *model.Build, link string) error { client := NewClient(g.API, u.Token, g.SkipVerify) - if ( b.Event == "deployment") { - return deploymentStatus(client,r,b,link) + if b.Event == "deployment" { + return deploymentStatus(client, r, b, link) } else { - return repoStatus(client,r,b,link) + return repoStatus(client, r, b, link) } } @@ -258,14 +261,19 @@ func repoStatus(client *github.Client, r *model.Repo, b *model.Build, link strin func deploymentStatus(client *github.Client, r *model.Repo, b *model.Build, link string) error { // the deployment ID is only available in the the link to the build as the last element in the URL - parts := strings.Split(b.Link,"/") + parts := strings.Split(b.Link, "/") + matches := githubDeployRegex.FindStringSubmatch(b.Link) + // if the deployment was not triggered from github, don't send a deployment status + if len(matches) != 2 { + return nil + } id, _ := strconv.Atoi(parts[len(parts)-1]) status := getStatus(b.Status) desc := getDesc(b.Status) data := github.DeploymentStatusRequest{ - State: github.String(status), - Description: github.String(desc), - TargetURL: github.String(link), + State: github.String(status), + Description: github.String(desc), + TargetURL: github.String(link), } _, _, err := client.Repositories.CreateDeploymentStatus(r.Owner, r.Name, id, &data) return err