diff options
author | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-03-22 20:54:17 +0100 |
---|---|---|
committer | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-03-22 21:17:38 +0100 |
commit | fed319b4ab763790865835eca35d179294883dd2 (patch) | |
tree | 4865d8919599574ecdf79f95aea5012eb2eb6a50 /app/models/project_services/chat_notification_service.rb | |
parent | 3574963bc01097da418b62ae6f87d02359f36f12 (diff) | |
download | gitlab-ce-fed319b4ab763790865835eca35d179294883dd2.tar.gz |
Allow chat notifications only for the default branch
Right now, it once a chat notifacation service has been enabled, there
is no way to limit the branches which trigger a notification. Instead of
allowing the user to specify the list, I opted to let the user check the
box if they'd only want to be notified of the default branch.
Tags are uneffected by this change.
Diffstat (limited to 'app/models/project_services/chat_notification_service.rb')
-rw-r--r-- | app/models/project_services/chat_notification_service.rb | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/app/models/project_services/chat_notification_service.rb b/app/models/project_services/chat_notification_service.rb index 200be99f36b..1a26d97283e 100644 --- a/app/models/project_services/chat_notification_service.rb +++ b/app/models/project_services/chat_notification_service.rb @@ -6,7 +6,7 @@ class ChatNotificationService < Service default_value_for :category, 'chat' prop_accessor :webhook, :username, :channel - boolean_accessor :notify_only_broken_pipelines + boolean_accessor :notify_only_broken_pipelines, :notify_only_default_branch validates :webhook, presence: true, url: true, if: :activated? @@ -17,6 +17,7 @@ class ChatNotificationService < Service if properties.nil? self.properties = {} self.notify_only_broken_pipelines = true + self.notify_only_default_branch = false end end @@ -29,6 +30,19 @@ class ChatNotificationService < Service pipeline wiki_page] end + def fields + default_fields + build_event_channels + end + + def default_fields + [ + { type: 'text', name: 'webhook', placeholder: "e.g. #{webhook_placeholder}" }, + { type: 'text', name: 'username', placeholder: 'e.g. GitLab' }, + { type: 'checkbox', name: 'notify_only_broken_pipelines' }, + { type: 'checkbox', name: 'notify_only_default_branch' }, + ] + end + def execute(data) return unless supported_events.include?(data[:object_kind]) return unless webhook.present? @@ -123,6 +137,20 @@ class ChatNotificationService < Service end def should_pipeline_be_notified?(data) + notify_for_branch(data) && notify_for_pipeline(data) + end + + def notify_for_branch(data) + ref_type = data[:object_attributes][:tag] ? 'tag' : 'branch' + + if ref_type == 'branch' && notify_only_default_branch + data[:object_attributes][:ref] == project.default_branch + else + true + end + end + + def notify_for_pipeline(data) case data[:object_attributes][:status] when 'success' !notify_only_broken_pipelines? |