fastlane-plugin-slack_message 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cae74cb422fd9b26a624afbb6a7cf2de4a3286612fbf830f4d6988cf447f504b
|
4
|
+
data.tar.gz: a97feba09615c3d6c1cd696ef3b7a99001a7e79428824a880d24a444d2af62d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1439e4313cc2c44c071405ae06ee688b200032bba2cd6d83c4ecd229a3b3cda1553e821bc6aa529014815775336bf474106827d142429e80c5f5a26152e28e9b
|
7
|
+
data.tar.gz: 87ea224361d5353b71ab0afb6727de5e0d40bbb2aff9b2f46d1bc8623943d671f99b6c35619be4415985b2e642d306bfd0587c25afdc4c6ff1496afbc167cf70
|
@@ -1,148 +1,104 @@
|
|
1
1
|
require 'fastlane/action'
|
2
|
-
require '
|
2
|
+
require 'fastlane_core/configuration/config_item'
|
3
3
|
require_relative '../helper/slack_message_helper'
|
4
4
|
|
5
5
|
module Fastlane
|
6
6
|
module Actions
|
7
7
|
class SlackMessageAction < Action
|
8
|
-
class Runner
|
9
|
-
def initialize(slack_url)
|
10
|
-
@webhook_url = slack_url
|
11
|
-
|
12
|
-
@client = Faraday.new do |conn|
|
13
|
-
conn.use(Faraday::Response::RaiseError)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def run(options)
|
18
|
-
|
19
|
-
options[:message] = Fastlane::Actions::SlackAction.trim_message(options[:message].to_s || '')
|
20
|
-
options[:message] = Fastlane::Notification::Slack::LinkConverter.convert(options[:message])
|
21
|
-
|
22
|
-
options[:pretext] = options[:pretext].gsub('\n', "\n") unless options[:pretext].nil?
|
23
|
-
|
24
|
-
channel = nil
|
25
|
-
if options[:channel].to_s.length > 0
|
26
|
-
channel = options[:channel]
|
27
|
-
channel = ('#' + options[:channel]) unless ['#', '@'].include?(channel[0]) # send message to channel by default
|
28
|
-
end
|
29
|
-
|
30
|
-
username = options[:use_webhook_configured_username_and_icon] ? nil : options[:username]
|
31
|
-
|
32
|
-
slack_attachment = Fastlane::Actions::SlackAction.generate_slack_attachments(options)
|
33
|
-
link_names = options[:link_names]
|
34
|
-
icon_url = options[:use_webhook_configured_username_and_icon] ? nil : options[:icon_url]
|
35
|
-
|
36
|
-
post_message(
|
37
|
-
channel: channel,
|
38
|
-
thread_timestamp: options[:thread_timestamp],
|
39
|
-
username: username,
|
40
|
-
attachments: [slack_attachment],
|
41
|
-
link_names: link_names,
|
42
|
-
icon_url: icon_url,
|
43
|
-
fail_on_error: options[:fail_on_error]
|
44
|
-
)
|
45
|
-
end
|
46
|
-
|
47
|
-
def post_message(channel:, thread_timestamp:, username:, attachments:, link_names:, icon_url:, fail_on_error:)
|
48
|
-
@client.post(@webhook_url) do |request|
|
49
|
-
request.headers['Content-Type'] = 'application/json'
|
50
|
-
request.body = {
|
51
|
-
channel: channel,
|
52
|
-
username: username,
|
53
|
-
thread_ts: thread_timestamp,
|
54
|
-
icon_url: icon_url,
|
55
|
-
attachments: attachments,
|
56
|
-
link_names: link_names
|
57
|
-
}.to_json
|
58
|
-
end
|
59
|
-
UI.success('Successfully sent Slack notification')
|
60
|
-
rescue => error
|
61
|
-
UI.error("Exception: #{error}")
|
62
|
-
message = "Error pushing Slack message, maybe the integration has no permission to post on this channel? Try removing the channel parameter in your Fastfile, this is usually caused by a misspelled or changed group/channel name or an expired SLACK_URL"
|
63
|
-
if fail_on_error
|
64
|
-
UI.user_error!(message)
|
65
|
-
else
|
66
|
-
UI.error(message)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
8
|
def self.run(options)
|
72
|
-
|
9
|
+
channel = options[:channel]
|
10
|
+
channel = Helper::SlackMessageHelper.format_channel(channel)
|
11
|
+
|
12
|
+
username = options[:use_webhook_configured_username_and_icon] ? nil : options[:username]
|
13
|
+
|
14
|
+
message = Helper::SlackMessageHelper.prepare_message(options)
|
15
|
+
|
16
|
+
link_names = options[:link_names]
|
17
|
+
icon_url = options[:use_webhook_configured_username_and_icon] ? nil : options[:icon_url]
|
18
|
+
|
19
|
+
Helper::SlackMessageHelper.post_message(
|
20
|
+
slack_url: options[:slack_url],
|
21
|
+
channel: channel,
|
22
|
+
thread_timestamp: options[:thread_timestamp],
|
23
|
+
username: username,
|
24
|
+
attachments: [message],
|
25
|
+
link_names: link_names,
|
26
|
+
icon_url: icon_url,
|
27
|
+
fail_on_error: options[:fail_on_error]
|
28
|
+
)
|
73
29
|
end
|
74
30
|
|
75
31
|
def self.available_options
|
76
32
|
[
|
77
33
|
FastlaneCore::ConfigItem.new(key: :message,
|
78
|
-
env_name:
|
79
|
-
description:
|
34
|
+
env_name: 'FL_SLACK_MESSAGE',
|
35
|
+
description: 'The message that should be displayed on Slack. This supports the standard Slack markup language',
|
80
36
|
optional: true),
|
81
37
|
FastlaneCore::ConfigItem.new(key: :pretext,
|
82
|
-
env_name:
|
83
|
-
description:
|
38
|
+
env_name: 'FL_SLACK_PRETEXT',
|
39
|
+
description: 'This is optional text that appears above the message attachment block. This supports the standard Slack markup language',
|
84
40
|
optional: true),
|
85
41
|
FastlaneCore::ConfigItem.new(key: :channel,
|
86
|
-
env_name:
|
87
|
-
description:
|
42
|
+
env_name: 'FL_SLACK_CHANNEL',
|
43
|
+
description: '#channel or @username',
|
88
44
|
optional: true),
|
89
45
|
FastlaneCore::ConfigItem.new(key: :thread_timestamp,
|
90
|
-
env_name:
|
91
|
-
description:
|
46
|
+
env_name: 'FL_SLACK_THREAD_TIMESTAMP',
|
47
|
+
description: 'Timestamp of the message to reply',
|
92
48
|
optional: true),
|
93
49
|
FastlaneCore::ConfigItem.new(key: :slack_url,
|
94
|
-
env_name:
|
50
|
+
env_name: 'SLACK_URL',
|
95
51
|
sensitive: true,
|
96
|
-
description:
|
52
|
+
description: 'Create an Incoming WebHook for your Slack group',
|
97
53
|
verify_block: proc do |value|
|
98
|
-
UI.user_error!(
|
54
|
+
UI.user_error!('Invalid URL, must start with https://') unless value.start_with?('https://')
|
99
55
|
end),
|
100
56
|
FastlaneCore::ConfigItem.new(key: :username,
|
101
|
-
env_name:
|
102
|
-
description:
|
103
|
-
default_value:
|
57
|
+
env_name: 'FL_SLACK_USERNAME',
|
58
|
+
description: 'Overrides the webhook\'s username property if use_webhook_configured_username_and_icon is false',
|
59
|
+
default_value: 'fastlane',
|
104
60
|
optional: true),
|
105
61
|
FastlaneCore::ConfigItem.new(key: :use_webhook_configured_username_and_icon,
|
106
|
-
env_name:
|
107
|
-
description:
|
62
|
+
env_name: 'FL_SLACK_USE_WEBHOOK_CONFIGURED_USERNAME_AND_ICON',
|
63
|
+
description: 'Use webhook\'s default username and icon settings? (true/false)',
|
108
64
|
default_value: false,
|
109
65
|
type: Boolean,
|
110
66
|
optional: true),
|
111
67
|
FastlaneCore::ConfigItem.new(key: :icon_url,
|
112
|
-
env_name:
|
113
|
-
description:
|
114
|
-
default_value:
|
68
|
+
env_name: 'FL_SLACK_ICON_URL',
|
69
|
+
description: 'Overrides the webhook\'s image property if use_webhook_configured_username_and_icon is false',
|
70
|
+
default_value: 'https://fastlane.tools/assets/img/fastlane_icon.png',
|
115
71
|
optional: true),
|
116
72
|
FastlaneCore::ConfigItem.new(key: :payload,
|
117
|
-
env_name:
|
118
|
-
description:
|
73
|
+
env_name: 'FL_SLACK_PAYLOAD',
|
74
|
+
description: 'Add additional information to this post. payload must be a hash containing any key with any value',
|
119
75
|
default_value: {},
|
120
76
|
type: Hash),
|
121
77
|
FastlaneCore::ConfigItem.new(key: :default_payloads,
|
122
|
-
env_name:
|
123
|
-
description:
|
124
|
-
default_value: [
|
78
|
+
env_name: 'FL_SLACK_DEFAULT_PAYLOADS',
|
79
|
+
description: 'Specifies default payloads to include. Pass an empty array to suppress all the default payloads',
|
80
|
+
default_value: %w[lane test_result git_branch git_author last_git_commit last_git_commit_hash],
|
125
81
|
type: Array),
|
126
82
|
FastlaneCore::ConfigItem.new(key: :attachment_properties,
|
127
|
-
env_name:
|
128
|
-
description:
|
83
|
+
env_name: 'FL_SLACK_ATTACHMENT_PROPERTIES',
|
84
|
+
description: 'Merge additional properties in the slack attachment, see https://api.slack.com/docs/attachments',
|
129
85
|
default_value: {},
|
130
86
|
type: Hash),
|
131
87
|
FastlaneCore::ConfigItem.new(key: :success,
|
132
|
-
env_name:
|
133
|
-
description:
|
88
|
+
env_name: 'FL_SLACK_SUCCESS',
|
89
|
+
description: 'Was this build successful? (true/false)',
|
134
90
|
optional: true,
|
135
91
|
default_value: true,
|
136
92
|
type: Boolean),
|
137
93
|
FastlaneCore::ConfigItem.new(key: :fail_on_error,
|
138
|
-
env_name:
|
139
|
-
description:
|
94
|
+
env_name: 'FL_SLACK_FAIL_ON_ERROR',
|
95
|
+
description: 'Should an error sending the slack notification cause a failure? (true/false)',
|
140
96
|
optional: true,
|
141
97
|
default_value: true,
|
142
98
|
type: Boolean),
|
143
99
|
FastlaneCore::ConfigItem.new(key: :link_names,
|
144
|
-
env_name:
|
145
|
-
description:
|
100
|
+
env_name: 'FL_SLACK_LINK_NAMES',
|
101
|
+
description: 'Find and link channel names and usernames (true/false)',
|
146
102
|
optional: true,
|
147
103
|
default_value: false,
|
148
104
|
type: Boolean)
|
@@ -158,15 +114,15 @@ module Fastlane
|
|
158
114
|
end
|
159
115
|
|
160
116
|
def self.description
|
161
|
-
|
117
|
+
'Send a message to your [Slack](https://slack.com) group'
|
162
118
|
end
|
163
119
|
|
164
120
|
def self.details
|
165
|
-
|
121
|
+
'This plugin is forked from the Fastlane Slack action. Additionally, it takes thread_timestamp parameter to send the message under a thread.'
|
166
122
|
end
|
167
123
|
|
168
124
|
def self.authors
|
169
|
-
[
|
125
|
+
['Doruk Kangal']
|
170
126
|
end
|
171
127
|
|
172
128
|
def self.example_code
|
@@ -1,15 +1,68 @@
|
|
1
1
|
require 'fastlane_core/ui/ui'
|
2
|
+
require 'fastlane/action'
|
3
|
+
require 'fastlane/actions/slack'
|
4
|
+
require 'faraday'
|
2
5
|
|
3
6
|
module Fastlane
|
4
|
-
UI = FastlaneCore::UI unless Fastlane.const_defined?(
|
7
|
+
UI = FastlaneCore::UI unless Fastlane.const_defined?(:UI)
|
5
8
|
|
6
9
|
module Helper
|
7
10
|
class SlackMessageHelper
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
@client = Faraday.new do |builder|
|
12
|
+
builder.use(Faraday::Response::RaiseError)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.post_message(slack_url:, channel:, thread_timestamp:, username:, attachments:, link_names:, icon_url:, fail_on_error:)
|
16
|
+
@client.post(slack_url) do |request|
|
17
|
+
request.headers['Content-Type'] = 'application/json'
|
18
|
+
request.body = {
|
19
|
+
channel: channel,
|
20
|
+
username: username,
|
21
|
+
thread_ts: thread_timestamp,
|
22
|
+
icon_url: icon_url,
|
23
|
+
attachments: attachments,
|
24
|
+
link_names: link_names
|
25
|
+
}.to_json
|
26
|
+
end
|
27
|
+
UI.success('Successfully sent Slack notification')
|
28
|
+
rescue StandardError => e
|
29
|
+
UI.error("Error while pushing Slack message: #{e}")
|
30
|
+
message = "Maybe the integration has no permission to post on this channel? Try removing the channel parameter in your Fastfile, this is usually caused by a misspelled or changed group/channel name or an expired SLACK_URL"
|
31
|
+
if fail_on_error
|
32
|
+
UI.user_error!(message)
|
33
|
+
else
|
34
|
+
UI.error(message)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.prepare_message(options)
|
39
|
+
options[:message] = trim(options[:message])
|
40
|
+
options[:message] = convert_links(options[:message])
|
41
|
+
options[:pretext] = newline_interpretation(options[:pretext])
|
42
|
+
|
43
|
+
Fastlane::Actions::SlackAction.generate_slack_attachments(options)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.trim(text)
|
47
|
+
Fastlane::Actions::SlackAction.trim_message(text || '')
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.convert_links(text)
|
51
|
+
Fastlane::Notification::Slack::LinkConverter.convert(text)
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.newline_interpretation(text)
|
55
|
+
(text || '').gsub('\n', "\n")
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.format_channel(channel_name)
|
59
|
+
if channel_name.nil? || channel_name.empty?
|
60
|
+
nil
|
61
|
+
elsif %w[# @].include?(channel_name[0])
|
62
|
+
channel_name
|
63
|
+
else
|
64
|
+
'#' + channel_name
|
65
|
+
end
|
13
66
|
end
|
14
67
|
end
|
15
68
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-slack_message
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Doruk Kangal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|