fastlane 2.221.1 → 2.223.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +98 -98
  3. data/deliver/lib/deliver/options.rb +1 -1
  4. data/deliver/lib/deliver/runner.rb +11 -2
  5. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  6. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +7 -3
  7. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -0
  8. data/fastlane/lib/fastlane/actions/download_dsyms.rb +2 -2
  9. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +16 -1
  10. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/set_changelog.rb +3 -3
  12. data/fastlane/lib/fastlane/actions/slack.rb +9 -2
  13. data/fastlane/lib/fastlane/actions/testfairy.rb +9 -1
  14. data/fastlane/lib/fastlane/fast_file.rb +8 -2
  15. data/fastlane/lib/fastlane/helper/git_helper.rb +4 -2
  16. data/fastlane/lib/fastlane/notification/slack.rb +3 -2
  17. data/fastlane/lib/fastlane/version.rb +1 -1
  18. data/fastlane/swift/Deliverfile.swift +1 -1
  19. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  20. data/fastlane/swift/Fastlane.swift +81 -21
  21. data/fastlane/swift/Gymfile.swift +1 -1
  22. data/fastlane/swift/GymfileProtocol.swift +5 -1
  23. data/fastlane/swift/Matchfile.swift +1 -1
  24. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  25. data/fastlane/swift/Precheckfile.swift +1 -1
  26. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  27. data/fastlane/swift/Scanfile.swift +1 -1
  28. data/fastlane/swift/ScanfileProtocol.swift +5 -1
  29. data/fastlane/swift/Screengrabfile.swift +1 -1
  30. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  31. data/fastlane/swift/Snapshotfile.swift +1 -1
  32. data/fastlane/swift/SnapshotfileProtocol.swift +5 -1
  33. data/fastlane/swift/formatting/Brewfile.lock.json +24 -19
  34. data/fastlane/swift/formatting/Rakefile +1 -0
  35. data/fastlane_core/lib/fastlane_core/project.rb +1 -0
  36. data/gym/lib/gym/generators/build_command_generator.rb +1 -1
  37. data/gym/lib/gym/options.rb +10 -1
  38. data/match/lib/match/change_password.rb +2 -1
  39. data/match/lib/match/encryption/encryption.rb +2 -2
  40. data/match/lib/match/encryption/openssl.rb +10 -5
  41. data/match/lib/match/importer.rb +2 -1
  42. data/match/lib/match/nuke.rb +2 -1
  43. data/match/lib/match/options.rb +5 -0
  44. data/match/lib/match/runner.rb +2 -1
  45. data/pilot/lib/pilot/build_manager.rb +9 -0
  46. data/scan/lib/scan/module.rb +1 -1
  47. data/scan/lib/scan/options.rb +10 -1
  48. data/snapshot/lib/snapshot/options.rb +9 -0
  49. data/spaceship/lib/spaceship/connect_api/models/app.rb +10 -0
  50. data/spaceship/lib/spaceship/connect_api/models/app_availability.rb +23 -0
  51. data/spaceship/lib/spaceship/connect_api/models/territory_availability.rb +62 -0
  52. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +9 -0
  53. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  54. data/spaceship/lib/spaceship/tunes/application.rb +1 -1
  55. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -0
  56. data/trainer/lib/trainer/test_parser.rb +27 -2
  57. metadata +22 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6f07b93540a18ca9244d03f38d6b42715da53a5f3a1d2e01ae0ca07f55b8bbfc
4
- data.tar.gz: 02a85c5ddcb83eb661020c053b2c33411d0f2b4e69bf309a2f5dff62c7376b11
3
+ metadata.gz: 32c31c8cdb5d22c28c22c8c5e87a18bb2b68312b36ea0b313e5da9cfb5ae599d
4
+ data.tar.gz: 6248f389a595ffe2b5769b9f948e24f4e350ec086e989205708c0cfa4155301f
5
5
  SHA512:
6
- metadata.gz: f36be8c3a80185881f79dd332a09e51e3d6a5b512e5571a2dc8c5eb70f38bc0c74cfa862329befbc43f8f4c0fd771ed40a579b23371d12463a1a27921b1e1e85
7
- data.tar.gz: aabf80f68459a5dbffd434963f317755828a18d81ed00e4d5a2a9f0fc6123eeb48d1066b2b4517a6c69ba10252e4a03ea55acf28442d886b23fb243f9a20263c
6
+ metadata.gz: db33d67f27de67d2d5a33a0de04eec412405e6d01f4f879bda83475ff75fd546a61ebe0240011ba9ff9ec992a45347bf5fd6e859da1123529d9cead052ef77eb
7
+ data.tar.gz: 2caa48a245eeaf5a7a85c2c35c7cb32b8c1871b37a106fb124c995e3951bd7b781d51c3bf269d85ca4e34e4cc85be5fae538e896a24c5d20a6d4ae63ce6ae237
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='matthew-ellis'>
39
- <a href='https://github.com/matthewellis'>
40
- <img src='https://github.com/matthewellis.png' width='140px;'>
38
+ <td id='iulian-onofrei'>
39
+ <a href='https://github.com/revolter'>
40
+ <img src='https://github.com/revolter.png' width='140px;'>
41
41
  </a>
42
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
42
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
43
43
  </td>
44
- <td id='roger-oba'>
45
- <a href='https://github.com/rogerluan'>
46
- <img src='https://github.com/rogerluan.png' width='140px;'>
44
+ <td id='josh-holtz'>
45
+ <a href='https://github.com/joshdholtz'>
46
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
47
47
  </a>
48
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
48
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
49
49
  </td>
50
- <td id='luka-mirosevic'>
51
- <a href='https://github.com/lmirosevic'>
52
- <img src='https://github.com/lmirosevic.png' width='140px;'>
50
+ <td id='kohki-miki'>
51
+ <a href='https://github.com/giginet'>
52
+ <img src='https://github.com/giginet.png' width='140px;'>
53
53
  </a>
54
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
55
55
  </td>
56
- <td id='daniel-jankowski'>
57
- <a href='https://github.com/mollyIV'>
58
- <img src='https://github.com/mollyIV.png' width='140px;'>
56
+ <td id='łukasz-grabowski'>
57
+ <a href='https://github.com/lucgrabowski'>
58
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
59
59
  </a>
60
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
60
+ <h4 align='center'>Łukasz Grabowski</h4>
61
+ </td>
62
+ <td id='manu-wallner'>
63
+ <a href='https://github.com/milch'>
64
+ <img src='https://github.com/milch.png' width='140px;'>
65
+ </a>
66
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
61
67
  </td>
68
+ </tr>
69
+ <tr>
62
70
  <td id='fumiya-nakamura'>
63
71
  <a href='https://github.com/nafu'>
64
72
  <img src='https://github.com/nafu.png' width='140px;'>
65
73
  </a>
66
74
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
67
75
  </td>
68
- </tr>
69
- <tr>
70
- <td id='olivier-halligon'>
71
- <a href='https://github.com/AliSoftware'>
72
- <img src='https://github.com/AliSoftware.png' width='140px;'>
76
+ <td id='stefan-natchev'>
77
+ <a href='https://github.com/snatchev'>
78
+ <img src='https://github.com/snatchev.png' width='140px;'>
73
79
  </a>
74
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
75
81
  </td>
76
- <td id='danielle-tomlinson'>
77
- <a href='https://github.com/endocrimes'>
78
- <img src='https://github.com/endocrimes.png' width='140px;'>
82
+ <td id='jan-piotrowski'>
83
+ <a href='https://github.com/janpio'>
84
+ <img src='https://github.com/janpio.png' width='140px;'>
79
85
  </a>
80
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
81
87
  </td>
82
88
  <td id='felix-krause'>
83
89
  <a href='https://github.com/KrauseFx'>
@@ -85,69 +91,51 @@ 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/KrauseFx'>Felix Krause</a></h4>
87
93
  </td>
88
- <td id='kohki-miki'>
89
- <a href='https://github.com/giginet'>
90
- <img src='https://github.com/giginet.png' width='140px;'>
91
- </a>
92
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
93
- </td>
94
- <td id='jimmy-dee'>
95
- <a href='https://github.com/jdee'>
96
- <img src='https://github.com/jdee.png' width='140px;'>
94
+ <td id='olivier-halligon'>
95
+ <a href='https://github.com/AliSoftware'>
96
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
97
97
  </a>
98
- <h4 align='center'>Jimmy Dee</h4>
98
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
99
99
  </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='manish-rathi'>
103
- <a href='https://github.com/crazymanish'>
104
- <img src='https://github.com/crazymanish.png' width='140px;'>
102
+ <td id='roger-oba'>
103
+ <a href='https://github.com/rogerluan'>
104
+ <img src='https://github.com/rogerluan.png' width='140px;'>
105
105
  </a>
106
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
107
107
  </td>
108
- <td id='jorge-revuelta-h'>
109
- <a href='https://github.com/minuscorp'>
110
- <img src='https://github.com/minuscorp.png' width='140px;'>
108
+ <td id='maksym-grebenets'>
109
+ <a href='https://github.com/mgrebenets'>
110
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
111
111
  </a>
112
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
112
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
113
113
  </td>
114
- <td id='jan-piotrowski'>
115
- <a href='https://github.com/janpio'>
116
- <img src='https://github.com/janpio.png' width='140px;'>
114
+ <td id='luka-mirosevic'>
115
+ <a href='https://github.com/lmirosevic'>
116
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
117
117
  </a>
118
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
119
119
  </td>
120
- <td id='jérôme-lacoste'>
121
- <a href='https://github.com/lacostej'>
122
- <img src='https://github.com/lacostej.png' width='140px;'>
120
+ <td id='max-ott'>
121
+ <a href='https://github.com/max-ott'>
122
+ <img src='https://github.com/max-ott.png' width='140px;'>
123
123
  </a>
124
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
125
125
  </td>
126
- <td id='andrew-mcburney'>
127
- <a href='https://github.com/armcburney'>
128
- <img src='https://github.com/armcburney.png' width='140px;'>
126
+ <td id='joshua-liebowitz'>
127
+ <a href='https://github.com/taquitos'>
128
+ <img src='https://github.com/taquitos.png' width='140px;'>
129
129
  </a>
130
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
131
131
  </td>
132
132
  </tr>
133
133
  <tr>
134
- <td id='josh-holtz'>
135
- <a href='https://github.com/joshdholtz'>
136
- <img src='https://github.com/joshdholtz.png' width='140px;'>
137
- </a>
138
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
139
- </td>
140
- <td id='łukasz-grabowski'>
141
- <a href='https://github.com/lucgrabowski'>
142
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
143
- </a>
144
- <h4 align='center'>Łukasz Grabowski</h4>
145
- </td>
146
- <td id='satoshi-namai'>
147
- <a href='https://github.com/ainame'>
148
- <img src='https://github.com/ainame.png' width='140px;'>
134
+ <td id='matthew-ellis'>
135
+ <a href='https://github.com/matthewellis'>
136
+ <img src='https://github.com/matthewellis.png' width='140px;'>
149
137
  </a>
150
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
138
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
151
139
  </td>
152
140
  <td id='aaron-brager'>
153
141
  <a href='https://github.com/getaaron'>
@@ -155,25 +143,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
155
143
  </a>
156
144
  <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
157
145
  </td>
158
- <td id='iulian-onofrei'>
159
- <a href='https://github.com/revolter'>
160
- <img src='https://github.com/revolter.png' width='140px;'>
146
+ <td id='danielle-tomlinson'>
147
+ <a href='https://github.com/endocrimes'>
148
+ <img src='https://github.com/endocrimes.png' width='140px;'>
161
149
  </a>
162
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
163
151
  </td>
164
- </tr>
165
- <tr>
166
- <td id='maksym-grebenets'>
167
- <a href='https://github.com/mgrebenets'>
168
- <img src='https://github.com/mgrebenets.png' width='140px;'>
152
+ <td id='andrew-mcburney'>
153
+ <a href='https://github.com/armcburney'>
154
+ <img src='https://github.com/armcburney.png' width='140px;'>
169
155
  </a>
170
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
156
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
171
157
  </td>
172
- <td id='stefan-natchev'>
173
- <a href='https://github.com/snatchev'>
174
- <img src='https://github.com/snatchev.png' width='140px;'>
158
+ <td id='jorge-revuelta-h'>
159
+ <a href='https://github.com/minuscorp'>
160
+ <img src='https://github.com/minuscorp.png' width='140px;'>
175
161
  </a>
176
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
162
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
163
+ </td>
164
+ </tr>
165
+ <tr>
166
+ <td id='daniel-jankowski'>
167
+ <a href='https://github.com/mollyIV'>
168
+ <img src='https://github.com/mollyIV.png' width='140px;'>
169
+ </a>
170
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
177
171
  </td>
178
172
  <td id='helmut-januschka'>
179
173
  <a href='https://github.com/hjanuschka'>
@@ -181,25 +175,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
181
175
  </a>
182
176
  <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
183
177
  </td>
184
- <td id='manu-wallner'>
185
- <a href='https://github.com/milch'>
186
- <img src='https://github.com/milch.png' width='140px;'>
178
+ <td id='satoshi-namai'>
179
+ <a href='https://github.com/ainame'>
180
+ <img src='https://github.com/ainame.png' width='140px;'>
187
181
  </a>
188
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
189
183
  </td>
190
- <td id='max-ott'>
191
- <a href='https://github.com/max-ott'>
192
- <img src='https://github.com/max-ott.png' width='140px;'>
184
+ <td id='manish-rathi'>
185
+ <a href='https://github.com/crazymanish'>
186
+ <img src='https://github.com/crazymanish.png' width='140px;'>
193
187
  </a>
194
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
189
+ </td>
190
+ <td id='jérôme-lacoste'>
191
+ <a href='https://github.com/lacostej'>
192
+ <img src='https://github.com/lacostej.png' width='140px;'>
193
+ </a>
194
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
195
195
  </td>
196
196
  </tr>
197
197
  <tr>
198
- <td id='joshua-liebowitz'>
199
- <a href='https://github.com/taquitos'>
200
- <img src='https://github.com/taquitos.png' width='140px;'>
198
+ <td id='jimmy-dee'>
199
+ <a href='https://github.com/jdee'>
200
+ <img src='https://github.com/jdee.png' width='140px;'>
201
201
  </a>
202
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
202
+ <h4 align='center'>Jimmy Dee</h4>
203
203
  </td>
204
204
  </table>
205
205
 
@@ -99,7 +99,7 @@ module Deliver
99
99
  optional: true,
100
100
  default_value: "ios",
101
101
  verify_block: proc do |value|
102
- UI.user_error!("The platform can only be ios, appletvos, or osx") unless %('ios', 'appletvos', 'osx').include?(value)
102
+ UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %('ios', 'appletvos', 'xros', 'osx').include?(value)
103
103
  end),
104
104
 
105
105
  # live version
@@ -172,7 +172,7 @@ module Deliver
172
172
  transporter = transporter_for_selected_team
173
173
 
174
174
  case platform
175
- when "ios", "appletvos"
175
+ when "ios", "appletvos", "xros"
176
176
  package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
177
177
  app_id: Deliver.cache[:app].id,
178
178
  ipa_path: ipa_path,
@@ -209,7 +209,7 @@ module Deliver
209
209
  transporter = transporter_for_selected_team
210
210
 
211
211
  case platform
212
- when "ios", "appletvos"
212
+ when "ios", "appletvos", "xros"
213
213
  package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
214
214
  app_id: Deliver.cache[:app].id,
215
215
  ipa_path: ipa_path,
@@ -264,6 +264,7 @@ module Deliver
264
264
  private
265
265
 
266
266
  # If App Store Connect API token, use token.
267
+ # If api_key is specified and it is an Individual API Key, don't use token but use username.
267
268
  # If itc_provider was explicitly specified, use it.
268
269
  # If there are multiple teams, infer the provider from the selected team name.
269
270
  # If there are fewer than two teams, don't infer the provider.
@@ -280,6 +281,14 @@ module Deliver
280
281
  api_key
281
282
  end
282
283
 
284
+ # Currently no kind of transporters accept an Individual API Key. Use username and app-specific password instead.
285
+ # See https://github.com/fastlane/fastlane/issues/22115
286
+ is_individual_key = !api_key.nil? && api_key[:issuer_id].nil?
287
+ if is_individual_key
288
+ api_key = nil
289
+ api_token = nil
290
+ end
291
+
283
292
  unless api_token.nil?
284
293
  api_token.refresh! if api_token.expired?
285
294
  return FastlaneCore::ItunesTransporter.new(nil, nil, false, nil, api_token.text, altool_compatible_command: true, api_key: api_key)
@@ -186,7 +186,7 @@ module Fastlane
186
186
  optional: true,
187
187
  default_value: "ios",
188
188
  verify_block: proc do |value|
189
- UI.user_error!("The platform can only be ios, appletvos, or osx") unless %('ios', 'appletvos', 'osx').include?(value)
189
+ UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %('ios', 'appletvos', 'xros', 'osx').include?(value)
190
190
  end),
191
191
  FastlaneCore::ConfigItem.new(key: :team_name,
192
192
  short_option: "-e",
@@ -37,9 +37,9 @@ module Fastlane
37
37
 
38
38
  Dir.chdir(params[:path]) do
39
39
  if params[:commits_count]
40
- changelog = Actions.git_log_last_commits(params[:pretty], params[:commits_count], merge_commit_filtering, params[:date_format], params[:ancestry_path])
40
+ changelog = Actions.git_log_last_commits(params[:pretty], params[:commits_count], merge_commit_filtering, params[:date_format], params[:ancestry_path], params[:app_path])
41
41
  else
42
- changelog = Actions.git_log_between(params[:pretty], from, to, merge_commit_filtering, params[:date_format], params[:ancestry_path])
42
+ changelog = Actions.git_log_between(params[:pretty], from, to, merge_commit_filtering, params[:date_format], params[:ancestry_path], params[:app_path])
43
43
  end
44
44
 
45
45
  changelog = changelog.gsub("\n\n", "\n") if changelog # as there are duplicate newlines
@@ -147,7 +147,11 @@ module Fastlane
147
147
  verify_block: proc do |value|
148
148
  matches_option = GIT_MERGE_COMMIT_FILTERING_OPTIONS.any? { |opt| opt.to_s == value }
149
149
  UI.user_error!("Valid values for :merge_commit_filtering are #{GIT_MERGE_COMMIT_FILTERING_OPTIONS.map { |o| "'#{o}'" }.join(', ')}") unless matches_option
150
- end)
150
+ end),
151
+ FastlaneCore::ConfigItem.new(key: :app_path,
152
+ env_name: 'FL_CHANGELOG_FROM_GIT_COMMITS_APP_PATH',
153
+ description: "Scopes the changelog to a specific subdirectory of the repository",
154
+ optional: true)
151
155
  ]
152
156
  end
153
157
 
@@ -374,6 +374,7 @@ The available options:
374
374
 
375
375
  - 'ios'
376
376
  - 'appletvos'
377
+ - 'xros'
377
378
  - 'osx'
378
379
 
379
380
 
@@ -290,7 +290,7 @@ module Fastlane
290
290
  FastlaneCore::ConfigItem.new(key: :platform,
291
291
  short_option: "-p",
292
292
  env_name: "DOWNLOAD_DSYMS_PLATFORM",
293
- description: "The app platform for dSYMs you wish to download (ios, appletvos)",
293
+ description: "The app platform for dSYMs you wish to download (ios, xros, appletvos)",
294
294
  default_value: :ios),
295
295
  FastlaneCore::ConfigItem.new(key: :version,
296
296
  short_option: "-v",
@@ -351,7 +351,7 @@ module Fastlane
351
351
  end
352
352
 
353
353
  def self.is_supported?(platform)
354
- [:ios, :appletvos].include?(platform)
354
+ [:ios, :appletvos, :xros].include?(platform)
355
355
  end
356
356
 
357
357
  def self.example_code
@@ -23,7 +23,9 @@ module Fastlane
23
23
  # Manual post processing trying to ignore certain file paths
24
24
  if (ignore_files = params[:ignore_files])
25
25
  repo_status = repo_status.lines.reject do |line|
26
- path = line.split(' ').last
26
+ path = path_from_git_status_line(line)
27
+ next if path.empty?
28
+
27
29
  was_found = ignore_files.include?(path)
28
30
 
29
31
  UI.message("Ignoring '#{path}'") if was_found
@@ -54,6 +56,19 @@ module Fastlane
54
56
  end
55
57
  end
56
58
 
59
+ def self.path_from_git_status_line(line)
60
+ # Extract the file path from the line based on https://git-scm.com/docs/git-status#_output.
61
+ # The first two characters indicate the status of the file path (e.g. ' M')
62
+ # M App/script.sh
63
+ #
64
+ # If the file path is renamed, the original path is also included in the line (e.g. 'R ORIG_PATH -> PATH')
65
+ # R App/script.sh -> App/script_renamed.sh
66
+ #
67
+ path = line.match(/^.. (.* -> )?(.*)$/)[2]
68
+ path = path.delete_prefix('"').delete_suffix('"')
69
+ return path
70
+ end
71
+
57
72
  def self.description
58
73
  "Raises an exception if there are uncommitted git changes"
59
74
  end
@@ -83,7 +83,7 @@ module Fastlane
83
83
  optional: true,
84
84
  default_value: "ios",
85
85
  verify_block: proc do |value|
86
- UI.user_error!("The platform can only be ios, osx, or appletvos") unless %('osx', ios', 'appletvos').include?(value)
86
+ UI.user_error!("The platform can only be ios, osx, xros or appletvos") unless %('osx', ios', 'appletvos', 'xros').include?(value)
87
87
  end),
88
88
  FastlaneCore::ConfigItem.new(key: :initial_build_number,
89
89
  env_name: "INITIAL_BUILD_NUMBER",
@@ -169,10 +169,10 @@ module Fastlane
169
169
  end),
170
170
  FastlaneCore::ConfigItem.new(key: :platform,
171
171
  env_name: "FL_SET_CHANGELOG_PLATFORM",
172
- description: "The platform of the app (ios, appletvos, mac)",
172
+ description: "The platform of the app (ios, appletvos, xros, mac)",
173
173
  default_value: "ios",
174
174
  verify_block: proc do |value|
175
- available = ['ios', 'appletvos', 'mac']
175
+ available = ['ios', 'appletvos', 'xros', 'mac']
176
176
  UI.user_error!("Invalid platform '#{value}', must be #{available.join(', ')}") unless available.include?(value)
177
177
  end)
178
178
  ]
@@ -183,7 +183,7 @@ module Fastlane
183
183
  end
184
184
 
185
185
  def self.is_supported?(platform)
186
- [:ios, :appletvos, :mac].include?(platform)
186
+ [:ios, :appletvos, :xros, :mac].include?(platform)
187
187
  end
188
188
 
189
189
  def self.example_code
@@ -27,6 +27,7 @@ module Fastlane
27
27
  slack_attachment = self.class.generate_slack_attachments(options)
28
28
  link_names = options[:link_names]
29
29
  icon_url = options[:use_webhook_configured_username_and_icon] ? nil : options[:icon_url]
30
+ icon_emoji = options[:use_webhook_configured_username_and_icon] ? nil : options[:icon_emoji]
30
31
 
31
32
  post_message(
32
33
  channel: channel,
@@ -34,16 +35,18 @@ module Fastlane
34
35
  attachments: [slack_attachment],
35
36
  link_names: link_names,
36
37
  icon_url: icon_url,
38
+ icon_emoji: icon_emoji,
37
39
  fail_on_error: options[:fail_on_error]
38
40
  )
39
41
  end
40
42
 
41
- def post_message(channel:, username:, attachments:, link_names:, icon_url:, fail_on_error:)
43
+ def post_message(channel:, username:, attachments:, link_names:, icon_url:, icon_emoji:, fail_on_error:)
42
44
  @notifier.post_to_legacy_incoming_webhook(
43
45
  channel: channel,
44
46
  username: username,
45
47
  link_names: link_names,
46
48
  icon_url: icon_url,
49
+ icon_emoji: icon_emoji,
47
50
  attachments: attachments
48
51
  )
49
52
  UI.success('Successfully sent Slack notification')
@@ -211,9 +214,13 @@ module Fastlane
211
214
  optional: true),
212
215
  FastlaneCore::ConfigItem.new(key: :icon_url,
213
216
  env_name: "FL_SLACK_ICON_URL",
214
- description: "Overrides the webhook's image property if use_webhook_configured_username_and_icon is false",
217
+ description: "Specifies a URL of an image to use as the photo of the message. Overrides the webhook's image property if use_webhook_configured_username_and_icon is false",
215
218
  default_value: "https://fastlane.tools/assets/img/fastlane_icon.png",
216
219
  optional: true),
220
+ FastlaneCore::ConfigItem.new(key: :icon_emoji,
221
+ env_name: "FL_SLACK_ICON_EMOJI",
222
+ description: "Specifies an emoji (using colon shortcodes, eg. :white_check_mark:) to use as the photo of the message. Overrides the webhook's image property if use_webhook_configured_username_and_icon is false. This parameter takes precedence over icon_url",
223
+ optional: true),
217
224
  FastlaneCore::ConfigItem.new(key: :payload,
218
225
  env_name: "FL_SLACK_PAYLOAD",
219
226
  description: "Add additional information to this post. payload must be a hash containing any key with any value",
@@ -96,6 +96,8 @@ module Fastlane
96
96
  [key, options_to_client.call(value).join(',')]
97
97
  when :custom
98
98
  [key, value]
99
+ when :tags
100
+ [key, value.join(',')]
99
101
  else
100
102
  UI.user_error!("Unknown parameter: #{key}")
101
103
  end
@@ -241,7 +243,13 @@ module Fastlane
241
243
  env_name: "FL_TESTFAIRY_TIMEOUT",
242
244
  description: "Request timeout in seconds",
243
245
  type: Integer,
244
- optional: true)
246
+ optional: true),
247
+ FastlaneCore::ConfigItem.new(key: :tags,
248
+ optional: true,
249
+ env_name: "FL_TESTFAIRY_TAGS",
250
+ description: "Custom tags that can be used to organize your builds",
251
+ type: Array,
252
+ default_value: [])
245
253
  ]
246
254
  end
247
255
 
@@ -218,7 +218,9 @@ module Fastlane
218
218
  end
219
219
 
220
220
  def self.sh(*command, step_name: nil, log: true, error_callback: nil, &b)
221
- command_header = log ? step_name || Actions.shell_command_from_args(*command) : "shell command"
221
+ command_header = step_name
222
+ command_header ||= log ? Actions.shell_command_from_args(*command) : "shell command"
223
+
222
224
  Actions.execute_action(command_header) do
223
225
  Actions.sh_no_action(*command, log: log, error_callback: error_callback, &b)
224
226
  end
@@ -343,7 +345,11 @@ module Fastlane
343
345
  # Update the repo if it's eligible for caching but the version isn't specified
344
346
  UI.message("Fetching remote git branches and updating git repo...")
345
347
  Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
346
- Actions.sh("cd #{clone_folder.shellescape} && git fetch --all --quiet && git checkout #{checkout_param.shellescape} #{checkout_path} && git reset --hard && git rebase")
348
+ command = "cd #{clone_folder.shellescape} && git fetch --all --quiet && git checkout #{checkout_param.shellescape} #{checkout_path} && git reset --hard"
349
+ # Check if checked out "branch" is actually a branch or a tag
350
+ current_branch = Actions.sh("cd #{clone_folder.shellescape} && git rev-parse --abbrev-ref HEAD")
351
+ command << " && git rebase" unless current_branch.strip.eql?("HEAD")
352
+ Actions.sh(command)
347
353
  end
348
354
  else
349
355
  begin
@@ -9,13 +9,14 @@ module Fastlane
9
9
  end.freeze
10
10
  end
11
11
 
12
- def self.git_log_between(pretty_format, from, to, merge_commit_filtering, date_format = nil, ancestry_path)
12
+ def self.git_log_between(pretty_format, from, to, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
13
13
  command = %w(git log)
14
14
  command << "--pretty=#{pretty_format}"
15
15
  command << "--date=#{date_format}" if date_format
16
16
  command << '--ancestry-path' if ancestry_path
17
17
  command << "#{from}...#{to}"
18
18
  command << git_log_merge_commit_filtering_option(merge_commit_filtering)
19
+ command << app_path if app_path
19
20
  # "*command" syntax expands "command" array into variable arguments, which
20
21
  # will then be individually shell-escaped by Actions.sh.
21
22
  Actions.sh(*command.compact, log: false).chomp
@@ -23,13 +24,14 @@ module Fastlane
23
24
  nil
24
25
  end
25
26
 
26
- def self.git_log_last_commits(pretty_format, commit_count, merge_commit_filtering, date_format = nil, ancestry_path)
27
+ def self.git_log_last_commits(pretty_format, commit_count, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
27
28
  command = %w(git log)
28
29
  command << "--pretty=#{pretty_format}"
29
30
  command << "--date=#{date_format}" if date_format
30
31
  command << '--ancestry-path' if ancestry_path
31
32
  command << '-n' << commit_count.to_s
32
33
  command << git_log_merge_commit_filtering_option(merge_commit_filtering)
34
+ command << app_path if app_path
33
35
  Actions.sh(*command.compact, log: false).chomp
34
36
  rescue
35
37
  nil
@@ -8,16 +8,17 @@ module Fastlane
8
8
  end
9
9
  end
10
10
 
11
- # Overriding channel, icon_url and username is only supported in legacy incoming webhook.
11
+ # Overriding channel, icon_url, icon_emoji and username is only supported in legacy incoming webhook.
12
12
  # Also note that the use of attachments has been discouraged by Slack, in favor of Block Kit.
13
13
  # https://api.slack.com/legacy/custom-integrations/messaging/webhooks
14
- def post_to_legacy_incoming_webhook(channel:, username:, attachments:, link_names:, icon_url:)
14
+ def post_to_legacy_incoming_webhook(channel:, username:, attachments:, link_names:, icon_url:, icon_emoji:)
15
15
  @client.post(@webhook_url) do |request|
16
16
  request.headers['Content-Type'] = 'application/json'
17
17
  request.body = {
18
18
  channel: channel,
19
19
  username: username,
20
20
  icon_url: icon_url,
21
+ icon_emoji: icon_emoji,
21
22
  attachments: attachments,
22
23
  link_names: link_names
23
24
  }.to_json
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.221.1'.freeze
2
+ VERSION = '2.223.0'.freeze
3
3
  SUMMARY = "The easiest way to build and release mobile apps.".freeze
4
4
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
5
5
  MINIMUM_XCODE_RELEASE = "7.0".freeze
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.221.1
20
+ // Generated with fastlane 2.223.0