fastlane 2.180.1 → 2.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +90 -90
  3. data/fastlane/lib/fastlane/actions/clipboard.rb +3 -6
  4. data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +2 -6
  5. data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
  6. data/fastlane/lib/fastlane/actions/slack.rb +148 -127
  7. data/fastlane/lib/fastlane/helper/git_helper.rb +9 -1
  8. data/fastlane/lib/fastlane/lane_manager.rb +3 -2
  9. data/fastlane/lib/fastlane/version.rb +1 -1
  10. data/fastlane/swift/Deliverfile.swift +1 -1
  11. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  12. data/fastlane/swift/Fastlane.swift +5 -5
  13. data/fastlane/swift/Gymfile.swift +1 -1
  14. data/fastlane/swift/GymfileProtocol.swift +1 -1
  15. data/fastlane/swift/Matchfile.swift +1 -1
  16. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  17. data/fastlane/swift/Precheckfile.swift +1 -1
  18. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  19. data/fastlane/swift/Scanfile.swift +1 -1
  20. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  21. data/fastlane/swift/Screengrabfile.swift +1 -1
  22. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  23. data/fastlane/swift/Snapshotfile.swift +1 -1
  24. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  25. data/fastlane/swift/formatting/Brewfile.lock.json +10 -8
  26. data/fastlane_core/lib/fastlane_core.rb +22 -21
  27. data/fastlane_core/lib/fastlane_core/build_watcher.rb +50 -9
  28. data/fastlane_core/lib/fastlane_core/clipboard.rb +20 -0
  29. data/gym/lib/gym/runner.rb +5 -1
  30. data/scan/lib/scan/runner.rb +2 -0
  31. data/scan/lib/scan/test_command_generator.rb +3 -1
  32. data/snapshot/lib/snapshot/reports_generator.rb +4 -0
  33. data/spaceship/README.md +2 -12
  34. data/spaceship/lib/spaceship/commands_generator.rb +2 -1
  35. data/spaceship/lib/spaceship/spaceauth_runner.rb +19 -9
  36. data/spaceship/lib/spaceship/tunes/members.rb +1 -1
  37. data/supply/lib/supply/client.rb +3 -1
  38. data/supply/lib/supply/options.rb +2 -2
  39. data/supply/lib/supply/uploader.rb +1 -0
  40. metadata +21 -22
  41. data/fastlane/lib/fastlane/.fastlane_require.rb.swp +0 -0
  42. data/fastlane/lib/fastlane/actions/.cocoapods.rb.swp +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 163349126d102ca91b188c06ebf4f0cdca8e412a5e90323f30b1e173906a15d2
4
- data.tar.gz: 9df2a6ee820366f89c531fa8ffc8a9aaddba6aae5f5c7374b719d5209db4c45a
3
+ metadata.gz: 38bb5919faa63d99767d24690442b21a5d481b03afe68a1832e4d3d1a4e28e29
4
+ data.tar.gz: 5553432685d7e0474eec0b6a76e932834ae0afd741f0ac02af7e1ec2b755af80
5
5
  SHA512:
6
- metadata.gz: 9f29ea5cbe8e9df6d6eb0f6cd2e59fb2053ae7298bffa924b8db9fbf1fbd3618ba776431b17a1727858f5c3e8b6700e7eea0e1cc315b825933d7c64379503d99
7
- data.tar.gz: 3acea8ce3adf71c5d22a9a52e5e26d2a7c3a76d5901da8306104ae26396eccd70c4f9da4573082eaf7cc1c1236ef6e52c5c0ef26f25d860888664f76ebc56599
6
+ metadata.gz: 6c6db2341264725bb9af7c225cacd888a044949311402de5d9cd0c917a73ffcccf4627adee7d160a1fe46e1e150d855dbd41951b0d50a06dd97fc27f8b78888f
7
+ data.tar.gz: 384e80ffe1b82abd1b84b2f09e7367da9e8cfbf5ce2427ccb61b62b738a1b91ff5091da839afc23d7ddec123d16d0e3ff8f3186eef3fc41b9e547a7a685b63e4
data/README.md CHANGED
@@ -35,49 +35,55 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
35
35
  <!-- This table is regenerated and resorted on each release -->
36
36
  <table id='team'>
37
37
  <tr>
38
- <td id='jérôme-lacoste'>
39
- <a href='https://github.com/lacostej'>
40
- <img src='https://github.com/lacostej.png?size=140'>
38
+ <td id='matthew-ellis'>
39
+ <a href='https://github.com/matthewellis'>
40
+ <img src='https://github.com/matthewellis.png?size=140'>
41
41
  </a>
42
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
42
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
43
43
  </td>
44
- <td id='max-ott'>
45
- <a href='https://github.com/max-ott'>
46
- <img src='https://github.com/max-ott.png?size=140'>
44
+ <td id='danielle-tomlinson'>
45
+ <a href='https://github.com/endocrimes'>
46
+ <img src='https://github.com/endocrimes.png?size=140'>
47
47
  </a>
48
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
48
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
49
49
  </td>
50
- <td id='kohki-miki'>
51
- <a href='https://github.com/giginet'>
52
- <img src='https://github.com/giginet.png?size=140'>
50
+ <td id='satoshi-namai'>
51
+ <a href='https://github.com/ainame'>
52
+ <img src='https://github.com/ainame.png?size=140'>
53
53
  </a>
54
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
55
55
  </td>
56
- <td id='josh-holtz'>
57
- <a href='https://github.com/joshdholtz'>
58
- <img src='https://github.com/joshdholtz.png?size=140'>
56
+ <td id='olivier-halligon'>
57
+ <a href='https://github.com/AliSoftware'>
58
+ <img src='https://github.com/AliSoftware.png?size=140'>
59
59
  </a>
60
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
61
+ </td>
62
+ <td id='max-ott'>
63
+ <a href='https://github.com/max-ott'>
64
+ <img src='https://github.com/max-ott.png?size=140'>
65
+ </a>
66
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
61
67
  </td>
68
+ </tr>
69
+ <tr>
62
70
  <td id='maksym-grebenets'>
63
71
  <a href='https://github.com/mgrebenets'>
64
72
  <img src='https://github.com/mgrebenets.png?size=140'>
65
73
  </a>
66
74
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
67
75
  </td>
68
- </tr>
69
- <tr>
70
- <td id='fumiya-nakamura'>
71
- <a href='https://github.com/nafu'>
72
- <img src='https://github.com/nafu.png?size=140'>
76
+ <td id='felix-krause'>
77
+ <a href='https://github.com/KrauseFx'>
78
+ <img src='https://github.com/KrauseFx.png?size=140'>
73
79
  </a>
74
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
75
81
  </td>
76
- <td id='joshua-liebowitz'>
77
- <a href='https://github.com/taquitos'>
78
- <img src='https://github.com/taquitos.png?size=140'>
82
+ <td id='iulian-onofrei'>
83
+ <a href='https://github.com/revolter'>
84
+ <img src='https://github.com/revolter.png?size=140'>
79
85
  </a>
80
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
81
87
  </td>
82
88
  <td id='luka-mirosevic'>
83
89
  <a href='https://github.com/lmirosevic'>
@@ -85,37 +91,19 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
85
91
  </a>
86
92
  <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
87
93
  </td>
88
- <td id='aaron-brager'>
89
- <a href='https://github.com/getaaron'>
90
- <img src='https://github.com/getaaron.png?size=140'>
91
- </a>
92
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
93
- </td>
94
- <td id='satoshi-namai'>
95
- <a href='https://github.com/ainame'>
96
- <img src='https://github.com/ainame.png?size=140'>
94
+ <td id='fumiya-nakamura'>
95
+ <a href='https://github.com/nafu'>
96
+ <img src='https://github.com/nafu.png?size=140'>
97
97
  </a>
98
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
98
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
99
99
  </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='daniel-jankowski'>
103
- <a href='https://github.com/mollyIV'>
104
- <img src='https://github.com/mollyIV.png?size=140'>
105
- </a>
106
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
107
- </td>
108
- <td id='olivier-halligon'>
109
- <a href='https://github.com/AliSoftware'>
110
- <img src='https://github.com/AliSoftware.png?size=140'>
111
- </a>
112
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
113
- </td>
114
- <td id='roger-oba'>
115
- <a href='https://github.com/rogerluan'>
116
- <img src='https://github.com/rogerluan.png?size=140'>
102
+ <td id='jorge-revuelta-h'>
103
+ <a href='https://github.com/minuscorp'>
104
+ <img src='https://github.com/minuscorp.png?size=140'>
117
105
  </a>
118
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
119
107
  </td>
120
108
  <td id='manu-wallner'>
121
109
  <a href='https://github.com/milch'>
@@ -123,37 +111,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
123
111
  </a>
124
112
  <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
125
113
  </td>
126
- <td id='jorge-revuelta-h'>
127
- <a href='https://github.com/minuscorp'>
128
- <img src='https://github.com/minuscorp.png?size=140'>
114
+ <td id='daniel-jankowski'>
115
+ <a href='https://github.com/mollyIV'>
116
+ <img src='https://github.com/mollyIV.png?size=140'>
129
117
  </a>
130
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
131
119
  </td>
132
- </tr>
133
- <tr>
134
- <td id='helmut-januschka'>
135
- <a href='https://github.com/hjanuschka'>
136
- <img src='https://github.com/hjanuschka.png?size=140'>
120
+ <td id='jérôme-lacoste'>
121
+ <a href='https://github.com/lacostej'>
122
+ <img src='https://github.com/lacostej.png?size=140'>
137
123
  </a>
138
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
139
125
  </td>
140
- <td id='jimmy-dee'>
141
- <a href='https://github.com/jdee'>
142
- <img src='https://github.com/jdee.png?size=140'>
126
+ <td id='aaron-brager'>
127
+ <a href='https://github.com/getaaron'>
128
+ <img src='https://github.com/getaaron.png?size=140'>
143
129
  </a>
144
- <h4 align='center'>Jimmy Dee</h4>
130
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
145
131
  </td>
146
- <td id='iulian-onofrei'>
147
- <a href='https://github.com/revolter'>
148
- <img src='https://github.com/revolter.png?size=140'>
132
+ </tr>
133
+ <tr>
134
+ <td id='jan-piotrowski'>
135
+ <a href='https://github.com/janpio'>
136
+ <img src='https://github.com/janpio.png?size=140'>
149
137
  </a>
150
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
138
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
151
139
  </td>
152
- <td id='felix-krause'>
153
- <a href='https://github.com/KrauseFx'>
154
- <img src='https://github.com/KrauseFx.png?size=140'>
140
+ <td id='andrew-mcburney'>
141
+ <a href='https://github.com/armcburney'>
142
+ <img src='https://github.com/armcburney.png?size=140'>
155
143
  </a>
156
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
144
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
145
+ </td>
146
+ <td id='joshua-liebowitz'>
147
+ <a href='https://github.com/taquitos'>
148
+ <img src='https://github.com/taquitos.png?size=140'>
149
+ </a>
150
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
157
151
  </td>
158
152
  <td id='stefan-natchev'>
159
153
  <a href='https://github.com/snatchev'>
@@ -161,31 +155,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
161
155
  </a>
162
156
  <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
163
157
  </td>
158
+ <td id='josh-holtz'>
159
+ <a href='https://github.com/joshdholtz'>
160
+ <img src='https://github.com/joshdholtz.png?size=140'>
161
+ </a>
162
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
163
+ </td>
164
164
  </tr>
165
165
  <tr>
166
- <td id='danielle-tomlinson'>
167
- <a href='https://github.com/endocrimes'>
168
- <img src='https://github.com/endocrimes.png?size=140'>
166
+ <td id='jimmy-dee'>
167
+ <a href='https://github.com/jdee'>
168
+ <img src='https://github.com/jdee.png?size=140'>
169
169
  </a>
170
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
170
+ <h4 align='center'>Jimmy Dee</h4>
171
171
  </td>
172
- <td id='jan-piotrowski'>
173
- <a href='https://github.com/janpio'>
174
- <img src='https://github.com/janpio.png?size=140'>
172
+ <td id='kohki-miki'>
173
+ <a href='https://github.com/giginet'>
174
+ <img src='https://github.com/giginet.png?size=140'>
175
175
  </a>
176
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
177
177
  </td>
178
- <td id='matthew-ellis'>
179
- <a href='https://github.com/matthewellis'>
180
- <img src='https://github.com/matthewellis.png?size=140'>
178
+ <td id='roger-oba'>
179
+ <a href='https://github.com/rogerluan'>
180
+ <img src='https://github.com/rogerluan.png?size=140'>
181
181
  </a>
182
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
183
183
  </td>
184
- <td id='andrew-mcburney'>
185
- <a href='https://github.com/armcburney'>
186
- <img src='https://github.com/armcburney.png?size=140'>
184
+ <td id='helmut-januschka'>
185
+ <a href='https://github.com/hjanuschka'>
186
+ <img src='https://github.com/hjanuschka.png?size=140'>
187
187
  </a>
188
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
189
189
  </td>
190
190
  </table>
191
191
 
@@ -7,10 +7,7 @@ module Fastlane
7
7
  truncated_value = value[0..800].gsub(/\s\w+\s*$/, '...')
8
8
  UI.message("Storing '#{truncated_value}' in the clipboard 🎨")
9
9
 
10
- if FastlaneCore::Helper.mac?
11
- require 'open3'
12
- Open3.popen3('pbcopy') { |input, _, _| input << value }
13
- end
10
+ FastlaneCore::Clipboard.copy(content: value)
14
11
  end
15
12
 
16
13
  #####################################################
@@ -30,11 +27,11 @@ module Fastlane
30
27
  end
31
28
 
32
29
  def self.authors
33
- ["KrauseFx", "joshdholtz"]
30
+ ["KrauseFx", "joshdholtz", "rogerluan"]
34
31
  end
35
32
 
36
33
  def self.is_supported?(platform)
37
- true
34
+ FastlaneCore::Clipboard.is_supported?
38
35
  end
39
36
 
40
37
  def self.example_code
@@ -3,15 +3,11 @@ module Fastlane
3
3
  class EnsureEnvVarsAction < Action
4
4
  def self.run(params)
5
5
  variables = params[:env_vars]
6
+ missing_variables = variables.select { |variable| ENV[variable].to_s.strip.empty? }
6
7
 
7
- variables.each do |variable|
8
- next unless ENV[variable].to_s.strip.empty?
9
-
10
- UI.user_error!("Missing environment variable '#{variable}'")
11
- end
8
+ UI.user_error!("Missing environment variable(s) '#{missing_variables.join('\', \'')}'") unless missing_variables.empty?
12
9
 
13
10
  is_one = variables.length == 1
14
-
15
11
  UI.success("Environment variable#{is_one ? '' : 's'} '#{variables.join('\', \'')}' #{is_one ? 'is' : 'are'} set!")
16
12
  end
17
13
 
@@ -2,7 +2,7 @@ module Fastlane
2
2
  module Actions
3
3
  class GitBranchAction < Action
4
4
  def self.run(params)
5
- branch = Actions.git_branch
5
+ branch = Actions.git_branch || ""
6
6
  return "" if branch == "HEAD" # Backwards compatibility with the original (and documented) implementation
7
7
  branch
8
8
  end
@@ -4,49 +4,40 @@
4
4
  module Fastlane
5
5
  module Actions
6
6
  class SlackAction < Action
7
- def self.is_supported?(platform)
8
- true
9
- end
10
-
11
- # As there is a text limit in the notifications, we are
12
- # usually interested in the last part of the message
13
- # e.g. for tests
14
- def self.trim_message(message)
15
- # We want the last 7000 characters, instead of the first 7000, as the error is at the bottom
16
- start_index = [message.length - 7000, 0].max
17
- message = message[start_index..-1]
18
- # We want line breaks to be shown on slack output so we replace
19
- # input non-interpreted line break with interpreted line break
20
- message.gsub('\n', "\n")
21
- end
22
-
23
- def self.run(options)
24
- require 'slack-notifier'
25
-
26
- options[:message] = self.trim_message(options[:message].to_s || '')
27
- options[:message] = Slack::Notifier::Util::LinkFormatter.format(options[:message])
28
-
29
- options[:pretext] = options[:pretext].gsub('\n', "\n") unless options[:pretext].nil?
30
-
31
- if options[:channel].to_s.length > 0
32
- channel = options[:channel]
33
- channel = ('#' + options[:channel]) unless ['#', '@'].include?(channel[0]) # send message to channel by default
7
+ class Runner
8
+ def initialize(slack_url)
9
+ @notifier = Slack::Notifier.new(slack_url)
34
10
  end
35
11
 
36
- username = options[:use_webhook_configured_username_and_icon] ? nil : options[:username]
12
+ def run(options)
13
+ options[:message] = self.class.trim_message(options[:message].to_s || '')
14
+ options[:message] = Slack::Notifier::Util::LinkFormatter.format(options[:message])
37
15
 
38
- notifier = Slack::Notifier.new(options[:slack_url], channel: channel, username: username)
16
+ options[:pretext] = options[:pretext].gsub('\n', "\n") unless options[:pretext].nil?
39
17
 
40
- link_names = options[:link_names]
18
+ if options[:channel].to_s.length > 0
19
+ channel = options[:channel]
20
+ channel = ('#' + options[:channel]) unless ['#', '@'].include?(channel[0]) # send message to channel by default
21
+ end
41
22
 
42
- icon_url = options[:use_webhook_configured_username_and_icon] ? nil : options[:icon_url]
23
+ username = options[:use_webhook_configured_username_and_icon] ? nil : options[:username]
43
24
 
44
- slack_attachment = generate_slack_attachments(options)
25
+ slack_attachment = self.class.generate_slack_attachments(options)
26
+ link_names = options[:link_names]
27
+ icon_url = options[:use_webhook_configured_username_and_icon] ? nil : options[:icon_url]
45
28
 
46
- return [notifier, slack_attachment] if Helper.test? # tests will verify the slack attachments and other properties
29
+ post_message(
30
+ channel: channel,
31
+ username: username,
32
+ attachments: [slack_attachment],
33
+ link_names: link_names,
34
+ icon_url: icon_url,
35
+ fail_on_error: options[:fail_on_error]
36
+ )
37
+ end
47
38
 
48
- begin
49
- results = notifier.ping('', link_names: link_names, icon_url: icon_url, attachments: [slack_attachment])
39
+ def post_message(channel:, username:, attachments:, link_names:, icon_url:, fail_on_error:)
40
+ results = @notifier.ping('', channel: channel, username: username, link_names: link_names, icon_url: icon_url, attachments: attachments)
50
41
  rescue => exception
51
42
  UI.error("Exception: #{exception}")
52
43
  ensure
@@ -56,13 +47,129 @@ module Fastlane
56
47
  else
57
48
  UI.verbose(result) unless result.nil?
58
49
  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"
59
- if options[:fail_on_error]
50
+ if fail_on_error
60
51
  UI.user_error!(message)
61
52
  else
62
53
  UI.error(message)
63
54
  end
64
55
  end
65
56
  end
57
+
58
+ # As there is a text limit in the notifications, we are
59
+ # usually interested in the last part of the message
60
+ # e.g. for tests
61
+ def self.trim_message(message)
62
+ # We want the last 7000 characters, instead of the first 7000, as the error is at the bottom
63
+ start_index = [message.length - 7000, 0].max
64
+ message = message[start_index..-1]
65
+ # We want line breaks to be shown on slack output so we replace
66
+ # input non-interpreted line break with interpreted line break
67
+ message.gsub('\n', "\n")
68
+ end
69
+
70
+ def self.generate_slack_attachments(options)
71
+ color = (options[:success] ? 'good' : 'danger')
72
+ should_add_payload = ->(payload_name) { options[:default_payloads].map(&:to_sym).include?(payload_name.to_sym) }
73
+
74
+ slack_attachment = {
75
+ fallback: options[:message],
76
+ text: options[:message],
77
+ pretext: options[:pretext],
78
+ color: color,
79
+ mrkdwn_in: ["pretext", "text", "fields", "message"],
80
+ fields: []
81
+ }
82
+
83
+ # custom user payloads
84
+ slack_attachment[:fields] += options[:payload].map do |k, v|
85
+ {
86
+ title: k.to_s,
87
+ value: Slack::Notifier::Util::LinkFormatter.format(v.to_s),
88
+ short: false
89
+ }
90
+ end
91
+
92
+ # Add the lane to the Slack message
93
+ # This might be nil, if slack is called as "one-off" action
94
+ if should_add_payload[:lane] && Actions.lane_context[Actions::SharedValues::LANE_NAME]
95
+ slack_attachment[:fields] << {
96
+ title: 'Lane',
97
+ value: Actions.lane_context[Actions::SharedValues::LANE_NAME],
98
+ short: true
99
+ }
100
+ end
101
+
102
+ # test_result
103
+ if should_add_payload[:test_result]
104
+ slack_attachment[:fields] << {
105
+ title: 'Result',
106
+ value: (options[:success] ? 'Success' : 'Error'),
107
+ short: true
108
+ }
109
+ end
110
+
111
+ # git branch
112
+ if Actions.git_branch && should_add_payload[:git_branch]
113
+ slack_attachment[:fields] << {
114
+ title: 'Git Branch',
115
+ value: Actions.git_branch,
116
+ short: true
117
+ }
118
+ end
119
+
120
+ # git_author
121
+ if Actions.git_author_email && should_add_payload[:git_author]
122
+ if FastlaneCore::Env.truthy?('FASTLANE_SLACK_HIDE_AUTHOR_ON_SUCCESS') && options[:success]
123
+ # We only show the git author if the build failed
124
+ else
125
+ slack_attachment[:fields] << {
126
+ title: 'Git Author',
127
+ value: Actions.git_author_email,
128
+ short: true
129
+ }
130
+ end
131
+ end
132
+
133
+ # last_git_commit
134
+ if Actions.last_git_commit_message && should_add_payload[:last_git_commit]
135
+ slack_attachment[:fields] << {
136
+ title: 'Git Commit',
137
+ value: Actions.last_git_commit_message,
138
+ short: false
139
+ }
140
+ end
141
+
142
+ # last_git_commit_hash
143
+ if Actions.last_git_commit_hash(true) && should_add_payload[:last_git_commit_hash]
144
+ slack_attachment[:fields] << {
145
+ title: 'Git Commit Hash',
146
+ value: Actions.last_git_commit_hash(short: true),
147
+ short: false
148
+ }
149
+ end
150
+
151
+ # merge additional properties
152
+ deep_merge(slack_attachment, options[:attachment_properties])
153
+ end
154
+
155
+ # Adapted from https://stackoverflow.com/a/30225093/158525
156
+ def self.deep_merge(a, b)
157
+ merger = proc do |key, v1, v2|
158
+ Hash === v1 && Hash === v2 ?
159
+ v1.merge(v2, &merger) : Array === v1 && Array === v2 ?
160
+ v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2
161
+ end
162
+ a.merge(b, &merger)
163
+ end
164
+ end
165
+
166
+ def self.is_supported?(platform)
167
+ true
168
+ end
169
+
170
+ def self.run(options)
171
+ require 'slack-notifier'
172
+ Runner.new(options[:slack_url]).run(options)
66
173
  end
67
174
 
68
175
  def self.description
@@ -185,99 +292,13 @@ module Fastlane
185
292
  # @!group Helper
186
293
  #####################################################
187
294
 
188
- def self.generate_slack_attachments(options)
189
- color = (options[:success] ? 'good' : 'danger')
190
- should_add_payload = ->(payload_name) { options[:default_payloads].map(&:to_sym).include?(payload_name.to_sym) }
191
-
192
- slack_attachment = {
193
- fallback: options[:message],
194
- text: options[:message],
195
- pretext: options[:pretext],
196
- color: color,
197
- mrkdwn_in: ["pretext", "text", "fields", "message"],
198
- fields: []
199
- }
200
-
201
- # custom user payloads
202
- slack_attachment[:fields] += options[:payload].map do |k, v|
203
- {
204
- title: k.to_s,
205
- value: Slack::Notifier::Util::LinkFormatter.format(v.to_s),
206
- short: false
207
- }
208
- end
209
-
210
- # Add the lane to the Slack message
211
- # This might be nil, if slack is called as "one-off" action
212
- if should_add_payload[:lane] && Actions.lane_context[Actions::SharedValues::LANE_NAME]
213
- slack_attachment[:fields] << {
214
- title: 'Lane',
215
- value: Actions.lane_context[Actions::SharedValues::LANE_NAME],
216
- short: true
217
- }
218
- end
219
-
220
- # test_result
221
- if should_add_payload[:test_result]
222
- slack_attachment[:fields] << {
223
- title: 'Result',
224
- value: (options[:success] ? 'Success' : 'Error'),
225
- short: true
226
- }
227
- end
228
-
229
- # git branch
230
- if Actions.git_branch && should_add_payload[:git_branch]
231
- slack_attachment[:fields] << {
232
- title: 'Git Branch',
233
- value: Actions.git_branch,
234
- short: true
235
- }
236
- end
237
-
238
- # git_author
239
- if Actions.git_author_email && should_add_payload[:git_author]
240
- if FastlaneCore::Env.truthy?('FASTLANE_SLACK_HIDE_AUTHOR_ON_SUCCESS') && options[:success]
241
- # We only show the git author if the build failed
242
- else
243
- slack_attachment[:fields] << {
244
- title: 'Git Author',
245
- value: Actions.git_author_email,
246
- short: true
247
- }
248
- end
249
- end
250
-
251
- # last_git_commit
252
- if Actions.last_git_commit_message && should_add_payload[:last_git_commit]
253
- slack_attachment[:fields] << {
254
- title: 'Git Commit',
255
- value: Actions.last_git_commit_message,
256
- short: false
257
- }
258
- end
259
-
260
- # last_git_commit_hash
261
- if Actions.last_git_commit_hash(true) && should_add_payload[:last_git_commit_hash]
262
- slack_attachment[:fields] << {
263
- title: 'Git Commit Hash',
264
- value: Actions.last_git_commit_hash(short: true),
265
- short: false
266
- }
267
- end
268
-
269
- # merge additional properties
270
- deep_merge(slack_attachment, options[:attachment_properties])
295
+ def self.trim_message(message)
296
+ Runner.trim_message(message)
271
297
  end
272
298
 
273
- # Adapted from https://stackoverflow.com/a/30225093/158525
274
- def self.deep_merge(a, b)
275
- merger = proc do |key, v1, v2|
276
- Hash === v1 && Hash === v2 ?
277
- v1.merge(v2, &merger) : Array === v1 && Array === v2 ?
278
- v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2
279
- end
280
- a.merge(b, &merger)
299
+ def self.generate_slack_attachments(options)
300
+ UI.deprecated('`Fastlane::Actions::Slack.generate_slack_attachments` is subject to be removed as Slack recommends migrating `attachments` to Block Kit. fastlane will also follow the same direction.')
301
+ Runner.generate_slack_attachments(options)
281
302
  end
282
303
  end
283
304
  end