Skip to content

Commit

Permalink
Merge pull request #366 from fluxcd/bitbucket
Browse files Browse the repository at this point in the history
Check for duplicate commit status in Bitbucket
  • Loading branch information
stefanprodan authored Apr 26, 2022
2 parents d5fecef + 54d8ef8 commit acc522a
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions internal/notifier/bitbucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package notifier
import (
"crypto/tls"
"crypto/x509"
"encoding/json"
"errors"
"fmt"
"net/http"
Expand Down Expand Up @@ -114,6 +115,19 @@ func (b Bitbucket) Post(event events.Event) error {
Description: desc,
Url: "https://bitbucket.org",
}

existingCommitStatus, err := b.Client.Repositories.Commits.GetCommitStatus(cmo, cso.Key)
var statusErr *bitbucket.UnexpectedResponseStatusError
if err != nil && !(errors.As(err, &statusErr) && strings.Contains(statusErr.Status, http.StatusText(http.StatusNotFound))) {
return fmt.Errorf("could not get commit status: %v", err)
}
dupe, err := duplicateBitbucketStatus(existingCommitStatus, cso)
if err != nil {
return err
}
if dupe {
return nil
}
_, err = b.Client.Repositories.Commits.CreateCommitStatus(cmo, cso)
if err != nil {
return err
Expand All @@ -122,6 +136,22 @@ func (b Bitbucket) Post(event events.Event) error {
return nil
}

func duplicateBitbucketStatus(statuses interface{}, status *bitbucket.CommitStatusOptions) (bool, error) {
commitStatus := bitbucket.CommitStatusOptions{}
b, err := json.Marshal(statuses)
if err != nil {
return false, err
}
err = json.Unmarshal(b, &commitStatus)
if err != nil {
return false, err
}
if commitStatus.State == status.State && commitStatus.Description == status.Description {
return true, nil
}
return false, nil
}

func toBitbucketState(severity string) (string, error) {
switch severity {
case events.EventSeverityInfo:
Expand Down

0 comments on commit acc522a

Please sign in to comment.