92 lines
1.9 KiB
Ruby
92 lines
1.9 KiB
Ruby
require 'slack-notifier'
|
|
|
|
module Ci
|
|
class SlackMessage
|
|
include Gitlab::Application.routes.url_helpers
|
|
|
|
def initialize(commit)
|
|
@commit = commit
|
|
end
|
|
|
|
def pretext
|
|
''
|
|
end
|
|
|
|
def color
|
|
attachment_color
|
|
end
|
|
|
|
def fallback
|
|
format(attachment_message)
|
|
end
|
|
|
|
def attachments
|
|
fields = []
|
|
|
|
commit.latest_builds.each do |build|
|
|
next if build.allow_failure?
|
|
next unless build.failed?
|
|
fields << {
|
|
title: build.name,
|
|
value: "Build <#{namespace_project_build_url(build.gl_project.namespace, build.gl_project, build)}|\##{build.id}> failed in #{build.duration.to_i} second(s)."
|
|
}
|
|
end
|
|
|
|
[{
|
|
text: attachment_message,
|
|
color: attachment_color,
|
|
fields: fields
|
|
}]
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :commit
|
|
|
|
def attachment_message
|
|
out = "<#{ci_project_url(project)}|#{project_name}>: "
|
|
out << "Commit <#{builds_namespace_project_commit_url(commit.gl_project.namespace, commit.gl_project, commit.sha)}|\##{commit.id}> "
|
|
out << "(<#{commit_sha_link}|#{commit.short_sha}>) "
|
|
out << "of <#{commit_ref_link}|#{commit.ref}> "
|
|
out << "by #{commit.git_author_name} " if commit.git_author_name
|
|
out << "#{commit_status} in "
|
|
out << "#{commit.duration} second(s)"
|
|
end
|
|
|
|
def format(string)
|
|
Slack::Notifier::LinkFormatter.format(string)
|
|
end
|
|
|
|
def project
|
|
commit.project
|
|
end
|
|
|
|
def project_name
|
|
project.name
|
|
end
|
|
|
|
def commit_sha_link
|
|
"#{project.gitlab_url}/commit/#{commit.sha}"
|
|
end
|
|
|
|
def commit_ref_link
|
|
"#{project.gitlab_url}/commits/#{commit.ref}"
|
|
end
|
|
|
|
def attachment_color
|
|
if commit.success?
|
|
'good'
|
|
else
|
|
'danger'
|
|
end
|
|
end
|
|
|
|
def commit_status
|
|
if commit.success?
|
|
'succeeded'
|
|
else
|
|
'failed'
|
|
end
|
|
end
|
|
end
|
|
end
|