Commit 8f53e9cc authored by Peter Marko's avatar Peter Marko

Add notify_only_default_branch option to PipelinesEmailService

parent fe090797
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
class PipelinesEmailService < Service class PipelinesEmailService < Service
prop_accessor :recipients prop_accessor :recipients
boolean_accessor :notify_only_broken_pipelines boolean_accessor :notify_only_broken_pipelines, :notify_only_default_branch
validates :recipients, presence: true, if: :valid_recipients? validates :recipients, presence: true, if: :valid_recipients?
def initialize_properties def initialize_properties
self.properties ||= { notify_only_broken_pipelines: true } self.properties ||= { notify_only_broken_pipelines: true, notify_only_default_branch: false }
end end
def title def title
...@@ -54,7 +54,9 @@ class PipelinesEmailService < Service ...@@ -54,7 +54,9 @@ class PipelinesEmailService < Service
placeholder: _('Emails separated by comma'), placeholder: _('Emails separated by comma'),
required: true }, required: true },
{ type: 'checkbox', { type: 'checkbox',
name: 'notify_only_broken_pipelines' } name: 'notify_only_broken_pipelines' },
{ type: 'checkbox',
name: 'notify_only_default_branch' }
] ]
end end
...@@ -67,6 +69,16 @@ class PipelinesEmailService < Service ...@@ -67,6 +69,16 @@ class PipelinesEmailService < Service
end end
def should_pipeline_be_notified?(data) def should_pipeline_be_notified?(data)
notify_for_pipeline_branch?(data) && notify_for_pipeline?(data)
end
def notify_for_pipeline_branch?(data)
return true unless notify_only_default_branch?
data[:object_attributes][:ref] == data[:project][:default_branch]
end
def notify_for_pipeline?(data)
case data[:object_attributes][:status] case data[:object_attributes][:status]
when 'success' when 'success'
!notify_only_broken_pipelines? !notify_only_broken_pipelines?
......
---
title: Add notify_only_default_branch option to PipelinesEmailService
merge_request: 28271
author: Peter Marko
type: added
...@@ -754,6 +754,7 @@ Parameters: ...@@ -754,6 +754,7 @@ Parameters:
| `recipients` | string | yes | Comma-separated list of recipient email addresses | | `recipients` | string | yes | Comma-separated list of recipient email addresses |
| `add_pusher` | boolean | no | Add pusher to recipients list | | `add_pusher` | boolean | no | Add pusher to recipients list |
| `notify_only_broken_pipelines` | boolean | no | Notify only broken pipelines | | `notify_only_broken_pipelines` | boolean | no | Notify only broken pipelines |
| `notify_only_default_branch` | boolean | no | Send notifications only for the default branch ([introduced in GitLab 12.0](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/28271)) |
### Delete Pipeline-Emails service ### Delete Pipeline-Emails service
......
...@@ -563,6 +563,12 @@ module API ...@@ -563,6 +563,12 @@ module API
name: :notify_only_broken_pipelines, name: :notify_only_broken_pipelines,
type: Boolean, type: Boolean,
desc: 'Notify only broken pipelines' desc: 'Notify only broken pipelines'
},
{
required: false,
name: :notify_only_default_branch,
type: Boolean,
desc: 'Send notifications only for the default branch'
} }
], ],
'pivotaltracker' => [ 'pivotaltracker' => [
......
...@@ -4,7 +4,11 @@ require 'spec_helper' ...@@ -4,7 +4,11 @@ require 'spec_helper'
describe PipelinesEmailService, :mailer do describe PipelinesEmailService, :mailer do
let(:pipeline) do let(:pipeline) do
create(:ci_pipeline, project: project, sha: project.commit('master').sha) create(:ci_pipeline, :failed,
project: project,
sha: project.commit('master').sha,
ref: project.default_branch
)
end end
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
...@@ -84,12 +88,7 @@ describe PipelinesEmailService, :mailer do ...@@ -84,12 +88,7 @@ describe PipelinesEmailService, :mailer do
subject.test(data) subject.test(data)
end end
context 'when pipeline is failed' do context 'when pipeline is failed and on default branch' do
before do
data[:object_attributes][:status] = 'failed'
pipeline.update(status: 'failed')
end
it_behaves_like 'sending email' it_behaves_like 'sending email'
end end
...@@ -101,6 +100,25 @@ describe PipelinesEmailService, :mailer do ...@@ -101,6 +100,25 @@ describe PipelinesEmailService, :mailer do
it_behaves_like 'sending email' it_behaves_like 'sending email'
end end
context 'when pipeline is failed and on a non-default branch' do
before do
data[:object_attributes][:ref] = 'not-the-default-branch'
pipeline.update(ref: 'not-the-default-branch')
end
context 'with notify_only_default branch on' do
before do
subject.notify_only_default_branch = true
end
it_behaves_like 'sending email'
end
context 'with notify_only_default_branch off' do
it_behaves_like 'sending email'
end
end
end end
describe '#execute' do describe '#execute' do
...@@ -110,11 +128,6 @@ describe PipelinesEmailService, :mailer do ...@@ -110,11 +128,6 @@ describe PipelinesEmailService, :mailer do
context 'with recipients' do context 'with recipients' do
context 'with failed pipeline' do context 'with failed pipeline' do
before do
data[:object_attributes][:status] = 'failed'
pipeline.update(status: 'failed')
end
it_behaves_like 'sending email' it_behaves_like 'sending email'
end end
...@@ -133,11 +146,6 @@ describe PipelinesEmailService, :mailer do ...@@ -133,11 +146,6 @@ describe PipelinesEmailService, :mailer do
end end
context 'with failed pipeline' do context 'with failed pipeline' do
before do
data[:object_attributes][:status] = 'failed'
pipeline.update(status: 'failed')
end
it_behaves_like 'sending email' it_behaves_like 'sending email'
end end
...@@ -150,6 +158,40 @@ describe PipelinesEmailService, :mailer do ...@@ -150,6 +158,40 @@ describe PipelinesEmailService, :mailer do
it_behaves_like 'not sending email' it_behaves_like 'not sending email'
end end
end end
context 'with notify_only_default_branch off' do
context 'with default branch' do
it_behaves_like 'sending email'
end
context 'with non default branch' do
before do
data[:object_attributes][:ref] = 'not-the-default-branch'
pipeline.update(ref: 'not-the-default-branch')
end
it_behaves_like 'sending email'
end
end
context 'with notify_only_default_branch on' do
before do
subject.notify_only_default_branch = true
end
context 'with default branch' do
it_behaves_like 'sending email'
end
context 'with non default branch' do
before do
data[:object_attributes][:ref] = 'not-the-default-branch'
pipeline.update(ref: 'not-the-default-branch')
end
it_behaves_like 'not sending email'
end
end
end end
context 'with empty recipients list' do context 'with empty recipients list' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment