debian-mirror-gitlab/app/models/project_services/builds_email_service.rb

109 lines
2.3 KiB
Ruby
Raw Normal View History

2015-12-23 02:04:40 +05:30
class BuildsEmailService < Service
prop_accessor :recipients
boolean_accessor :add_pusher
boolean_accessor :notify_only_broken_builds
2016-06-02 11:05:42 +05:30
validates :recipients, presence: true, if: ->(s) { s.activated? && !s.add_pusher? }
2015-12-23 02:04:40 +05:30
def initialize_properties
if properties.nil?
self.properties = {}
self.notify_only_broken_builds = true
end
end
def title
'Builds emails'
end
def description
'Email the builds status to a list of recipients.'
end
def to_param
'builds_email'
end
def supported_events
%w(build)
end
def execute(push_data)
return unless supported_events.include?(push_data[:object_kind])
2016-06-02 11:05:42 +05:30
return unless should_build_be_notified?(push_data)
recipients = all_recipients(push_data)
2015-12-23 02:04:40 +05:30
2016-06-02 11:05:42 +05:30
if recipients.any?
2015-12-23 02:04:40 +05:30
BuildEmailWorker.perform_async(
push_data[:build_id],
2016-06-02 11:05:42 +05:30
recipients,
push_data
2015-12-23 02:04:40 +05:30
)
end
end
2016-08-24 12:49:21 +05:30
def can_test?
project.builds.count > 0
end
def disabled_title
"Please setup a build on your repository."
end
def test_data(project = nil, user = nil)
build = project.builds.last
Gitlab::BuildDataBuilder.build(build)
end
2015-12-23 02:04:40 +05:30
def fields
[
{ type: 'textarea', name: 'recipients', placeholder: 'Emails separated by comma' },
{ type: 'checkbox', name: 'add_pusher', label: 'Add pusher to recipients list' },
{ type: 'checkbox', name: 'notify_only_broken_builds' },
]
end
2016-08-24 12:49:21 +05:30
def test(data)
begin
# bypass build status verification when testing
data[:build_status] = "failed"
data[:build_allow_failure] = false
result = execute(data)
rescue StandardError => error
return { success: false, result: error }
end
{ success: true, result: result }
end
2015-12-23 02:04:40 +05:30
def should_build_be_notified?(data)
case data[:build_status]
when 'success'
!notify_only_broken_builds?
when 'failed'
!allow_failure?(data)
2015-12-23 02:04:40 +05:30
else
false
end
end
def allow_failure?(data)
data[:build_allow_failure] == true
end
2015-12-23 02:04:40 +05:30
def all_recipients(data)
2016-06-02 11:05:42 +05:30
all_recipients = []
unless recipients.blank?
all_recipients += recipients.split(',').compact.reject(&:blank?)
end
2015-12-23 02:04:40 +05:30
if add_pusher? && data[:user][:email]
2016-06-02 11:05:42 +05:30
all_recipients << data[:user][:email]
2015-12-23 02:04:40 +05:30
end
all_recipients
end
end