82 lines
1.8 KiB
Ruby
82 lines
1.8 KiB
Ruby
|
# == Schema Information
|
||
|
#
|
||
|
# Table name: services
|
||
|
#
|
||
|
# id :integer not null, primary key
|
||
|
# type :string(255)
|
||
|
# title :string(255)
|
||
|
# project_id :integer not null
|
||
|
# created_at :datetime
|
||
|
# updated_at :datetime
|
||
|
# active :boolean default(FALSE), not null
|
||
|
# properties :text
|
||
|
#
|
||
|
|
||
|
module Ci
|
||
|
class SlackService < Ci::Service
|
||
|
prop_accessor :webhook
|
||
|
boolean_accessor :notify_only_broken_builds
|
||
|
validates :webhook, presence: true, if: :activated?
|
||
|
|
||
|
default_value_for :notify_only_broken_builds, true
|
||
|
|
||
|
def title
|
||
|
'Slack'
|
||
|
end
|
||
|
|
||
|
def description
|
||
|
'A team communication tool for the 21st century'
|
||
|
end
|
||
|
|
||
|
def to_param
|
||
|
'slack'
|
||
|
end
|
||
|
|
||
|
def help
|
||
|
'Visit https://www.slack.com/services/new/incoming-webhook. Then copy link and save project!' unless webhook.present?
|
||
|
end
|
||
|
|
||
|
def fields
|
||
|
[
|
||
|
{ type: 'text', name: 'webhook', label: 'Webhook URL', placeholder: '' },
|
||
|
{ type: 'checkbox', name: 'notify_only_broken_builds', label: 'Notify only broken builds' }
|
||
|
]
|
||
|
end
|
||
|
|
||
|
def can_execute?(build)
|
||
|
return if build.allow_failure?
|
||
|
|
||
|
commit = build.commit
|
||
|
return unless commit
|
||
|
return unless commit.builds_without_retry.include?(build)
|
||
|
|
||
|
case commit.status.to_sym
|
||
|
when :failed
|
||
|
true
|
||
|
when :success
|
||
|
true unless notify_only_broken_builds?
|
||
|
else
|
||
|
false
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def execute(build)
|
||
|
message = Ci::SlackMessage.new(build.commit)
|
||
|
options = default_options.merge(
|
||
|
color: message.color,
|
||
|
fallback: message.fallback,
|
||
|
attachments: message.attachments
|
||
|
)
|
||
|
Ci::SlackNotifierWorker.perform_async(webhook, message.pretext, options)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def default_options
|
||
|
{
|
||
|
username: 'GitLab CI'
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
end
|