fastlane 2.205.0 → 2.206.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -96
  3. data/cert/lib/cert/runner.rb +15 -7
  4. data/deliver/lib/deliver/options.rb +5 -0
  5. data/deliver/lib/deliver/runner.rb +47 -2
  6. data/fastlane/lib/fastlane/actions/.supply.rb.swp +0 -0
  7. data/fastlane/lib/fastlane/actions/danger.rb +14 -0
  8. data/fastlane/lib/fastlane/actions/run_tests.rb +1 -7
  9. data/fastlane/lib/fastlane/actions/setup_ci.rb +13 -4
  10. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +9 -0
  11. data/fastlane/lib/fastlane/cli_tools_distributor.rb +20 -0
  12. data/fastlane/lib/fastlane/version.rb +1 -1
  13. data/fastlane/swift/Deliverfile.swift +1 -1
  14. data/fastlane/swift/DeliverfileProtocol.swift +5 -1
  15. data/fastlane/swift/Fastlane.swift +39 -3
  16. data/fastlane/swift/Gymfile.swift +1 -1
  17. data/fastlane/swift/GymfileProtocol.swift +1 -1
  18. data/fastlane/swift/Matchfile.swift +1 -1
  19. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  20. data/fastlane/swift/Precheckfile.swift +1 -1
  21. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  22. data/fastlane/swift/Scanfile.swift +1 -1
  23. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  24. data/fastlane/swift/Screengrabfile.swift +1 -1
  25. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  26. data/fastlane/swift/Snapshotfile.swift +1 -1
  27. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  28. data/fastlane/swift/formatting/Brewfile.lock.json +13 -13
  29. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +90 -0
  30. data/frameit/lib/frameit/device_types.rb +7 -0
  31. data/match/lib/match/importer.rb +3 -1
  32. data/match/lib/match/options.rb +5 -0
  33. data/match/lib/match/runner.rb +9 -3
  34. data/match/lib/match/storage/google_cloud_storage.rb +7 -6
  35. data/scan/lib/scan/options.rb +6 -1
  36. data/scan/lib/scan/runner.rb +10 -2
  37. data/sigh/lib/sigh/runner.rb +2 -1
  38. data/spaceship/lib/spaceship/connect_api/api_client.rb +10 -5
  39. data/spaceship/lib/spaceship/connect_api/models/app.rb +1 -2
  40. data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +2 -1
  41. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +1 -0
  42. data/spaceship/lib/spaceship/connect_api/models/user.rb +5 -0
  43. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +24 -2
  44. data/spaceship/lib/spaceship/connect_api/token.rb +5 -2
  45. data/spaceship/lib/spaceship/tunes/tunes_client.rb +7 -7
  46. data/trainer/lib/trainer/test_parser.rb +1 -1
  47. metadata +22 -23
  48. data/spaceship/lib/spaceship/.client.rb.swp +0 -0
  49. data/spaceship/lib/spaceship/tunes/.tunes_client.rb.swp +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05270744fe6e63c79322a0e642c6293c463bbd6365042b949537a477c1e3d3c4
4
- data.tar.gz: b2bb49aeec0d22405b99e2f2cc6e2fb946377960eb7e160d11f8f61d6744d32d
3
+ metadata.gz: 317829e959e1ddefb2bf8509aab4759908053aacb4ca6ada69b76fd1c889d7ab
4
+ data.tar.gz: da4f61c5a484553bcc8a6adaf38b32e126afbbdcf67a34aba01b4cc1890eb31d
5
5
  SHA512:
6
- metadata.gz: aa3d5be55d5b42f52dfbd77450549aec0691c57dfcdfb95109be75338f5d7a461ea0b83c015cddb65c39c43324ef43172d6b7a2a3d51033b6d99d63c5edb2d66
7
- data.tar.gz: caaee34991c9a6ff6dca57960d3eab72135f3ba80ce5e29c15b1da530beb59fd8134d03b9831a463b9fc785693a545092436de2fc63bffaeeeb34eaef9f3e509
6
+ metadata.gz: 8ae03a2f09a22603d6920abd1c129f5eb34cceebe1cfd633d25234140213a109bd05affb55a48b4e02e82697de95000b83960d77bc81fec96c3304871a666e83
7
+ data.tar.gz: 135ff6384e23c9f56a2cc2795cecd720825445316e2da518a23d94899859b642970a34cac5ec74aba7cef06ada8ab86f25f311db614d379062d26ed100e27b09
data/README.md CHANGED
@@ -35,139 +35,119 @@ 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='fumiya-nakamura'>
39
- <a href='https://github.com/nafu'>
40
- <img src='https://github.com/nafu.png' width='140px;'>
41
- </a>
42
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
43
- </td>
44
- <td id='luka-mirosevic'>
45
- <a href='https://github.com/lmirosevic'>
46
- <img src='https://github.com/lmirosevic.png' width='140px;'>
47
- </a>
48
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
49
- </td>
50
- <td id='felix-krause'>
51
- <a href='https://github.com/KrauseFx'>
52
- <img src='https://github.com/KrauseFx.png' width='140px;'>
53
- </a>
54
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
55
- </td>
56
- <td id='matthew-ellis'>
57
- <a href='https://github.com/matthewellis'>
58
- <img src='https://github.com/matthewellis.png' width='140px;'>
59
- </a>
60
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
61
- </td>
62
- <td id='satoshi-namai'>
63
- <a href='https://github.com/ainame'>
64
- <img src='https://github.com/ainame.png' width='140px;'>
38
+ <td id='josh-holtz'>
39
+ <a href='https://github.com/joshdholtz'>
40
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
65
41
  </a>
66
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
42
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
67
43
  </td>
68
- </tr>
69
- <tr>
70
44
  <td id='maksym-grebenets'>
71
45
  <a href='https://github.com/mgrebenets'>
72
46
  <img src='https://github.com/mgrebenets.png' width='140px;'>
73
47
  </a>
74
48
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
75
49
  </td>
76
- <td id='roger-oba'>
77
- <a href='https://github.com/rogerluan'>
78
- <img src='https://github.com/rogerluan.png' width='140px;'>
79
- </a>
80
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
81
- </td>
82
- <td id='olivier-halligon'>
83
- <a href='https://github.com/AliSoftware'>
84
- <img src='https://github.com/AliSoftware.png' width='140px;'>
85
- </a>
86
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
87
- </td>
88
50
  <td id='jorge-revuelta-h'>
89
51
  <a href='https://github.com/minuscorp'>
90
52
  <img src='https://github.com/minuscorp.png' width='140px;'>
91
53
  </a>
92
54
  <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
93
55
  </td>
94
- <td id='danielle-tomlinson'>
95
- <a href='https://github.com/endocrimes'>
96
- <img src='https://github.com/endocrimes.png' width='140px;'>
56
+ <td id='stefan-natchev'>
57
+ <a href='https://github.com/snatchev'>
58
+ <img src='https://github.com/snatchev.png' width='140px;'>
97
59
  </a>
98
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
99
61
  </td>
100
- </tr>
101
- <tr>
102
62
  <td id='manish-rathi'>
103
63
  <a href='https://github.com/crazymanish'>
104
64
  <img src='https://github.com/crazymanish.png' width='140px;'>
105
65
  </a>
106
66
  <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
107
67
  </td>
108
- <td id='josh-holtz'>
109
- <a href='https://github.com/joshdholtz'>
110
- <img src='https://github.com/joshdholtz.png' width='140px;'>
68
+ </tr>
69
+ <tr>
70
+ <td id='joshua-liebowitz'>
71
+ <a href='https://github.com/taquitos'>
72
+ <img src='https://github.com/taquitos.png' width='140px;'>
111
73
  </a>
112
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
74
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
113
75
  </td>
114
- <td id='jan-piotrowski'>
115
- <a href='https://github.com/janpio'>
116
- <img src='https://github.com/janpio.png' width='140px;'>
76
+ <td id='manu-wallner'>
77
+ <a href='https://github.com/milch'>
78
+ <img src='https://github.com/milch.png' width='140px;'>
117
79
  </a>
118
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
119
81
  </td>
120
- <td id='helmut-januschka'>
121
- <a href='https://github.com/hjanuschka'>
122
- <img src='https://github.com/hjanuschka.png' width='140px;'>
82
+ <td id='daniel-jankowski'>
83
+ <a href='https://github.com/mollyIV'>
84
+ <img src='https://github.com/mollyIV.png' width='140px;'>
123
85
  </a>
124
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
125
87
  </td>
126
- <td id='kohki-miki'>
127
- <a href='https://github.com/giginet'>
128
- <img src='https://github.com/giginet.png' width='140px;'>
88
+ <td id='andrew-mcburney'>
89
+ <a href='https://github.com/armcburney'>
90
+ <img src='https://github.com/armcburney.png' width='140px;'>
129
91
  </a>
130
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
93
+ </td>
94
+ <td id='jan-piotrowski'>
95
+ <a href='https://github.com/janpio'>
96
+ <img src='https://github.com/janpio.png' width='140px;'>
97
+ </a>
98
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
131
99
  </td>
132
100
  </tr>
133
101
  <tr>
134
- <td id='max-ott'>
135
- <a href='https://github.com/max-ott'>
136
- <img src='https://github.com/max-ott.png' width='140px;'>
102
+ <td id='olivier-halligon'>
103
+ <a href='https://github.com/AliSoftware'>
104
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
137
105
  </a>
138
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
139
107
  </td>
140
- <td id='jimmy-dee'>
141
- <a href='https://github.com/jdee'>
142
- <img src='https://github.com/jdee.png' width='140px;'>
108
+ <td id='satoshi-namai'>
109
+ <a href='https://github.com/ainame'>
110
+ <img src='https://github.com/ainame.png' width='140px;'>
143
111
  </a>
144
- <h4 align='center'>Jimmy Dee</h4>
112
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
145
113
  </td>
146
- <td id='stefan-natchev'>
147
- <a href='https://github.com/snatchev'>
148
- <img src='https://github.com/snatchev.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;'>
149
117
  </a>
150
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
151
119
  </td>
152
- <td id='daniel-jankowski'>
153
- <a href='https://github.com/mollyIV'>
154
- <img src='https://github.com/mollyIV.png' width='140px;'>
120
+ <td id='fumiya-nakamura'>
121
+ <a href='https://github.com/nafu'>
122
+ <img src='https://github.com/nafu.png' width='140px;'>
155
123
  </a>
156
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
157
125
  </td>
158
- <td id='andrew-mcburney'>
159
- <a href='https://github.com/armcburney'>
160
- <img src='https://github.com/armcburney.png' width='140px;'>
126
+ <td id='matthew-ellis'>
127
+ <a href='https://github.com/matthewellis'>
128
+ <img src='https://github.com/matthewellis.png' width='140px;'>
161
129
  </a>
162
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
163
131
  </td>
164
132
  </tr>
165
133
  <tr>
166
- <td id='aaron-brager'>
167
- <a href='https://github.com/getaaron'>
168
- <img src='https://github.com/getaaron.png' width='140px;'>
134
+ <td id='jimmy-dee'>
135
+ <a href='https://github.com/jdee'>
136
+ <img src='https://github.com/jdee.png' width='140px;'>
169
137
  </a>
170
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
138
+ <h4 align='center'>Jimmy Dee</h4>
139
+ </td>
140
+ <td id='roger-oba'>
141
+ <a href='https://github.com/rogerluan'>
142
+ <img src='https://github.com/rogerluan.png' width='140px;'>
143
+ </a>
144
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
145
+ </td>
146
+ <td id='helmut-januschka'>
147
+ <a href='https://github.com/hjanuschka'>
148
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
149
+ </a>
150
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
171
151
  </td>
172
152
  <td id='jérôme-lacoste'>
173
153
  <a href='https://github.com/lacostej'>
@@ -175,31 +155,51 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
175
155
  </a>
176
156
  <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
177
157
  </td>
178
- <td id='joshua-liebowitz'>
179
- <a href='https://github.com/taquitos'>
180
- <img src='https://github.com/taquitos.png' width='140px;'>
158
+ <td id='max-ott'>
159
+ <a href='https://github.com/max-ott'>
160
+ <img src='https://github.com/max-ott.png' width='140px;'>
181
161
  </a>
182
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
162
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
183
163
  </td>
164
+ </tr>
165
+ <tr>
184
166
  <td id='łukasz-grabowski'>
185
167
  <a href='https://github.com/lucgrabowski'>
186
168
  <img src='https://github.com/lucgrabowski.png' width='140px;'>
187
169
  </a>
188
170
  <h4 align='center'>Łukasz Grabowski</h4>
189
171
  </td>
172
+ <td id='aaron-brager'>
173
+ <a href='https://github.com/getaaron'>
174
+ <img src='https://github.com/getaaron.png' width='140px;'>
175
+ </a>
176
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
177
+ </td>
190
178
  <td id='iulian-onofrei'>
191
179
  <a href='https://github.com/revolter'>
192
180
  <img src='https://github.com/revolter.png' width='140px;'>
193
181
  </a>
194
182
  <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
195
183
  </td>
184
+ <td id='felix-krause'>
185
+ <a href='https://github.com/KrauseFx'>
186
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
187
+ </a>
188
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
189
+ </td>
190
+ <td id='danielle-tomlinson'>
191
+ <a href='https://github.com/endocrimes'>
192
+ <img src='https://github.com/endocrimes.png' width='140px;'>
193
+ </a>
194
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
195
+ </td>
196
196
  </tr>
197
197
  <tr>
198
- <td id='manu-wallner'>
199
- <a href='https://github.com/milch'>
200
- <img src='https://github.com/milch.png' width='140px;'>
198
+ <td id='kohki-miki'>
199
+ <a href='https://github.com/giginet'>
200
+ <img src='https://github.com/giginet.png' width='140px;'>
201
201
  </a>
202
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
202
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
203
203
  </td>
204
204
  </table>
205
205
 
@@ -138,26 +138,34 @@ module Cert
138
138
  # All certificates of this type
139
139
  def certificates
140
140
  filter = {
141
- certificateType: certificate_type
141
+ certificateType: certificate_types.join(",")
142
142
  }
143
143
  return Spaceship::ConnectAPI::Certificate.all(filter: filter)
144
144
  end
145
145
 
146
- # The kind of certificate we're interested in
146
+ # The kind of certificate we're interested in (for creating)
147
147
  def certificate_type
148
+ return certificate_types.first
149
+ end
150
+
151
+ # The kind of certificates we're interested in (for listing)
152
+ def certificate_types
148
153
  if Cert.config[:type]
149
154
  case Cert.config[:type].to_sym
150
155
  when :mac_installer_distribution
151
- return Spaceship::ConnectAPI::Certificate::CertificateType::MAC_INSTALLER_DISTRIBUTION
156
+ return [Spaceship::ConnectAPI::Certificate::CertificateType::MAC_INSTALLER_DISTRIBUTION]
152
157
  when :developer_id_application
153
- return Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_APPLICATION
158
+ return [
159
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_APPLICATION_G2,
160
+ Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_APPLICATION
161
+ ]
154
162
  when :developer_id_kext
155
- return Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_KEXT
163
+ return [Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_KEXT]
156
164
  when :developer_id_installer
157
165
  if !Spaceship::ConnectAPI.token.nil?
158
166
  raise "As of 2021-11-09, the App Store Connect API does not allow accessing DEVELOPER_ID_INSTALLER with the API Key. Please file an issue on GitHub if this has changed and needs to be updated"
159
167
  else
160
- return Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_INSTALLER
168
+ return [Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_INSTALLER]
161
169
  end
162
170
  else
163
171
  UI.user_error("Unaccepted value for :type - #{Cert.config[:type]}")
@@ -182,7 +190,7 @@ module Cert
182
190
  end
183
191
  end
184
192
 
185
- return cert_type
193
+ return [cert_type]
186
194
  end
187
195
 
188
196
  def create_certificate
@@ -173,6 +173,11 @@ module Deliver
173
173
  description: "Submit the new version for Review after uploading everything",
174
174
  type: Boolean,
175
175
  default_value: false),
176
+ FastlaneCore::ConfigItem.new(key: :verify_only,
177
+ env_name: "DELIVER_VERIFY_ONLY",
178
+ description: "Verifies archive with App Store Connect without uploading",
179
+ type: Boolean,
180
+ default_value: false),
176
181
  FastlaneCore::ConfigItem.new(key: :reject_if_possible,
177
182
  env_name: "DELIVER_REJECT_IF_POSSIBLE",
178
183
  description: "Rejects the previously submitted build if it's in a state where it's possible",
@@ -46,6 +46,12 @@ module Deliver
46
46
  end
47
47
 
48
48
  def run
49
+ if options[:verify_only]
50
+ UI.important("Verify flag is set, only package validation will take place and no submission will be made")
51
+ verify_binary
52
+ return
53
+ end
54
+
49
55
  verify_version if options[:app_version].to_s.length > 0 && !options[:skip_app_version_update]
50
56
 
51
57
  # Rejecting before upload meta
@@ -155,6 +161,45 @@ module Deliver
155
161
  UploadPriceTier.new.upload(options)
156
162
  end
157
163
 
164
+ # Verify the binary with App Store Connect
165
+ def verify_binary
166
+ UI.message("Verifying binary with App Store Connect")
167
+
168
+ verify_ipa = options[:ipa]
169
+ verify_pkg = options[:pkg]
170
+
171
+ # 2020-01-27
172
+ # Only verify platform if if both ipa and pkg exists (for backwards support)
173
+ if verify_ipa && verify_pkg
174
+ verify_ipa = ["ios", "appletvos"].include?(options[:platform])
175
+ verify_pkg = options[:platform] == "osx"
176
+ end
177
+
178
+ if verify_ipa
179
+ package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(
180
+ app_id: Deliver.cache[:app].id,
181
+ ipa_path: options[:ipa],
182
+ package_path: "/tmp",
183
+ platform: options[:platform]
184
+ )
185
+ elsif verify_pkg
186
+ package_path = FastlaneCore::PkgUploadPackageBuilder.new.generate(
187
+ app_id: Deliver.cache[:app].id,
188
+ pkg_path: options[:pkg],
189
+ package_path: "/tmp",
190
+ platform: options[:platform]
191
+ )
192
+ end
193
+
194
+ transporter = transporter_for_selected_team
195
+ result = transporter.verify(package_path: package_path)
196
+
197
+ unless result
198
+ transporter_errors = transporter.displayable_errors
199
+ UI.user_error!("Error verifying the binary file: \n #{transporter_errors}")
200
+ end
201
+ end
202
+
158
203
  # Upload the binary to App Store Connect
159
204
  def upload_binary
160
205
  UI.message("Uploading binary to App Store Connect")
@@ -243,8 +288,8 @@ module Deliver
243
288
  return generic_transporter unless options[:itc_provider].nil? && tunes_client.teams.count > 1
244
289
 
245
290
  begin
246
- team = tunes_client.teams.find { |t| t['contentProvider']['contentProviderId'].to_s == tunes_client.team_id }
247
- name = team['contentProvider']['name']
291
+ team = tunes_client.teams.find { |t| t['providerId'].to_s == tunes_client.team_id }
292
+ name = team['name']
248
293
  provider_id = generic_transporter.provider_ids[name]
249
294
  UI.verbose("Inferred provider id #{provider_id} for team #{name}.")
250
295
  return FastlaneCore::ItunesTransporter.new(options[:username], nil, false, provider_id)
@@ -25,6 +25,8 @@ module Fastlane
25
25
  cmd << "pr #{pr}" if pr
26
26
 
27
27
  ENV['DANGER_GITHUB_API_TOKEN'] = params[:github_api_token] if params[:github_api_token]
28
+ ENV['DANGER_GITHUB_HOST'] = params[:github_enterprise_host] if params[:github_enterprise_host]
29
+ ENV['DANGER_GITHUB_API_BASE_URL'] = params[:github_enterprise_api_base_url] if params[:github_enterprise_api_base_url]
28
30
 
29
31
  Actions.sh(cmd.join(' '))
30
32
  end
@@ -66,6 +68,18 @@ module Fastlane
66
68
  sensitive: true,
67
69
  code_gen_sensitive: true,
68
70
  optional: true),
71
+ FastlaneCore::ConfigItem.new(key: :github_enterprise_host,
72
+ env_name: "FL_DANGER_GITHUB_ENTERPRISE_HOST",
73
+ description: "GitHub host URL for GitHub Enterprise",
74
+ sensitive: true,
75
+ code_gen_sensitive: true,
76
+ optional: true),
77
+ FastlaneCore::ConfigItem.new(key: :github_enterprise_api_base_url,
78
+ env_name: "FL_DANGER_GITHUB_ENTERPRISE_API_BASE_URL",
79
+ description: "GitHub API base URL for GitHub Enterprise",
80
+ sensitive: true,
81
+ code_gen_sensitive: true,
82
+ optional: true),
69
83
  FastlaneCore::ConfigItem.new(key: :fail_on_errors,
70
84
  env_name: "FL_DANGER_FAIL_ON_ERRORS",
71
85
  description: "Should always fail the build process, defaults to false",
@@ -71,13 +71,7 @@ module Fastlane
71
71
  def self.available_options
72
72
  require 'scan'
73
73
 
74
- FastlaneCore::CommanderGenerator.new.generate(Scan::Options.available_options) + [
75
- FastlaneCore::ConfigItem.new(key: :fail_build,
76
- env_name: "SCAN_FAIL_BUILD",
77
- description: "Should this step stop the build if the tests fail? Set this to false if you're using trainer",
78
- type: Boolean,
79
- default_value: true)
80
- ]
74
+ FastlaneCore::CommanderGenerator.new.generate(Scan::Options.available_options)
81
75
  end
82
76
 
83
77
  def self.output
@@ -12,7 +12,7 @@ module Fastlane
12
12
  setup_output_paths
13
13
  end
14
14
 
15
- setup_keychain
15
+ setup_keychain(params)
16
16
  end
17
17
 
18
18
  def self.should_run?(params)
@@ -23,7 +23,7 @@ module Fastlane
23
23
  params[:provider] || (Helper.is_circle_ci? ? 'circleci' : nil)
24
24
  end
25
25
 
26
- def self.setup_keychain
26
+ def self.setup_keychain(params)
27
27
  unless Helper.mac?
28
28
  UI.message("Skipping Keychain setup on non-macOS CI Agent")
29
29
  return
@@ -43,7 +43,7 @@ module Fastlane
43
43
  name: keychain_name,
44
44
  default_keychain: true,
45
45
  unlock: true,
46
- timeout: 3600,
46
+ timeout: params[:timeout],
47
47
  lock_when_sleeps: true,
48
48
  password: "",
49
49
  add_to_search_list: true
@@ -103,7 +103,12 @@ module Fastlane
103
103
  # Validate both 'travis' and 'circleci' for backwards compatibility, even
104
104
  # though only the latter receives special treatment by this action
105
105
  UI.user_error!("A given CI provider '#{value}' is not supported. Available CI providers: 'travis', 'circleci'") unless ["travis", "circleci"].include?(value)
106
- end)
106
+ end),
107
+ FastlaneCore::ConfigItem.new(key: :timeout,
108
+ env_name: "FL_SETUP_CI_TIMEOUT",
109
+ description: "Set a custom timeout in seconds for keychain. Set `0` if you want to specify 'no time-out'",
110
+ type: Integer,
111
+ default_value: 3600)
107
112
  ]
108
113
  end
109
114
 
@@ -119,6 +124,10 @@ module Fastlane
119
124
  [
120
125
  'setup_ci(
121
126
  provider: "circleci"
127
+ )',
128
+ 'setup_ci(
129
+ provider: "circleci",
130
+ timeout: 0
122
131
  )'
123
132
  ]
124
133
  end
@@ -34,7 +34,9 @@ module Fastlane
34
34
  UI.user_error!("Could not find valid certificate at '#{params[:certificate]}'") unless File.size(params[:certificate]) > 0
35
35
  cert = OpenSSL::X509::Certificate.new(File.read(params[:certificate]))
36
36
  store.add_cert(cert)
37
+
37
38
  p7.verify([cert], store)
39
+ check_verify!(p7)
38
40
  data = Plist.parse_xml(p7.data)
39
41
 
40
42
  target_filter = params[:target_filter] || params[:build_configuration_filter]
@@ -81,6 +83,13 @@ module Fastlane
81
83
  UI.success("Successfully updated project settings in '#{folder}'")
82
84
  end
83
85
 
86
+ def self.check_verify!(p7)
87
+ failed_to_verify = (p7.data.nil? || p7.data == "") && !(p7.error_string || "").empty?
88
+ if failed_to_verify
89
+ UI.crash!("Profile could not be verified with error: '#{p7.error_string}'. Try regenerating provisioning profile.")
90
+ end
91
+ end
92
+
84
93
  def self.description
85
94
  "Update projects code signing settings from your provisioning profile"
86
95
  end
@@ -78,6 +78,7 @@ module Fastlane
78
78
  tool_name = ARGV.first ? ARGV.first.downcase : nil
79
79
 
80
80
  tool_name = process_emojis(tool_name)
81
+ tool_name = map_aliased_tools(tool_name)
81
82
 
82
83
  if tool_name && Fastlane::TOOLS.include?(tool_name.to_sym) && !available_lanes.include?(tool_name.to_sym)
83
84
  # Triggering a specific tool
@@ -125,6 +126,25 @@ module Fastlane
125
126
  FastlaneCore::UpdateChecker.show_update_status('fastlane', Fastlane::VERSION)
126
127
  end
127
128
 
129
+ def map_aliased_tools(tool_name)
130
+ map = {
131
+ "get_certificates": "cert",
132
+ "upload_to_app_store": "deliver",
133
+ "frame_screenshots": "frameit",
134
+ "build_app": "gym",
135
+ "build_ios_app": "gym",
136
+ "build_mac_app": "gym",
137
+ "sync_code_signing": "match",
138
+ "get_push_certificate": "pem",
139
+ "check_app_store_metadata": "precheck",
140
+ "capture_android_screenshots": "screengrab",
141
+ "get_provisioning_profile": "sigh",
142
+ "capture_ios_screenshots": "snapshot",
143
+ "upload_to_play_store": "supply"
144
+ }
145
+ return map[tool_name.to_sym] || tool_name
146
+ end
147
+
128
148
  # Since loading dotenv should respect additional environments passed using
129
149
  # --env, we must extract the arguments out of ARGV and process them before
130
150
  # calling into commander. This is required since the ENV must be configured
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.205.0'.freeze
2
+ VERSION = '2.206.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '1.12.1'.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.205.0
20
+ // Generated with fastlane 2.206.0
@@ -65,6 +65,9 @@ public protocol DeliverfileProtocol: AnyObject {
65
65
  /// Submit the new version for Review after uploading everything
66
66
  var submitForReview: Bool { get }
67
67
 
68
+ /// Verifies archive with App Store Connect without uploading
69
+ var verifyOnly: Bool { get }
70
+
68
71
  /// Rejects the previously submitted build if it's in a state where it's possible
69
72
  var rejectIfPossible: Bool { get }
70
73
 
@@ -214,6 +217,7 @@ public extension DeliverfileProtocol {
214
217
  var overwriteScreenshots: Bool { return false }
215
218
  var syncScreenshots: Bool { return false }
216
219
  var submitForReview: Bool { return false }
220
+ var verifyOnly: Bool { return false }
217
221
  var rejectIfPossible: Bool { return false }
218
222
  var automaticRelease: Bool? { return nil }
219
223
  var autoReleaseDate: Int? { return nil }
@@ -260,4 +264,4 @@ public extension DeliverfileProtocol {
260
264
 
261
265
  // Please don't remove the lines below
262
266
  // They are used to detect outdated files
263
- // FastlaneRunnerAPIVersion [0.9.100]
267
+ // FastlaneRunnerAPIVersion [0.9.103]