19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/fastlane/actions/slack.rb', line 19
def self.run(params)
options = { message: '',
success: true,
channel: nil,
payload: {}
}.merge(params.first || {})
require 'slack-notifier'
color = (options[:success] ? 'good' : 'danger')
options[:message] = options[:message].to_s
options[:message] = Slack::Notifier::LinkFormatter.format(options[:message])
url = ENV['SLACK_URL']
unless url
Helper.log.fatal "Please add 'ENV[\"SLACK_URL\"] = \"https://hooks.slack.com/services/...\"' to your Fastfile's `before_all` section.".red
raise 'No SLACK_URL given.'.red
end
notifier = Slack::Notifier.new url
notifier.username = 'fastlane'
if options[:channel].to_s.length > 0
notifier.channel = options[:channel]
notifier.channel = ('#' + notifier.channel) unless ['#', '@'].include?(notifier.channel[0])
end
should_add_payload = ->(payload_name) { options[:default_payloads].nil? || options[:default_payloads].include?(payload_name) }
slack_attachment = {
fallback: options[:message],
text: options[:message],
color: color,
fields: []
}
slack_attachment[:fields] += options[:payload].map do |k, v|
{
title: k.to_s,
value: v.to_s,
short: false
}
end
if should_add_payload[:lane]
slack_attachment[:fields] << {
title: 'Lane',
value: Actions.lane_context[Actions::SharedValues::LANE_NAME],
short: true
}
end
if should_add_payload[:test_result]
slack_attachment[:fields] << {
title: 'Test Result',
value: (options[:success] ? 'Success' : 'Error'),
short: true
}
end
if Actions.git_branch && should_add_payload[:git_branch]
slack_attachment[:fields] << {
title: 'Git Branch',
value: Actions.git_branch,
short: true
}
end
if git_author && should_add_payload[:git_author]
if ENV['FASTLANE_SLACK_HIDE_AUTHOR_ON_SUCCESS'] && options[:success]
else
slack_attachment[:fields] << {
title: 'Git Author',
value: git_author,
short: true
}
end
end
if last_git_commit && should_add_payload[:last_git_commit]
slack_attachment[:fields] << {
title: 'Git Commit',
value: last_git_commit,
short: false
}
end
result = notifier.ping '',
icon_url: 'https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png',
attachments: [slack_attachment]
unless result.code.to_i == 200
Helper.log.debug result
raise 'Error pushing Slack message, maybe the integration has no permission to post on this channel? Try removing the channel parameter in your Fastfile.'.red
else
Helper.log.info 'Successfully sent Slack notification'.green
end
end
|