diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2016-11-09 13:41:04 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2016-11-09 13:41:04 +0000 |
commit | a8fcaaf1bf27a2bcf20a0cde2546f0de7b73dced (patch) | |
tree | 5e006c7096862bfdf17085783e26d32559a05e59 /app/services | |
parent | 940cb3db5b936aec90a08c94aa9952f9b52c1fd3 (diff) | |
parent | 3e75e453fb258b3e60f3e9606b5f589006a4654b (diff) | |
download | gitlab-ce-a8fcaaf1bf27a2bcf20a0cde2546f0de7b73dced.tar.gz |
Merge branch 'pipeline-notifications' into 'master'
Integrate CI emails into notification system
Closes #21930
See merge request !6342
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/ci/send_pipeline_notification_service.rb | 19 | ||||
-rw-r--r-- | app/services/notification_service.rb | 27 |
2 files changed, 24 insertions, 22 deletions
diff --git a/app/services/ci/send_pipeline_notification_service.rb b/app/services/ci/send_pipeline_notification_service.rb deleted file mode 100644 index ceb182801f7..00000000000 --- a/app/services/ci/send_pipeline_notification_service.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Ci - class SendPipelineNotificationService - attr_reader :pipeline - - def initialize(new_pipeline) - @pipeline = new_pipeline - end - - def execute(recipients) - email_template = "pipeline_#{pipeline.status}_email" - - return unless Notify.respond_to?(email_template) - - recipients.each do |to| - Notify.public_send(email_template, pipeline, to).deliver_later - end - end - end -end diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 72712afc07e..6697840cc26 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -312,6 +312,22 @@ class NotificationService mailer.project_was_not_exported_email(current_user, project, errors).deliver_later end + def pipeline_finished(pipeline, recipients = nil) + email_template = "pipeline_#{pipeline.status}_email" + + return unless mailer.respond_to?(email_template) + + recipients ||= build_recipients( + pipeline, + pipeline.project, + nil, # The acting user, who won't be added to recipients + action: pipeline.status).map(&:notification_email) + + if recipients.any? + mailer.public_send(email_template, pipeline, recipients).deliver_later + end + end + protected # Get project/group users with CUSTOM notification level @@ -475,9 +491,14 @@ class NotificationService end def reject_users_without_access(recipients, target) - return recipients unless target.is_a?(Issuable) + ability = case target + when Issuable + :"read_#{target.to_ability_name}" + when Ci::Pipeline + :read_build # We have build trace in pipeline emails + end - ability = :"read_#{target.to_ability_name}" + return recipients unless ability recipients.select do |user| user.can?(ability, target) @@ -624,6 +645,6 @@ class NotificationService # Build event key to search on custom notification level # Check NotificationSetting::EMAIL_EVENTS def build_custom_key(action, object) - "#{action}_#{object.class.name.underscore}".to_sym + "#{action}_#{object.class.model_name.name.underscore}".to_sym end end |