diff --git a/service/hook/bitbucketv2/bitbucketv2.go b/service/hook/bitbucketv2/bitbucketv2.go index 37526120..818ecbb9 100644 --- a/service/hook/bitbucketv2/bitbucketv2.go +++ b/service/hook/bitbucketv2/bitbucketv2.go @@ -252,6 +252,8 @@ func transformPullRequestEvent(pullRequest PullRequestEventModel) hookCommon.Tra TriggeredBy: hookCommon.GenerateTriggeredBy(ProviderID, pullRequest.PullRequestInfo.Author.Nickname), }, }, + SkippedByPrDescription: !hookCommon.IsSkipBuildByCommitMessage(pullRequest.PullRequestInfo.Title) && + hookCommon.IsSkipBuildByCommitMessage(pullRequest.PullRequestInfo.Description), } } diff --git a/service/hook/common/common.go b/service/hook/common/common.go index eeff5986..42fb0a62 100644 --- a/service/hook/common/common.go +++ b/service/hook/common/common.go @@ -38,6 +38,9 @@ type TransformResultModel struct { // but the handler won't wait for the response from the Trigger API, // it'll respond immediately after calling the Trigger API DontWaitForTriggerResponse bool + // Used for logging if only pull request description contains [skip ci] or + // [ci skip] but title doesn't + SkippedByPrDescription bool } // Provider ... diff --git a/service/hook/endpoint.go b/service/hook/endpoint.go index 08a00f5f..bb8f8766 100644 --- a/service/hook/endpoint.go +++ b/service/hook/endpoint.go @@ -6,6 +6,10 @@ import ( "net/http" "net/url" + "github.com/gorilla/mux" + "github.com/pkg/errors" + "go.uber.org/zap" + "github.com/bitrise-io/api-utils/logging" "github.com/bitrise-io/bitrise-webhooks/bitriseapi" "github.com/bitrise-io/bitrise-webhooks/config" @@ -23,9 +27,6 @@ import ( "github.com/bitrise-io/bitrise-webhooks/service/hook/slack" "github.com/bitrise-io/bitrise-webhooks/service/hook/visualstudioteamservices" "github.com/bitrise-io/go-utils/colorstring" - "github.com/gorilla/mux" - "github.com/pkg/errors" - "go.uber.org/zap" ) func supportedProviders() map[string]hookCommon.Provider { @@ -201,6 +202,10 @@ func HTTPHandler(w http.ResponseWriter, r *http.Request) { return } + if hookTransformResult.SkippedByPrDescription { + logger.Warn(fmt.Sprintf("[skipped by pr description] app: %s, service: %s", appSlug, serviceID)) + } + respondWith := hookCommon.TransformResponseInputModel{ Errors: []string{}, SuccessTriggerResponses: []bitriseapi.TriggerAPIResponseModel{}, diff --git a/service/hook/github/github.go b/service/hook/github/github.go index 6c6ead3d..4648cac4 100644 --- a/service/hook/github/github.go +++ b/service/hook/github/github.go @@ -256,6 +256,8 @@ func transformPullRequestEvent(pullRequest PullRequestEventModel) hookCommon.Tra TriggeredBy: hookCommon.GenerateTriggeredBy(ProviderID, pullRequest.Sender.Login), }, }, + SkippedByPrDescription: !hookCommon.IsSkipBuildByCommitMessage(pullRequest.PullRequestInfo.Title) && + hookCommon.IsSkipBuildByCommitMessage(pullRequest.PullRequestInfo.Body), } } diff --git a/service/hook/gitlab/gitlab.go b/service/hook/gitlab/gitlab.go index 3b500574..27ada30e 100644 --- a/service/hook/gitlab/gitlab.go +++ b/service/hook/gitlab/gitlab.go @@ -340,6 +340,8 @@ func transformMergeRequestEvent(mergeRequest MergeRequestEventModel) hookCommon. TriggeredBy: hookCommon.GenerateTriggeredBy(ProviderID, mergeRequest.User.Username), }, }, + SkippedByPrDescription: !hookCommon.IsSkipBuildByCommitMessage(mergeRequest.ObjectAttributes.Title) && + hookCommon.IsSkipBuildByCommitMessage(mergeRequest.ObjectAttributes.Description), } } @@ -382,7 +384,8 @@ func (hp HookProvider) TransformRequest(r *http.Request) hookCommon.TransformRes if err := json.NewDecoder(r.Body).Decode(&codePushEvent); err != nil { return hookCommon.TransformResultModel{ DontWaitForTriggerResponse: true, - Error: fmt.Errorf("Failed to parse request body: %s", err)} + Error: fmt.Errorf("Failed to parse request body: %s", err), + } } } return transformCodePushEvent(codePushEvent) @@ -393,7 +396,8 @@ func (hp HookProvider) TransformRequest(r *http.Request) hookCommon.TransformRes if err := json.NewDecoder(r.Body).Decode(&tagPushEvent); err != nil { return hookCommon.TransformResultModel{ DontWaitForTriggerResponse: true, - Error: fmt.Errorf("Failed to parse request body: %s", err)} + Error: fmt.Errorf("Failed to parse request body: %s", err), + } } } return transformTagPushEvent(tagPushEvent) @@ -402,7 +406,8 @@ func (hp HookProvider) TransformRequest(r *http.Request) hookCommon.TransformRes if err := json.NewDecoder(r.Body).Decode(&mergeRequestEvent); err != nil { return hookCommon.TransformResultModel{ DontWaitForTriggerResponse: true, - Error: fmt.Errorf("Failed to parse request body as JSON: %s", err)} + Error: fmt.Errorf("Failed to parse request body as JSON: %s", err), + } } return transformMergeRequestEvent(mergeRequestEvent)