fastlane 2.238.0 → 2.239.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.
- checksums.yaml +4 -4
- data/README.md +96 -96
- data/bin/fastlane +2 -2
- data/deliver/lib/deliver/html_generator.rb +1 -1
- data/deliver/lib/deliver/options.rb +8 -0
- data/deliver/lib/deliver/upload_metadata.rb +22 -0
- data/deliver/lib/deliver/upload_screenshots.rb +12 -4
- data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +7 -2
- data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +6 -0
- data/fastlane/lib/fastlane/helper/git_helper.rb +4 -2
- data/fastlane/lib/fastlane/helper/sh_helper.rb +9 -1
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +8 -1
- data/fastlane/swift/Fastlane.swift +38 -2
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/match/lib/match/nuke.rb +2 -2
- data/match/lib/match/storage/git_storage.rb +1 -4
- data/match/lib/match/storage/google_cloud_storage.rb +6 -1
- data/pem/lib/pem/manager.rb +5 -1
- data/pem/lib/pem/options.rb +6 -0
- data/pilot/lib/pilot/build_manager.rb +32 -0
- data/pilot/lib/pilot/options.rb +8 -0
- data/sigh/lib/assets/resign.sh +21 -9
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +16 -0
- data/spaceship/lib/spaceship/connect_api/models/routing_app_coverage.rb +75 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +45 -0
- data/spaceship/lib/spaceship/connect_api.rb +1 -0
- data/supply/lib/supply/client.rb +6 -0
- data/supply/lib/supply/reader.rb +15 -0
- metadata +26 -42
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bc5b46c829520975d6ad2871bf94e7bc3df0f4d2863dcbed323e2b22c2205931
|
|
4
|
+
data.tar.gz: 98f468374c8356ba200173ef637157a9e33747d4a46f3b89b70d4bc407367c47
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c03a7a56e6229a7c03f053340e74c8f146c1e4b0149dc0523d75370fa5d755f77c571e0c7a974c955c42fab6fd8d1668823dde0cd031a573e2b1340105c76f69
|
|
7
|
+
data.tar.gz: bc86b7ea3505cf0fd59c0d22ab2ae3324f16b77170abfa4fffcae1cce948d561ea4c436b92cca599d67838e3d6ab59328e42a418be04f4abef90a1d9378b5a26
|
data/README.md
CHANGED
|
@@ -36,23 +36,17 @@ 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='iulian-onofrei'>
|
|
40
|
-
<a href='https://github.com/revolter'>
|
|
41
|
-
<img src='https://github.com/revolter.png' width='140px;'>
|
|
42
|
-
</a>
|
|
43
|
-
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
44
|
-
</td>
|
|
45
39
|
<td id='helmut-januschka'>
|
|
46
40
|
<a href='https://github.com/hjanuschka'>
|
|
47
41
|
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
|
48
42
|
</a>
|
|
49
43
|
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
50
44
|
</td>
|
|
51
|
-
<td id='
|
|
52
|
-
<a href='https://github.com/
|
|
53
|
-
<img src='https://github.com/
|
|
45
|
+
<td id='josh-holtz'>
|
|
46
|
+
<a href='https://github.com/joshdholtz'>
|
|
47
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
|
54
48
|
</a>
|
|
55
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
49
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
56
50
|
</td>
|
|
57
51
|
<td id='felix-krause'>
|
|
58
52
|
<a href='https://github.com/KrauseFx'>
|
|
@@ -60,75 +54,81 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
60
54
|
</a>
|
|
61
55
|
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
62
56
|
</td>
|
|
63
|
-
<td id='
|
|
64
|
-
<a href='https://github.com/
|
|
65
|
-
<img src='https://github.com/
|
|
57
|
+
<td id='kohki-miki'>
|
|
58
|
+
<a href='https://github.com/giginet'>
|
|
59
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
|
66
60
|
</a>
|
|
67
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
61
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
62
|
+
</td>
|
|
63
|
+
<td id='andrew-mcburney'>
|
|
64
|
+
<a href='https://github.com/armcburney'>
|
|
65
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
|
66
|
+
</a>
|
|
67
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
68
68
|
</td>
|
|
69
69
|
</tr>
|
|
70
70
|
<tr>
|
|
71
|
-
<td id='
|
|
72
|
-
<a href='https://github.com/
|
|
73
|
-
<img src='https://github.com/
|
|
71
|
+
<td id='roger-oba'>
|
|
72
|
+
<a href='https://github.com/rogerluan'>
|
|
73
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
|
74
74
|
</a>
|
|
75
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
75
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
|
76
76
|
</td>
|
|
77
|
-
<td id='
|
|
78
|
-
<a href='https://github.com/
|
|
79
|
-
<img src='https://github.com/
|
|
77
|
+
<td id='max-ott'>
|
|
78
|
+
<a href='https://github.com/max-ott'>
|
|
79
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
|
80
80
|
</a>
|
|
81
|
-
<h4 align='center'
|
|
81
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
82
82
|
</td>
|
|
83
|
-
<td id='
|
|
84
|
-
<a href='https://github.com/
|
|
85
|
-
<img src='https://github.com/
|
|
83
|
+
<td id='aaron-brager'>
|
|
84
|
+
<a href='https://github.com/getaaron'>
|
|
85
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
|
86
86
|
</a>
|
|
87
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
87
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
88
88
|
</td>
|
|
89
|
-
<td id='
|
|
90
|
-
<a href='https://github.com/
|
|
91
|
-
<img src='https://github.com/
|
|
89
|
+
<td id='matthew-ellis'>
|
|
90
|
+
<a href='https://github.com/matthewellis'>
|
|
91
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
|
92
92
|
</a>
|
|
93
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
93
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
94
94
|
</td>
|
|
95
|
-
<td id='
|
|
96
|
-
<a href='https://github.com/
|
|
97
|
-
<img src='https://github.com/
|
|
95
|
+
<td id='iulian-onofrei'>
|
|
96
|
+
<a href='https://github.com/revolter'>
|
|
97
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
|
98
98
|
</a>
|
|
99
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
99
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
100
100
|
</td>
|
|
101
101
|
</tr>
|
|
102
102
|
<tr>
|
|
103
|
+
<td id='danielle-tomlinson'>
|
|
104
|
+
<a href='https://github.com/endocrimes'>
|
|
105
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
|
106
|
+
</a>
|
|
107
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
108
|
+
</td>
|
|
103
109
|
<td id='fumiya-nakamura'>
|
|
104
110
|
<a href='https://github.com/nafu'>
|
|
105
111
|
<img src='https://github.com/nafu.png' width='140px;'>
|
|
106
112
|
</a>
|
|
107
113
|
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
108
114
|
</td>
|
|
109
|
-
<td id='
|
|
110
|
-
<a href='https://github.com/
|
|
111
|
-
<img src='https://github.com/
|
|
112
|
-
</a>
|
|
113
|
-
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
114
|
-
</td>
|
|
115
|
-
<td id='maksym-grebenets'>
|
|
116
|
-
<a href='https://github.com/mgrebenets'>
|
|
117
|
-
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
|
115
|
+
<td id='olivier-halligon'>
|
|
116
|
+
<a href='https://github.com/AliSoftware'>
|
|
117
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
|
118
118
|
</a>
|
|
119
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
119
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
120
120
|
</td>
|
|
121
|
-
<td id='
|
|
122
|
-
<a href='https://github.com/
|
|
123
|
-
<img src='https://github.com/
|
|
121
|
+
<td id='jérôme-lacoste'>
|
|
122
|
+
<a href='https://github.com/lacostej'>
|
|
123
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
|
124
124
|
</a>
|
|
125
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
125
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
126
126
|
</td>
|
|
127
|
-
<td id='
|
|
128
|
-
<a href='https://github.com/
|
|
129
|
-
<img src='https://github.com/
|
|
127
|
+
<td id='manu-wallner'>
|
|
128
|
+
<a href='https://github.com/milch'>
|
|
129
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
|
130
130
|
</a>
|
|
131
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
131
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
132
132
|
</td>
|
|
133
133
|
</tr>
|
|
134
134
|
<tr>
|
|
@@ -138,75 +138,75 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
138
138
|
</a>
|
|
139
139
|
<h4 align='center'>Jimmy Dee</h4>
|
|
140
140
|
</td>
|
|
141
|
-
<td id='
|
|
142
|
-
<a href='https://github.com/
|
|
143
|
-
<img src='https://github.com/
|
|
141
|
+
<td id='satoshi-namai'>
|
|
142
|
+
<a href='https://github.com/ainame'>
|
|
143
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
|
144
144
|
</a>
|
|
145
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
145
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
|
146
146
|
</td>
|
|
147
|
-
<td id='
|
|
148
|
-
<a href='https://github.com/
|
|
149
|
-
<img src='https://github.com/
|
|
147
|
+
<td id='łukasz-grabowski'>
|
|
148
|
+
<a href='https://github.com/lucgrabowski'>
|
|
149
|
+
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
|
150
150
|
</a>
|
|
151
|
-
<h4 align='center'
|
|
151
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
|
152
152
|
</td>
|
|
153
|
-
<td id='
|
|
154
|
-
<a href='https://github.com/
|
|
155
|
-
<img src='https://github.com/
|
|
153
|
+
<td id='stefan-natchev'>
|
|
154
|
+
<a href='https://github.com/snatchev'>
|
|
155
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
|
156
156
|
</a>
|
|
157
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
157
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
158
158
|
</td>
|
|
159
|
-
<td id='
|
|
160
|
-
<a href='https://github.com/
|
|
161
|
-
<img src='https://github.com/
|
|
159
|
+
<td id='manish-rathi'>
|
|
160
|
+
<a href='https://github.com/crazymanish'>
|
|
161
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
|
162
162
|
</a>
|
|
163
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
163
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
164
164
|
</td>
|
|
165
165
|
</tr>
|
|
166
166
|
<tr>
|
|
167
|
-
<td id='
|
|
168
|
-
<a href='https://github.com/
|
|
169
|
-
<img src='https://github.com/
|
|
167
|
+
<td id='joshua-liebowitz'>
|
|
168
|
+
<a href='https://github.com/taquitos'>
|
|
169
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
|
170
170
|
</a>
|
|
171
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
171
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
172
172
|
</td>
|
|
173
|
-
<td id='
|
|
174
|
-
<a href='https://github.com/
|
|
175
|
-
<img src='https://github.com/
|
|
173
|
+
<td id='daniel-jankowski'>
|
|
174
|
+
<a href='https://github.com/mollyIV'>
|
|
175
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
|
176
176
|
</a>
|
|
177
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
177
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
178
178
|
</td>
|
|
179
|
-
<td id='
|
|
180
|
-
<a href='https://github.com/
|
|
181
|
-
<img src='https://github.com/
|
|
179
|
+
<td id='jorge-revuelta-h'>
|
|
180
|
+
<a href='https://github.com/minuscorp'>
|
|
181
|
+
<img src='https://github.com/minuscorp.png' width='140px;'>
|
|
182
182
|
</a>
|
|
183
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
183
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
184
184
|
</td>
|
|
185
|
-
<td id='
|
|
186
|
-
<a href='https://github.com/
|
|
187
|
-
<img src='https://github.com/
|
|
185
|
+
<td id='jan-piotrowski'>
|
|
186
|
+
<a href='https://github.com/janpio'>
|
|
187
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
|
188
188
|
</a>
|
|
189
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
189
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
190
190
|
</td>
|
|
191
|
-
<td id='
|
|
192
|
-
<a href='https://github.com/
|
|
193
|
-
<img src='https://github.com/
|
|
191
|
+
<td id='connor-tumbleson'>
|
|
192
|
+
<a href='https://github.com/ibotpeaches'>
|
|
193
|
+
<img src='https://github.com/ibotpeaches.png' width='140px;'>
|
|
194
194
|
</a>
|
|
195
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
195
|
+
<h4 align='center'><a href='https://twitter.com/ibotpeaches'>Connor Tumbleson</a></h4>
|
|
196
196
|
</td>
|
|
197
197
|
</tr>
|
|
198
198
|
<tr>
|
|
199
|
-
<td id='
|
|
200
|
-
<a href='https://github.com/
|
|
201
|
-
<img src='https://github.com/
|
|
199
|
+
<td id='maksym-grebenets'>
|
|
200
|
+
<a href='https://github.com/mgrebenets'>
|
|
201
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
|
202
202
|
</a>
|
|
203
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
203
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
204
204
|
</td>
|
|
205
|
-
<td id='
|
|
206
|
-
<a href='https://github.com/
|
|
207
|
-
<img src='https://github.com/
|
|
205
|
+
<td id='luka-mirosevic'>
|
|
206
|
+
<a href='https://github.com/lmirosevic'>
|
|
207
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
|
208
208
|
</a>
|
|
209
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
209
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
210
210
|
</td>
|
|
211
211
|
</table>
|
|
212
212
|
|
data/bin/fastlane
CHANGED
|
@@ -24,7 +24,7 @@ module Deliver
|
|
|
24
24
|
UI.important("Verifying the upload via the HTML file can be disabled by either adding")
|
|
25
25
|
UI.important("`force true` to your Deliverfile or using `fastlane deliver --force`")
|
|
26
26
|
|
|
27
|
-
system("open
|
|
27
|
+
system("open", html_path)
|
|
28
28
|
okay = UI.confirm("Does the Preview on path '#{html_path}' look okay for you?")
|
|
29
29
|
|
|
30
30
|
if okay
|
|
@@ -420,6 +420,14 @@ module Deliver
|
|
|
420
420
|
env_name: "DELIVER_APP_REVIEW_ATTACHMENT_FILE",
|
|
421
421
|
description: "Metadata: Path to the app review attachment file",
|
|
422
422
|
optional: true),
|
|
423
|
+
FastlaneCore::ConfigItem.new(key: :routing_app_coverage_file,
|
|
424
|
+
env_name: "DELIVER_ROUTING_APP_COVERAGE_FILE",
|
|
425
|
+
description: "Metadata: Path to the routing app coverage file (`.geojson`) that is required for routing apps",
|
|
426
|
+
optional: true,
|
|
427
|
+
verify_block: proc do |value|
|
|
428
|
+
UI.user_error!("Could not find routing app coverage file at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
|
429
|
+
UI.user_error!("Routing app coverage file must be a .geojson file") unless File.extname(value).casecmp(".geojson").zero?
|
|
430
|
+
end),
|
|
423
431
|
# Localised
|
|
424
432
|
FastlaneCore::ConfigItem.new(key: :description,
|
|
425
433
|
description: "Metadata: The localised app description",
|
|
@@ -357,6 +357,7 @@ module Deliver
|
|
|
357
357
|
review_information(version)
|
|
358
358
|
app_clip_review_information(version)
|
|
359
359
|
review_attachment_file(version)
|
|
360
|
+
routing_app_coverage_file(version)
|
|
360
361
|
app_rating(app_info)
|
|
361
362
|
end
|
|
362
363
|
|
|
@@ -766,6 +767,27 @@ module Deliver
|
|
|
766
767
|
end
|
|
767
768
|
end
|
|
768
769
|
|
|
770
|
+
def routing_app_coverage_file(version)
|
|
771
|
+
# Skip logic entirely if no coverage file passed. So status-quo stays the same.
|
|
772
|
+
return unless options[:routing_app_coverage_file]
|
|
773
|
+
|
|
774
|
+
routing_app_coverage =
|
|
775
|
+
begin
|
|
776
|
+
version.fetch_routing_app_coverage
|
|
777
|
+
rescue => error
|
|
778
|
+
UI.error("Error fetching routing app coverage - #{error.message}")
|
|
779
|
+
nil
|
|
780
|
+
end
|
|
781
|
+
|
|
782
|
+
if routing_app_coverage
|
|
783
|
+
UI.message("Removing previous routing app coverage file from App Store Connect")
|
|
784
|
+
routing_app_coverage.delete!
|
|
785
|
+
end
|
|
786
|
+
|
|
787
|
+
UI.message("Uploading routing app coverage file to App Store Connect")
|
|
788
|
+
version.upload_routing_app_coverage(path: options[:routing_app_coverage_file])
|
|
789
|
+
end
|
|
790
|
+
|
|
769
791
|
def app_rating(app_info)
|
|
770
792
|
return unless options[:app_rating_config_path]
|
|
771
793
|
|
|
@@ -171,13 +171,17 @@ module Deliver
|
|
|
171
171
|
def wait_for_complete(iterator, timeout_seconds)
|
|
172
172
|
start_time = Time.now
|
|
173
173
|
loop do
|
|
174
|
+
# App Store Connect publishes a screenshot's `sourceFileChecksum` asynchronously,
|
|
175
|
+
# shortly after its state becomes COMPLETE. (#30094)
|
|
176
|
+
number_of_screenshots_missing_checksum = 0
|
|
174
177
|
states = iterator.each_app_screenshot.map { |_, _, app_screenshot| app_screenshot }.each_with_object({}) do |app_screenshot, hash|
|
|
175
178
|
state = app_screenshot.asset_delivery_state['state']
|
|
176
179
|
hash[state] ||= 0
|
|
177
180
|
hash[state] += 1
|
|
181
|
+
number_of_screenshots_missing_checksum += 1 if state == 'COMPLETE' && app_screenshot.source_file_checksum.nil?
|
|
178
182
|
end
|
|
179
183
|
|
|
180
|
-
is_processing = states.fetch('UPLOAD_COMPLETE', 0) > 0
|
|
184
|
+
is_processing = states.fetch('UPLOAD_COMPLETE', 0) > 0 || number_of_screenshots_missing_checksum > 0
|
|
181
185
|
return states unless is_processing
|
|
182
186
|
|
|
183
187
|
if Time.now - start_time > timeout_seconds
|
|
@@ -185,7 +189,11 @@ module Deliver
|
|
|
185
189
|
return states
|
|
186
190
|
end
|
|
187
191
|
|
|
188
|
-
|
|
192
|
+
if number_of_screenshots_missing_checksum > 0
|
|
193
|
+
UI.verbose("There are still incomplete screenshots - #{states}, missing checksum: #{number_of_screenshots_missing_checksum}")
|
|
194
|
+
else
|
|
195
|
+
UI.verbose("There are still incomplete screenshots - #{states}")
|
|
196
|
+
end
|
|
189
197
|
sleep(5)
|
|
190
198
|
end
|
|
191
199
|
end
|
|
@@ -205,9 +213,9 @@ module Deliver
|
|
|
205
213
|
UI.user_error!("Failed verification of all screenshots uploaded... #{incomplete_screenshot_count} incomplete screenshot(s) still exist")
|
|
206
214
|
else
|
|
207
215
|
UI.error("Failed to upload all screenshots... Tries remaining: #{tries}")
|
|
208
|
-
# Delete bad entries before retry
|
|
216
|
+
# Delete bad entries before retry (not complete OR missing checksum)
|
|
209
217
|
iterator.each_app_screenshot do |_, _, app_screenshot|
|
|
210
|
-
app_screenshot.delete! unless app_screenshot.complete?
|
|
218
|
+
app_screenshot.delete! unless app_screenshot.complete? && !app_screenshot.source_file_checksum.nil?
|
|
211
219
|
end
|
|
212
220
|
upload_screenshots(localizations, screenshots_per_language, timeout_seconds, tries: tries)
|
|
213
221
|
end
|
|
@@ -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], params[:app_path])
|
|
40
|
+
changelog = Actions.git_log_last_commits(params[:pretty], params[:commits_count], params[:matching_pattern], 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], params[:app_path])
|
|
42
|
+
changelog = Actions.git_log_between(params[:pretty], from, to, params[:matching_pattern], 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
|
|
@@ -104,6 +104,10 @@ module Fastlane
|
|
|
104
104
|
description: 'The format applied to each commit while generating the collected value',
|
|
105
105
|
optional: true,
|
|
106
106
|
default_value: '%B'),
|
|
107
|
+
FastlaneCore::ConfigItem.new(key: :matching_pattern,
|
|
108
|
+
env_name: 'FL_CHANGELOG_FROM_GIT_COMMITS_MATCHING_PATTERN',
|
|
109
|
+
description: 'A regexp pattern to filter only the commits matching the pattern',
|
|
110
|
+
optional: true),
|
|
107
111
|
FastlaneCore::ConfigItem.new(key: :date_format,
|
|
108
112
|
env_name: 'FL_CHANGELOG_FROM_GIT_COMMITS_DATE_FORMAT',
|
|
109
113
|
description: 'The date format applied to each commit while generating the collected value',
|
|
@@ -179,6 +183,7 @@ module Fastlane
|
|
|
179
183
|
pretty: "- (%ae) %s", # Optional, lets you provide a custom format to apply to each commit when generating the changelog text
|
|
180
184
|
date_format: "short", # Optional, lets you provide an additional date format to dates within the pretty-formatted string
|
|
181
185
|
match_lightweight_tag: false, # Optional, lets you ignore lightweight (non-annotated) tags when searching for the last tag
|
|
186
|
+
matching_pattern: "[.*?].*", # Optional, lets you filter out commits not matching the regex pattern
|
|
182
187
|
merge_commit_filtering: "exclude_merges" # Optional, lets you filter out merge commits
|
|
183
188
|
)'
|
|
184
189
|
]
|
|
@@ -74,6 +74,12 @@ If you want to generate a Website Push certificate:
|
|
|
74
74
|
fastlane pem --website_push
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
+
If you want to generate a VoIP Services certificate (the type PushKit requires):
|
|
78
|
+
|
|
79
|
+
```no-highlight
|
|
80
|
+
fastlane pem --voip_push
|
|
81
|
+
```
|
|
82
|
+
|
|
77
83
|
Set a password for your `p12` file:
|
|
78
84
|
|
|
79
85
|
```no-highlight
|
|
@@ -9,9 +9,10 @@ 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, app_path)
|
|
12
|
+
def self.git_log_between(pretty_format, from, to, matching_pattern, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
|
|
13
13
|
command = %w(git log)
|
|
14
14
|
command << "--pretty=#{pretty_format}"
|
|
15
|
+
command << "--grep=#{matching_pattern}" if matching_pattern
|
|
15
16
|
command << "--date=#{date_format}" if date_format
|
|
16
17
|
command << '--ancestry-path' if ancestry_path
|
|
17
18
|
command << "#{from}...#{to}"
|
|
@@ -24,9 +25,10 @@ module Fastlane
|
|
|
24
25
|
nil
|
|
25
26
|
end
|
|
26
27
|
|
|
27
|
-
def self.git_log_last_commits(pretty_format, commit_count, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
|
|
28
|
+
def self.git_log_last_commits(pretty_format, commit_count, matching_pattern, merge_commit_filtering, date_format = nil, ancestry_path, app_path)
|
|
28
29
|
command = %w(git log)
|
|
29
30
|
command << "--pretty=#{pretty_format}"
|
|
31
|
+
command << "--grep=#{matching_pattern}" if matching_pattern
|
|
30
32
|
command << "--date=#{date_format}" if date_format
|
|
31
33
|
command << '--ancestry-path' if ancestry_path
|
|
32
34
|
command << '-n' << commit_count.to_s
|
|
@@ -51,15 +51,23 @@ module Fastlane
|
|
|
51
51
|
# sh "ls -la /Applications/Xcode\ 7.3.1.app"
|
|
52
52
|
# sh "ls", "-la", "/Applications/Xcode 7.3.1.app"
|
|
53
53
|
# sh({ "FOO" => "Hello" }, "echo $FOO")
|
|
54
|
+
sanitized_output = false
|
|
54
55
|
Open3.popen2e(*command) do |stdin, io, thread|
|
|
55
56
|
io.sync = true
|
|
56
57
|
io.each do |line|
|
|
57
|
-
|
|
58
|
+
if print_command_output
|
|
59
|
+
# Ensure the string being stripped is in valid UTF-8 format; Otherwise warn at the end
|
|
60
|
+
text = line.encode('UTF-8', invalid: :replace)
|
|
61
|
+
UI.command_output(text.strip)
|
|
62
|
+
sanitized_output = true if text != line
|
|
63
|
+
end
|
|
58
64
|
result << line
|
|
59
65
|
end
|
|
60
66
|
exit_status = thread.value
|
|
61
67
|
end
|
|
62
68
|
|
|
69
|
+
UI.important("Command output wasn't valid UTF-8 and was sanitized. Please report the issue.") if sanitized_output
|
|
70
|
+
|
|
63
71
|
# Checking Process::Status#exitstatus instead of #success? makes for more
|
|
64
72
|
# testable code. (Tests mock exitstatus only.) This is also consistent
|
|
65
73
|
# with previous implementations of sh and... probably portable to all
|
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
|
15
15
|
spec.files = Dir["lib/**/*"] + %w(README.md LICENSE)
|
|
16
16
|
spec.require_paths = ['lib']
|
|
17
17
|
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
18
|
-
spec.required_ruby_version = '>= 3.
|
|
18
|
+
spec.required_ruby_version = '>= 3.1'
|
|
19
19
|
|
|
20
20
|
# Don't add a dependency to fastlane or fastlane_re
|
|
21
21
|
# since this would cause a circular dependency
|
|
@@ -3,7 +3,7 @@ require:
|
|
|
3
3
|
- rubocop/require_tools
|
|
4
4
|
- rubocop-performance
|
|
5
5
|
AllCops:
|
|
6
|
-
TargetRubyVersion: 3.
|
|
6
|
+
TargetRubyVersion: 3.1
|
|
7
7
|
SuggestExtensions: false
|
|
8
8
|
NewCops: enable
|
|
9
9
|
Include:
|
|
@@ -21,6 +21,10 @@ AllCops:
|
|
|
21
21
|
- "**/*.provisionprofile"
|
|
22
22
|
Lint/ErbNewArguments:
|
|
23
23
|
Enabled: false
|
|
24
|
+
Style/HashSyntax:
|
|
25
|
+
EnforcedShorthandSyntax: either
|
|
26
|
+
Naming/BlockForwarding:
|
|
27
|
+
EnforcedStyle: explicit
|
|
24
28
|
Style/SlicingWithRange:
|
|
25
29
|
Enabled: false
|
|
26
30
|
Style/MultipleComparison:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Fastlane
|
|
2
|
-
VERSION = '2.
|
|
2
|
+
VERSION = '2.239.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
|
|
@@ -179,6 +179,9 @@ public protocol DeliverfileProtocol: AnyObject {
|
|
|
179
179
|
/// Metadata: Path to the app review attachment file
|
|
180
180
|
var appReviewAttachmentFile: String? { get }
|
|
181
181
|
|
|
182
|
+
/// Metadata: Path to the routing app coverage file (`.geojson`) that is required for routing apps
|
|
183
|
+
var routingAppCoverageFile: String? { get }
|
|
184
|
+
|
|
182
185
|
/// Metadata: The localised app description
|
|
183
186
|
var description: [String: Any]? { get }
|
|
184
187
|
|
|
@@ -465,6 +468,10 @@ public extension DeliverfileProtocol {
|
|
|
465
468
|
return nil
|
|
466
469
|
}
|
|
467
470
|
|
|
471
|
+
var routingAppCoverageFile: String? {
|
|
472
|
+
return nil
|
|
473
|
+
}
|
|
474
|
+
|
|
468
475
|
var description: [String: Any]? {
|
|
469
476
|
return nil
|
|
470
477
|
}
|
|
@@ -532,4 +539,4 @@ public extension DeliverfileProtocol {
|
|
|
532
539
|
|
|
533
540
|
// Please don't remove the lines below
|
|
534
541
|
// They are used to detect outdated files
|
|
535
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
542
|
+
// FastlaneRunnerAPIVersion [0.9.153]
|