fastlane 2.240.0 → 2.240.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7467cf01821db5d82582d55e830e209b07d0c3ed4793686fb31e91bba27b66a1
4
- data.tar.gz: b517b0bdb057a42827caa42ba504cd450d3e40169c8191c280cee8c6ab2544b8
3
+ metadata.gz: e3bd772100f8573dff86b99cc3081291849946024ad2b90a3e444a56620b6063
4
+ data.tar.gz: 3052020ae6023a87898ab9ce4d969adf1d41716713c491e905b8277461aeedbe
5
5
  SHA512:
6
- metadata.gz: 683a57ea89b9bf4ae28def60d5bbfaa5221081dac34e840bf4c597f3788f7b8c295237a0862847a519aedd28ef51ffa7fb4da1a576afd2654e5548761ccf4b51
7
- data.tar.gz: 9c436bf7d1ba66d55a8d68aeb38caf6d3c1d56fd5c48c90cd5642865163d80ddbe367f0b9cc4ddd18477b9f95d40ed733b9965cc42a9f16928774c490114ebd7
6
+ metadata.gz: 935d5797ac55f5b7b34046cbe4e485b4466e4e1273a33984541016f2f3741853089c36e72022e7bf975b3832d079c1c4a8c88937714a96a360369600a6e0ee37
7
+ data.tar.gz: c845cc44fdfc14433360015d501bbd4191c6c8804466f6841f51df7277df98c37c1c7e322411425408de3f19497db1f0202c3665fb8a2371ead1742e56dcf6a5
data/README.md CHANGED
@@ -36,17 +36,29 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
36
36
  <!-- This table is regenerated and resorted on each release -->
37
37
  <table id='team'>
38
38
  <tr>
39
- <td id='danielle-tomlinson'>
40
- <a href='https://github.com/endocrimes'>
41
- <img src='https://github.com/endocrimes.png' width='140px;'>
39
+ <td id='daniel-jankowski'>
40
+ <a href='https://github.com/mollyIV'>
41
+ <img src='https://github.com/mollyIV.png' width='140px;'>
42
42
  </a>
43
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
43
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
44
44
  </td>
45
- <td id='connor-tumbleson'>
46
- <a href='https://github.com/ibotpeaches'>
47
- <img src='https://github.com/ibotpeaches.png' width='140px;'>
45
+ <td id='stefan-natchev'>
46
+ <a href='https://github.com/snatchev'>
47
+ <img src='https://github.com/snatchev.png' width='140px;'>
48
48
  </a>
49
- <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
49
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
50
+ </td>
51
+ <td id='fumiya-nakamura'>
52
+ <a href='https://github.com/nafu'>
53
+ <img src='https://github.com/nafu.png' width='140px;'>
54
+ </a>
55
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
56
+ </td>
57
+ <td id='max-ott'>
58
+ <a href='https://github.com/max-ott'>
59
+ <img src='https://github.com/max-ott.png' width='140px;'>
60
+ </a>
61
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
50
62
  </td>
51
63
  <td id='luka-mirosevic'>
52
64
  <a href='https://github.com/lmirosevic'>
@@ -54,31 +66,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
54
66
  </a>
55
67
  <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
56
68
  </td>
57
- <td id='iulian-onofrei'>
58
- <a href='https://github.com/revolter'>
59
- <img src='https://github.com/revolter.png' width='140px;'>
69
+ </tr>
70
+ <tr>
71
+ <td id='maksym-grebenets'>
72
+ <a href='https://github.com/mgrebenets'>
73
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
60
74
  </a>
61
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
75
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
62
76
  </td>
63
- <td id='fumiya-nakamura'>
64
- <a href='https://github.com/nafu'>
65
- <img src='https://github.com/nafu.png' width='140px;'>
77
+ <td id='olivier-halligon'>
78
+ <a href='https://github.com/AliSoftware'>
79
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
66
80
  </a>
67
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
81
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
68
82
  </td>
69
- </tr>
70
- <tr>
71
- <td id='jérôme-lacoste'>
72
- <a href='https://github.com/lacostej'>
73
- <img src='https://github.com/lacostej.png' width='140px;'>
83
+ <td id='connor-tumbleson'>
84
+ <a href='https://github.com/ibotpeaches'>
85
+ <img src='https://github.com/ibotpeaches.png' width='140px;'>
74
86
  </a>
75
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
87
+ <h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
76
88
  </td>
77
- <td id='aaron-brager'>
78
- <a href='https://github.com/getaaron'>
79
- <img src='https://github.com/getaaron.png' width='140px;'>
89
+ <td id='satoshi-namai'>
90
+ <a href='https://github.com/ainame'>
91
+ <img src='https://github.com/ainame.png' width='140px;'>
80
92
  </a>
81
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
93
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
82
94
  </td>
83
95
  <td id='jimmy-dee'>
84
96
  <a href='https://github.com/jdee'>
@@ -86,31 +98,57 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
86
98
  </a>
87
99
  <h4 align='center'>Jimmy Dee</h4>
88
100
  </td>
89
- <td id='roger-oba'>
90
- <a href='https://github.com/rogerluan'>
91
- <img src='https://github.com/rogerluan.png' width='140px;'>
101
+ </tr>
102
+ <tr>
103
+ <td id='helmut-januschka'>
104
+ <a href='https://github.com/hjanuschka'>
105
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
92
106
  </a>
93
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
107
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
108
+ </td>
109
+ <td id='łukasz-grabowski'>
110
+ <a href='https://github.com/lucgrabowski'>
111
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
112
+ </a>
113
+ <h4 align='center'>Łukasz Grabowski</h4>
114
+ </td>
115
+ <td id='jorge-revuelta-h'>
116
+ <a href='https://github.com/minuscorp'>
117
+ <img src='https://github.com/minuscorp.png' width='140px;'>
118
+ </a>
119
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
120
+ </td>
121
+ <td id='felix-krause'>
122
+ <a href='https://github.com/KrauseFx'>
123
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
124
+ </a>
125
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
126
+ </td>
127
+ <td id='danielle-tomlinson'>
128
+ <a href='https://github.com/endocrimes'>
129
+ <img src='https://github.com/endocrimes.png' width='140px;'>
130
+ </a>
131
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
94
132
  </td>
133
+ </tr>
134
+ <tr>
95
135
  <td id='matthew-ellis'>
96
136
  <a href='https://github.com/matthewellis'>
97
137
  <img src='https://github.com/matthewellis.png' width='140px;'>
98
138
  </a>
99
139
  <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
100
140
  </td>
101
- </tr>
102
- <tr>
103
- <td id='max-ott'>
104
- <a href='https://github.com/max-ott'>
105
- <img src='https://github.com/max-ott.png' width='140px;'>
141
+ <td id='aaron-brager'>
142
+ <a href='https://github.com/getaaron'>
143
+ <img src='https://github.com/getaaron.png' width='140px;'>
106
144
  </a>
107
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
145
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
108
146
  </td>
109
- <td id='daniel-jankowski'>
110
- <a href='https://github.com/mollyIV'>
111
- <img src='https://github.com/mollyIV.png' width='140px;'>
147
+ <td id='roger-oba'>
148
+ <a href='https://github.com/rogerluan'>
149
+ <img src='https://github.com/rogerluan.png' width='140px;'>
112
150
  </a>
113
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
151
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
114
152
  </td>
115
153
  <td id='manish-rathi'>
116
154
  <a href='https://github.com/crazymanish'>
@@ -118,76 +156,38 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
118
156
  </a>
119
157
  <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
120
158
  </td>
121
- <td id='manu-wallner'>
122
- <a href='https://github.com/milch'>
123
- <img src='https://github.com/milch.png' width='140px;'>
124
- </a>
125
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
126
- </td>
127
- <td id='satoshi-namai'>
128
- <a href='https://github.com/ainame'>
129
- <img src='https://github.com/ainame.png' width='140px;'>
159
+ <td id='jérôme-lacoste'>
160
+ <a href='https://github.com/lacostej'>
161
+ <img src='https://github.com/lacostej.png' width='140px;'>
130
162
  </a>
131
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
163
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
132
164
  </td>
133
165
  </tr>
134
166
  <tr>
135
- <td id='maksym-grebenets'>
136
- <a href='https://github.com/mgrebenets'>
137
- <img src='https://github.com/mgrebenets.png' width='140px;'>
138
- </a>
139
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
140
- </td>
141
- <td id='olivier-halligon'>
142
- <a href='https://github.com/AliSoftware'>
143
- <img src='https://github.com/AliSoftware.png' width='140px;'>
144
- </a>
145
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
146
- </td>
147
167
  <td id='josh-holtz'>
148
168
  <a href='https://github.com/joshdholtz'>
149
169
  <img src='https://github.com/joshdholtz.png' width='140px;'>
150
170
  </a>
151
171
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
152
172
  </td>
153
- <td id='jan-piotrowski'>
154
- <a href='https://github.com/janpio'>
155
- <img src='https://github.com/janpio.png' width='140px;'>
173
+ <td id='manu-wallner'>
174
+ <a href='https://github.com/milch'>
175
+ <img src='https://github.com/milch.png' width='140px;'>
156
176
  </a>
157
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
177
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
158
178
  </td>
159
- <td id='felix-krause'>
160
- <a href='https://github.com/KrauseFx'>
161
- <img src='https://github.com/KrauseFx.png' width='140px;'>
179
+ <td id='andrew-mcburney'>
180
+ <a href='https://github.com/armcburney'>
181
+ <img src='https://github.com/armcburney.png' width='140px;'>
162
182
  </a>
163
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
183
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
164
184
  </td>
165
- </tr>
166
- <tr>
167
185
  <td id='joshua-liebowitz'>
168
186
  <a href='https://github.com/taquitos'>
169
187
  <img src='https://github.com/taquitos.png' width='140px;'>
170
188
  </a>
171
189
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
172
190
  </td>
173
- <td id='łukasz-grabowski'>
174
- <a href='https://github.com/lucgrabowski'>
175
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
176
- </a>
177
- <h4 align='center'>Łukasz Grabowski</h4>
178
- </td>
179
- <td id='helmut-januschka'>
180
- <a href='https://github.com/hjanuschka'>
181
- <img src='https://github.com/hjanuschka.png' width='140px;'>
182
- </a>
183
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
184
- </td>
185
- <td id='stefan-natchev'>
186
- <a href='https://github.com/snatchev'>
187
- <img src='https://github.com/snatchev.png' width='140px;'>
188
- </a>
189
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
190
- </td>
191
191
  <td id='kohki-miki'>
192
192
  <a href='https://github.com/giginet'>
193
193
  <img src='https://github.com/giginet.png' width='140px;'>
@@ -196,17 +196,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
196
196
  </td>
197
197
  </tr>
198
198
  <tr>
199
- <td id='jorge-revuelta-h'>
200
- <a href='https://github.com/minuscorp'>
201
- <img src='https://github.com/minuscorp.png' width='140px;'>
199
+ <td id='jan-piotrowski'>
200
+ <a href='https://github.com/janpio'>
201
+ <img src='https://github.com/janpio.png' width='140px;'>
202
202
  </a>
203
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
203
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
204
204
  </td>
205
- <td id='andrew-mcburney'>
206
- <a href='https://github.com/armcburney'>
207
- <img src='https://github.com/armcburney.png' width='140px;'>
205
+ <td id='iulian-onofrei'>
206
+ <a href='https://github.com/revolter'>
207
+ <img src='https://github.com/revolter.png' width='140px;'>
208
208
  </a>
209
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
209
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
210
210
  </td>
211
211
  </table>
212
212
 
@@ -50,8 +50,12 @@ module CredentialsManager
50
50
  end
51
51
 
52
52
  unless @password
53
- item = Security::InternetPassword.find(server: server_name)
54
- @password ||= item.password if item
53
+ begin
54
+ item = Security::InternetPassword.find(server: server_name)
55
+ @password ||= item.password if item
56
+ rescue Security::Error => ex
57
+ puts("Could not read the Keychain entry for user '#{user}': #{ex.message}".yellow)
58
+ end
55
59
  end
56
60
  ask_for_login while ask_if_missing && @password.to_s.length == 0
57
61
  return @password
@@ -83,7 +83,9 @@ module Deliver
83
83
  if options[:ipa]
84
84
  options[:platform] ||= FastlaneCore::IpaFileAnalyser.fetch_app_platform(options[:ipa])
85
85
  elsif options[:pkg]
86
- options[:platform] = 'osx'
86
+ # :pkg defaults to any *.pkg in the current directory, so only infer
87
+ # osx from it when the user hasn't chosen a platform themselves
88
+ options[:platform] = 'osx' unless options.specified?(:platform)
87
89
  end
88
90
  end
89
91
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.240.0'.freeze
2
+ VERSION = '2.240.1'.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.240.0
20
+ // Generated with fastlane 2.240.1
@@ -539,4 +539,4 @@ public extension DeliverfileProtocol {
539
539
 
540
540
  // Please don't remove the lines below
541
541
  // They are used to detect outdated files
542
- // FastlaneRunnerAPIVersion [0.9.154]
542
+ // FastlaneRunnerAPIVersion [0.9.155]
@@ -14215,4 +14215,4 @@ public let snapshotfile: Snapshotfile = .init()
14215
14215
 
14216
14216
  // Please don't remove the lines below
14217
14217
  // They are used to detect outdated files
14218
- // FastlaneRunnerAPIVersion [0.9.207]
14218
+ // FastlaneRunnerAPIVersion [0.9.208]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.240.0
20
+ // Generated with fastlane 2.240.1
@@ -399,4 +399,4 @@ public extension GymfileProtocol {
399
399
 
400
400
  // Please don't remove the lines below
401
401
  // They are used to detect outdated files
402
- // FastlaneRunnerAPIVersion [0.9.157]
402
+ // FastlaneRunnerAPIVersion [0.9.158]
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.240.0
20
+ // Generated with fastlane 2.240.1
@@ -413,4 +413,4 @@ public extension MatchfileProtocol {
413
413
 
414
414
  // Please don't remove the lines below
415
415
  // They are used to detect outdated files
416
- // FastlaneRunnerAPIVersion [0.9.151]
416
+ // FastlaneRunnerAPIVersion [0.9.152]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.240.0
20
+ // Generated with fastlane 2.240.1
@@ -84,4 +84,4 @@ public extension PrecheckfileProtocol {
84
84
 
85
85
  // Please don't remove the lines below
86
86
  // They are used to detect outdated files
87
- // FastlaneRunnerAPIVersion [0.9.150]
87
+ // FastlaneRunnerAPIVersion [0.9.151]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.240.0
20
+ // Generated with fastlane 2.240.1
@@ -588,4 +588,4 @@ public extension ScanfileProtocol {
588
588
 
589
589
  // Please don't remove the lines below
590
590
  // They are used to detect outdated files
591
- // FastlaneRunnerAPIVersion [0.9.162]
591
+ // FastlaneRunnerAPIVersion [0.9.163]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.240.0
20
+ // Generated with fastlane 2.240.1
@@ -161,4 +161,4 @@ public extension ScreengrabfileProtocol {
161
161
 
162
162
  // Please don't remove the lines below
163
163
  // They are used to detect outdated files
164
- // FastlaneRunnerAPIVersion [0.9.152]
164
+ // FastlaneRunnerAPIVersion [0.9.153]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.240.0
20
+ // Generated with fastlane 2.240.1
@@ -385,4 +385,4 @@ public extension SnapshotfileProtocol {
385
385
 
386
386
  // Please don't remove the lines below
387
387
  // They are used to detect outdated files
388
- // FastlaneRunnerAPIVersion [0.9.146]
388
+ // FastlaneRunnerAPIVersion [0.9.147]
@@ -267,6 +267,18 @@ module FastlaneCore
267
267
  end
268
268
  # rubocop:enable Metrics/PerceivedComplexity
269
269
 
270
+ # Returns true if the value for a certain key comes from one of the sources `fetch` checks
271
+ # before falling back to the default value: passed in, an environment variable or the config file
272
+ def specified?(key)
273
+ UI.crash!("Key '#{key}' must be a symbol. Example :#{key}") unless key.kind_of?(Symbol)
274
+
275
+ option = verify_options_key!(key)
276
+
277
+ !@values[key].nil? ||
278
+ !option.fetch_env_value.nil? ||
279
+ self.config_file_options.key?(key)
280
+ end
281
+
270
282
  # Overwrites or sets a new value for a given key
271
283
  # @param key [Symbol] Must be a symbol
272
284
  def set(key, value)
@@ -98,7 +98,13 @@ module FastlaneCore
98
98
  server = server_name(keychain_name)
99
99
 
100
100
  # Attempt to find password in keychain for keychain
101
- item = Security::InternetPassword.find(server: server)
101
+ begin
102
+ item = Security::InternetPassword.find(server: server)
103
+ rescue Security::Error => ex
104
+ UI.important("Could not read the keychain item #{server}: #{ex.message}")
105
+ item = nil
106
+ end
107
+
102
108
  if item
103
109
  keychain_password = item.password
104
110
  UI.important("Using keychain password from keychain item #{server} in #{keychain_path}")
@@ -93,8 +93,12 @@ module Match
93
93
  def fetch_password!
94
94
  password = ENV["MATCH_PASSWORD"]
95
95
  unless password
96
- item = Security::InternetPassword.find(server: server_name(self.keychain_name))
97
- password = item.password if item
96
+ begin
97
+ item = Security::InternetPassword.find(server: server_name(self.keychain_name))
98
+ password = item.password if item
99
+ rescue Security::Error => ex
100
+ UI.important("Could not read the local keychain: #{ex.message}")
101
+ end
98
102
  end
99
103
 
100
104
  unless password
@@ -24,6 +24,8 @@ module Match
24
24
 
25
25
  attr_accessor :storage
26
26
 
27
+ attr_accessor :encryption
28
+
27
29
  attr_accessor :cache
28
30
 
29
31
  # rubocop:disable Metrics/PerceivedComplexity
@@ -45,14 +47,14 @@ module Match
45
47
  storage.download
46
48
 
47
49
  # Init the encryption only after the `storage.download` was called to have the right working directory
48
- encryption = Encryption.for_storage_mode(params[:storage_mode], {
50
+ self.encryption = Encryption.for_storage_mode(params[:storage_mode], {
49
51
  git_url: params[:git_url],
50
52
  s3_bucket: params[:s3_bucket],
51
53
  s3_skip_encryption: params[:s3_skip_encryption],
52
54
  working_directory: storage.working_directory,
53
55
  force_legacy_encryption: params[:force_legacy_encryption]
54
56
  })
55
- encryption.decrypt_files if encryption
57
+ self.encryption.decrypt_files if self.encryption
56
58
 
57
59
  unless params[:readonly]
58
60
  self.spaceship = SpaceshipEnsure.new(params[:username], params[:team_id], params[:team_name], api_token(params))
@@ -117,7 +119,7 @@ module Match
117
119
 
118
120
  has_file_changes = self.files_to_commit.count > 0 || self.files_to_delete.count > 0
119
121
  if has_file_changes && !params[:readonly]
120
- encryption.encrypt_files if encryption
122
+ self.encryption.encrypt_files if self.encryption
121
123
  storage.save_changes!(files_to_commit: self.files_to_commit, files_to_delete: self.files_to_delete)
122
124
  end
123
125
 
@@ -209,6 +211,10 @@ module Match
209
211
  self.files_to_commit << cert_path
210
212
  self.files_to_commit << private_key_path
211
213
 
214
+ # We pause to upload certs immediatly (or renewals) in case later logic fails, leaving
215
+ # AppStore with a set of files de-synced from match storage. See fastlane/fastlane#30140
216
+ save_changes_immediately!(params)
217
+
212
218
  # Reset certificates cache since we have a new cert.
213
219
  self.cache.reset_certificates
214
220
  else
@@ -255,6 +261,27 @@ module Match
255
261
  return File.basename(cert_path).gsub(".cer", "") # Certificate ID
256
262
  end
257
263
 
264
+ # Saves all pending file changes to storage right away, keeping the
265
+ # working directory around so the current run can continue using it
266
+ def save_changes_immediately!(params)
267
+ return if params[:readonly]
268
+ return if self.files_to_commit.empty? && self.files_to_delete.empty?
269
+
270
+ self.encryption.encrypt_files if self.encryption
271
+ begin
272
+ self.storage.save_changes!(files_to_commit: self.files_to_commit,
273
+ files_to_delete: self.files_to_delete,
274
+ clear_working_directory: false)
275
+ ensure
276
+ # Always hand back a decrypted working directory, 2nd upload will hopefully work.
277
+ self.encryption.decrypt_files if self.encryption
278
+ end
279
+
280
+ # We may have another upload at end (profiles) so reset our cert file(s).
281
+ self.files_to_commit = []
282
+ self.files_to_delete = []
283
+ end
284
+
258
285
  # @return [String] Path to certificate or P12 key
259
286
  def select_cert_or_key(paths:, certificate_id: nil)
260
287
  return paths.last if certificate_id.to_s.strip.empty?
@@ -47,11 +47,14 @@ module Match
47
47
  # given remote server
48
48
  # This method is blocking, meaning it might take multiple
49
49
  # seconds or longer to run
50
- # @parameter files_to_commit [Array] Array to paths to files
50
+ # @param files_to_commit [Array] Array to paths to files
51
51
  # that should be committed to the storage provider
52
- # @parameter custom_message: [String] Custom change message
53
- # that's optional, is used for commit title
54
- def save_changes!(files_to_commit: nil, files_to_delete: nil, custom_message: nil)
52
+ # @param custom_message: [String] Custom change message
53
+ # that's optional, is used for commit title
54
+ # @param clear_working_directory: [Bool] Pass `false` to keep
55
+ # the local working directory after saving, so more
56
+ # changes can be made and saved later in the same run
57
+ def save_changes!(files_to_commit: nil, files_to_delete: nil, custom_message: nil, clear_working_directory: true)
55
58
  # Custom init to `[]` in case `nil` is passed
56
59
  files_to_commit ||= []
57
60
  files_to_delete ||= []
@@ -85,7 +88,7 @@ module Match
85
88
  end
86
89
  end
87
90
  ensure # Always clear working_directory after save
88
- self.clear_changes
91
+ self.clear_changes if clear_working_directory
89
92
  end
90
93
 
91
94
  def upload_files(files_to_upload: [], custom_message: nil)
metadata CHANGED
@@ -1,36 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.240.0
4
+ version: 2.240.1
5
5
  platform: ruby
6
6
  authors:
7
- - Felix Krause
8
- - Łukasz Grabowski
9
- - Jorge Revuelta H
10
7
  - Helmut Januschka
11
- - Jérôme Lacoste
12
- - Iulian Onofrei
8
+ - Josh Holtz
9
+ - Danielle Tomlinson
13
10
  - Max Ott
11
+ - Stefan Natchev
12
+ - Fumiya Nakamura
13
+ - Luka Mirosevic
14
+ - Iulian Onofrei
15
+ - Joshua Liebowitz
16
+ - Andrew McBurney
17
+ - Olivier Halligon
18
+ - Daniel Jankowski
19
+ - Felix Krause
20
+ - Matthew Ellis
21
+ - Jérôme Lacoste
14
22
  - Manish Rathi
15
- - Connor Tumbleson
16
- - Danielle Tomlinson
23
+ - Roger Oba
17
24
  - Satoshi Namai
18
- - Daniel Jankowski
25
+ - Łukasz Grabowski
19
26
  - Manu Wallner
20
27
  - Kohki Miki
21
- - Matthew Ellis
22
- - Josh Holtz
23
- - Andrew McBurney
28
+ - Aaron Brager
24
29
  - Jimmy Dee
25
- - Jan Piotrowski
26
- - Roger Oba
27
30
  - Maksym Grebenets
28
- - Fumiya Nakamura
29
- - Aaron Brager
30
- - Olivier Halligon
31
- - Joshua Liebowitz
32
- - Luka Mirosevic
33
- - Stefan Natchev
31
+ - Jorge Revuelta H
32
+ - Jan Piotrowski
33
+ - Connor Tumbleson
34
34
  bindir: bin
35
35
  cert_chain: []
36
36
  date: 1980-01-02 00:00:00.000000000 Z
@@ -361,14 +361,14 @@ dependencies:
361
361
  requirements:
362
362
  - - "~>"
363
363
  - !ruby/object:Gem::Version
364
- version: 0.99.0
364
+ version: '0.99'
365
365
  type: :runtime
366
366
  prerelease: false
367
367
  version_requirements: !ruby/object:Gem::Requirement
368
368
  requirements:
369
369
  - - "~>"
370
370
  - !ruby/object:Gem::Version
371
- version: 0.99.0
371
+ version: '0.99'
372
372
  - !ruby/object:Gem::Dependency
373
373
  name: google-apis-playcustomapp_v1
374
374
  requirement: !ruby/object:Gem::Requirement
@@ -597,16 +597,16 @@ dependencies:
597
597
  name: security
598
598
  requirement: !ruby/object:Gem::Requirement
599
599
  requirements:
600
- - - '='
600
+ - - "~>"
601
601
  - !ruby/object:Gem::Version
602
- version: 0.2.0
602
+ version: '0.3'
603
603
  type: :runtime
604
604
  prerelease: false
605
605
  version_requirements: !ruby/object:Gem::Requirement
606
606
  requirements:
607
- - - '='
607
+ - - "~>"
608
608
  - !ruby/object:Gem::Version
609
- version: 0.2.0
609
+ version: '0.3'
610
610
  - !ruby/object:Gem::Dependency
611
611
  name: simctl
612
612
  requirement: !ruby/object:Gem::Requirement
@@ -867,6 +867,20 @@ dependencies:
867
867
  - - "<"
868
868
  - !ruby/object:Gem::Version
869
869
  version: '2.0'
870
+ - !ruby/object:Gem::Dependency
871
+ name: cgi
872
+ requirement: !ruby/object:Gem::Requirement
873
+ requirements:
874
+ - - "~>"
875
+ - !ruby/object:Gem::Version
876
+ version: '0.4'
877
+ type: :runtime
878
+ prerelease: false
879
+ version_requirements: !ruby/object:Gem::Requirement
880
+ requirements:
881
+ - - "~>"
882
+ - !ruby/object:Gem::Version
883
+ version: '0.4'
870
884
  - !ruby/object:Gem::Dependency
871
885
  name: benchmark
872
886
  requirement: !ruby/object:Gem::Requirement