def run(results)
return if Scan.config[:skip_slack]
return if Scan.config[:slack_only_on_failure] && results[:failures] == 0
return if Scan.config[:slack_url].to_s.empty?
if Scan.config[:slack_channel].to_s.length > 0
channel = Scan.config[:slack_channel]
channel = ('#' + channel) unless ['#', '@'].include?(channel[0])
end
username = Scan.config[:slack_use_webhook_configured_username_and_icon] ? nil : Scan.config[:slack_username]
icon_url = Scan.config[:slack_use_webhook_configured_username_and_icon] ? nil : Scan.config[:slack_icon_url]
fields = []
if results[:build_errors]
fields << {
title: 'Build Errors',
value: results[:build_errors].to_s,
short: true
}
end
if results[:failures]
fields << {
title: 'Test Failures',
value: results[:failures].to_s,
short: true
}
end
if results[:tests] && results[:failures]
fields << {
title: 'Successful Tests',
value: (results[:tests] - results[:failures]).to_s,
short: true
}
end
options = FastlaneCore::Configuration.create(Fastlane::Actions::SlackAction.available_options, {
message: "#{Scan.config[:app_name] || Scan.project.app_name} Tests:\n#{Scan.config[:slack_message]}",
channel: channel,
slack_url: Scan.config[:slack_url].to_s,
success: results[:build_errors].to_i == 0 && results[:failures].to_i == 0,
username: username,
icon_url: icon_url,
payload: {},
default_payloads: Scan.config[:slack_default_payloads],
attachment_properties: {
fields: fields
}
})
Fastlane::Actions::SlackAction.run(options)
end