fastlane 2.155.1 → 2.157.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 +72 -72
- data/deliver/lib/deliver.rb +1 -0
- data/deliver/lib/deliver/app_screenshot_iterator.rb +95 -0
- data/deliver/lib/deliver/detect_values.rb +4 -1
- data/deliver/lib/deliver/languages.rb +7 -0
- data/deliver/lib/deliver/loader.rb +4 -5
- data/deliver/lib/deliver/queue_worker.rb +64 -0
- data/deliver/lib/deliver/runner.rb +7 -5
- data/deliver/lib/deliver/upload_screenshots.rb +143 -128
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +120 -0
- data/fastlane/lib/fastlane/actions/commit_version_bump.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +17 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +2 -2
- data/fastlane/lib/fastlane/actions/sonar.rb +5 -0
- data/fastlane/lib/fastlane/actions/spaceship_stats.rb +73 -0
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +4 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +68 -8
- 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/fastlane_core/lib/fastlane_core/itunes_transporter.rb +71 -42
- data/fastlane_core/lib/fastlane_core/project.rb +1 -0
- data/gym/lib/gym/error_handler.rb +1 -1
- data/gym/lib/gym/generators/build_command_generator.rb +0 -1
- data/pilot/lib/pilot/build_manager.rb +18 -4
- data/pilot/lib/pilot/manager.rb +15 -5
- data/pilot/lib/pilot/options.rb +16 -0
- data/produce/lib/produce/itunes_connect.rb +2 -2
- data/scan/lib/scan/test_command_generator.rb +3 -1
- data/screengrab/lib/screengrab/runner.rb +8 -7
- data/sigh/lib/sigh/runner.rb +9 -5
- data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -1
- data/spaceship/lib/spaceship.rb +4 -0
- data/spaceship/lib/spaceship/client.rb +2 -0
- data/spaceship/lib/spaceship/connect_api.rb +0 -15
- data/spaceship/lib/spaceship/connect_api/api_client.rb +270 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +139 -213
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +75 -64
- data/spaceship/lib/spaceship/connect_api/spaceship.rb +94 -0
- data/spaceship/lib/spaceship/connect_api/testflight/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +288 -277
- data/spaceship/lib/spaceship/connect_api/token.rb +46 -5
- data/spaceship/lib/spaceship/connect_api/token_refresh_middleware.rb +24 -0
- data/spaceship/lib/spaceship/connect_api/tunes/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +717 -706
- data/spaceship/lib/spaceship/connect_api/users/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/users/users.rb +28 -17
- data/spaceship/lib/spaceship/stats_middleware.rb +65 -0
- metadata +25 -18
- data/sigh/lib/sigh/.runner.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.device.rb.swp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54d4961677c76fce8c6ecb5e8c89f9b28ea818abd3dc886217d8eaf4e198902b
|
4
|
+
data.tar.gz: a36d89c144e59c29e7dc94eeb8f51a72b3a50a9ed2813ca700d8ee7008d778de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef36ec87ab67fa77d75cb6836e994463de4f550e6ff0bc832690c734c09a8a21cd9644c90657d29894baf2b4b7e4d87269f7c8d350ce0300ee2b162f3a861870
|
7
|
+
data.tar.gz: d8a4392c60f47e7b7d73a374020c854694f27a91a59a23d33a6f0de2464efdd2b653bfb6a999faa3b1657a7aa4d29a097ef7d8cff34eeec5481bafb2e5612339
|
data/README.md
CHANGED
@@ -34,11 +34,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
34
34
|
<!-- This table is regenerated and resorted on each release -->
|
35
35
|
<table id='team'>
|
36
36
|
<tr>
|
37
|
-
<td id='
|
38
|
-
<a href='https://github.com/
|
39
|
-
<img src='https://github.com/
|
37
|
+
<td id='olivier-halligon'>
|
38
|
+
<a href='https://github.com/AliSoftware'>
|
39
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
40
40
|
</a>
|
41
|
-
<h4 align='center'><a href='https://twitter.com/
|
41
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
42
42
|
</td>
|
43
43
|
<td id='stefan-natchev'>
|
44
44
|
<a href='https://github.com/snatchev'>
|
@@ -46,17 +46,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
46
46
|
</a>
|
47
47
|
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
48
48
|
</td>
|
49
|
-
<td id='
|
50
|
-
<a href='https://github.com/
|
51
|
-
<img src='https://github.com/
|
49
|
+
<td id='jan-piotrowski'>
|
50
|
+
<a href='https://github.com/janpio'>
|
51
|
+
<img src='https://github.com/janpio.png?size=140'>
|
52
52
|
</a>
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
53
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
54
54
|
</td>
|
55
|
-
<td id='
|
56
|
-
<a href='https://github.com/
|
57
|
-
<img src='https://github.com/
|
55
|
+
<td id='max-ott'>
|
56
|
+
<a href='https://github.com/max-ott'>
|
57
|
+
<img src='https://github.com/max-ott.png?size=140'>
|
58
58
|
</a>
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
59
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
60
60
|
</td>
|
61
61
|
<td id='jorge-revuelta-h'>
|
62
62
|
<a href='https://github.com/minuscorp'>
|
@@ -66,29 +66,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
66
66
|
</td>
|
67
67
|
</tr>
|
68
68
|
<tr>
|
69
|
-
<td id='
|
70
|
-
<a href='https://github.com/
|
71
|
-
<img src='https://github.com/
|
72
|
-
</a>
|
73
|
-
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
74
|
-
</td>
|
75
|
-
<td id='danielle-tomlinson'>
|
76
|
-
<a href='https://github.com/endocrimes'>
|
77
|
-
<img src='https://github.com/endocrimes.png?size=140'>
|
69
|
+
<td id='joshua-liebowitz'>
|
70
|
+
<a href='https://github.com/taquitos'>
|
71
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
78
72
|
</a>
|
79
|
-
<h4 align='center'><a href='https://twitter.com/
|
73
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
80
74
|
</td>
|
81
|
-
<td id='
|
82
|
-
<a href='https://github.com/
|
83
|
-
<img src='https://github.com/
|
75
|
+
<td id='manu-wallner'>
|
76
|
+
<a href='https://github.com/milch'>
|
77
|
+
<img src='https://github.com/milch.png?size=140'>
|
84
78
|
</a>
|
85
|
-
<h4 align='center'><a href='https://twitter.com/
|
79
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
86
80
|
</td>
|
87
|
-
<td id='
|
88
|
-
<a href='https://github.com/
|
89
|
-
<img src='https://github.com/
|
81
|
+
<td id='daniel-jankowski'>
|
82
|
+
<a href='https://github.com/mollyIV'>
|
83
|
+
<img src='https://github.com/mollyIV.png?size=140'>
|
90
84
|
</a>
|
91
|
-
<h4 align='center'><a href='https://twitter.com/
|
85
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
92
86
|
</td>
|
93
87
|
<td id='jimmy-dee'>
|
94
88
|
<a href='https://github.com/jdee'>
|
@@ -96,25 +90,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
96
90
|
</a>
|
97
91
|
<h4 align='center'>Jimmy Dee</h4>
|
98
92
|
</td>
|
99
|
-
|
100
|
-
<
|
101
|
-
<
|
102
|
-
<a href='https://github.com/KrauseFx'>
|
103
|
-
<img src='https://github.com/KrauseFx.png?size=140'>
|
93
|
+
<td id='maksym-grebenets'>
|
94
|
+
<a href='https://github.com/mgrebenets'>
|
95
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
104
96
|
</a>
|
105
|
-
<h4 align='center'><a href='https://twitter.com/
|
97
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
106
98
|
</td>
|
107
|
-
|
108
|
-
<
|
109
|
-
<
|
99
|
+
</tr>
|
100
|
+
<tr>
|
101
|
+
<td id='kohki-miki'>
|
102
|
+
<a href='https://github.com/giginet'>
|
103
|
+
<img src='https://github.com/giginet.png?size=140'>
|
110
104
|
</a>
|
111
|
-
<h4 align='center'><a href='https://twitter.com/
|
105
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
112
106
|
</td>
|
113
|
-
<td id='
|
114
|
-
<a href='https://github.com/
|
115
|
-
<img src='https://github.com/
|
107
|
+
<td id='andrew-mcburney'>
|
108
|
+
<a href='https://github.com/armcburney'>
|
109
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
116
110
|
</a>
|
117
|
-
<h4 align='center'><a href='https://twitter.com/
|
111
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
118
112
|
</td>
|
119
113
|
<td id='luka-mirosevic'>
|
120
114
|
<a href='https://github.com/lmirosevic'>
|
@@ -122,20 +116,6 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
122
116
|
</a>
|
123
117
|
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
124
118
|
</td>
|
125
|
-
<td id='max-ott'>
|
126
|
-
<a href='https://github.com/max-ott'>
|
127
|
-
<img src='https://github.com/max-ott.png?size=140'>
|
128
|
-
</a>
|
129
|
-
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
130
|
-
</td>
|
131
|
-
</tr>
|
132
|
-
<tr>
|
133
|
-
<td id='joshua-liebowitz'>
|
134
|
-
<a href='https://github.com/taquitos'>
|
135
|
-
<img src='https://github.com/taquitos.png?size=140'>
|
136
|
-
</a>
|
137
|
-
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
138
|
-
</td>
|
139
119
|
<td id='josh-holtz'>
|
140
120
|
<a href='https://github.com/joshdholtz'>
|
141
121
|
<img src='https://github.com/joshdholtz.png?size=140'>
|
@@ -148,31 +128,51 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
148
128
|
</a>
|
149
129
|
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
150
130
|
</td>
|
151
|
-
|
152
|
-
<
|
153
|
-
<
|
131
|
+
</tr>
|
132
|
+
<tr>
|
133
|
+
<td id='danielle-tomlinson'>
|
134
|
+
<a href='https://github.com/endocrimes'>
|
135
|
+
<img src='https://github.com/endocrimes.png?size=140'>
|
154
136
|
</a>
|
155
|
-
<h4 align='center'><a href='https://twitter.com/
|
137
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
156
138
|
</td>
|
157
|
-
<td id='
|
158
|
-
<a href='https://github.com/
|
159
|
-
<img src='https://github.com/
|
139
|
+
<td id='matthew-ellis'>
|
140
|
+
<a href='https://github.com/matthewellis'>
|
141
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
160
142
|
</a>
|
161
|
-
<h4 align='center'><a href='https://twitter.com/
|
143
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
162
144
|
</td>
|
163
|
-
</tr>
|
164
|
-
<tr>
|
165
145
|
<td id='aaron-brager'>
|
166
146
|
<a href='https://github.com/getaaron'>
|
167
147
|
<img src='https://github.com/getaaron.png?size=140'>
|
168
148
|
</a>
|
169
149
|
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
170
150
|
</td>
|
171
|
-
<td id='
|
172
|
-
<a href='https://github.com/
|
173
|
-
<img src='https://github.com/
|
151
|
+
<td id='helmut-januschka'>
|
152
|
+
<a href='https://github.com/hjanuschka'>
|
153
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
174
154
|
</a>
|
175
|
-
<h4 align='center'><a href='https://twitter.com/
|
155
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
156
|
+
</td>
|
157
|
+
<td id='felix-krause'>
|
158
|
+
<a href='https://github.com/KrauseFx'>
|
159
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
160
|
+
</a>
|
161
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
162
|
+
</td>
|
163
|
+
</tr>
|
164
|
+
<tr>
|
165
|
+
<td id='iulian-onofrei'>
|
166
|
+
<a href='https://github.com/revolter'>
|
167
|
+
<img src='https://github.com/revolter.png?size=140'>
|
168
|
+
</a>
|
169
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
170
|
+
</td>
|
171
|
+
<td id='jérôme-lacoste'>
|
172
|
+
<a href='https://github.com/lacostej'>
|
173
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
174
|
+
</a>
|
175
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
176
176
|
</td>
|
177
177
|
</table>
|
178
178
|
|
data/deliver/lib/deliver.rb
CHANGED
@@ -0,0 +1,95 @@
|
|
1
|
+
module Deliver
|
2
|
+
# This is a convinient class that enumerates app store connect's screenshots in various degrees.
|
3
|
+
class AppScreenshotIterator
|
4
|
+
NUMBER_OF_THREADS = Helper.test? ? 1 : [ENV.fetch("DELIVER_NUMBER_OF_THREADS", 10).to_i, 10].min
|
5
|
+
|
6
|
+
# @param localizations [Array<Spaceship::ConnectAPI::AppStoreVersionLocalization>]
|
7
|
+
def initialize(localizations)
|
8
|
+
@localizations = localizations
|
9
|
+
end
|
10
|
+
|
11
|
+
# Iterate app_screenshot_set over localizations
|
12
|
+
#
|
13
|
+
# @yield [localization, app_screenshot_set]
|
14
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
|
15
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
|
16
|
+
def each_app_screenshot_set(localizations = @localizations, &block)
|
17
|
+
return enum_for(__method__, localizations) unless block_given?
|
18
|
+
|
19
|
+
# Collect app_screenshot_sets from localizations in parallel but
|
20
|
+
# limit the number of threads working at a time with using `lazy` and `force` controls
|
21
|
+
# to not attack App Store Connect
|
22
|
+
results = localizations.each_slice(NUMBER_OF_THREADS).lazy.map do |localizations_grouped|
|
23
|
+
localizations_grouped.map do |localization|
|
24
|
+
Thread.new do
|
25
|
+
[localization, localization.get_app_screenshot_sets]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end.flat_map do |threads|
|
29
|
+
threads.map { |t| t.join.value }
|
30
|
+
end.force
|
31
|
+
|
32
|
+
results.each do |localization, app_screenshot_sets|
|
33
|
+
app_screenshot_sets.each do |app_screenshot_set|
|
34
|
+
yield(localization, app_screenshot_set)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Iterate app_screenshot over localizations and app_screenshot_sets
|
40
|
+
#
|
41
|
+
# @yield [localization, app_screenshot_set, app_screenshot]
|
42
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
|
43
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
|
44
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshot] app_screenshot
|
45
|
+
def each_app_screenshot(&block)
|
46
|
+
return enum_for(__method__) unless block_given?
|
47
|
+
|
48
|
+
each_app_screenshot_set do |localization, app_screenshot_set|
|
49
|
+
app_screenshot_set.app_screenshots.each do |app_screenshot|
|
50
|
+
yield(localization, app_screenshot_set, app_screenshot)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Iterate given local app_screenshot over localizations and app_screenshot_sets with index within each app_screenshot_set
|
56
|
+
#
|
57
|
+
# @param screenshots_per_language [Hash<String, Array<Deliver::AppScreenshot>]
|
58
|
+
# @yield [localization, app_screenshot_set, app_screenshot, index]
|
59
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
|
60
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
|
61
|
+
# @yieldparam [optional, Deliver::AppScreenshot] screenshot
|
62
|
+
# @yieldparam [optional, Integer] index a number reperesents which position the screenshot will be
|
63
|
+
def each_local_screenshot(screenshots_per_language, &block)
|
64
|
+
return enum_for(__method__, screenshots_per_language) unless block_given?
|
65
|
+
|
66
|
+
# filter unnecessary localizations
|
67
|
+
supported_localizations = @localizations.reject { |l| screenshots_per_language[l.locale].nil? }
|
68
|
+
|
69
|
+
# build a hash that can access app_screenshot_set corresponding to given locale and display_type
|
70
|
+
# via parallelized each_app_screenshot_set to gain performance
|
71
|
+
app_screenshot_set_per_locale_and_display_type = each_app_screenshot_set(supported_localizations)
|
72
|
+
.each_with_object({}) do |(localization, app_screenshot_set), hash|
|
73
|
+
hash[localization.locale] ||= {}
|
74
|
+
hash[localization.locale][app_screenshot_set.screenshot_display_type] = app_screenshot_set
|
75
|
+
end
|
76
|
+
|
77
|
+
# iterate over screenshots per localization
|
78
|
+
screenshots_per_language.each do |language, screenshots_for_language|
|
79
|
+
localization = supported_localizations.find { |l| l.locale == language }
|
80
|
+
screenshots_per_display_type = screenshots_for_language.reject { |screenshot| screenshot.device_type.nil? }.group_by(&:device_type)
|
81
|
+
|
82
|
+
screenshots_per_display_type.each do |display_type, screenshots|
|
83
|
+
# create AppScreenshotSet for given display_type if it doesn't exsit
|
84
|
+
app_screenshot_set = app_screenshot_set_per_locale_and_display_type[language][display_type]
|
85
|
+
app_screenshot_set ||= localization.create_app_screenshot_set(attributes: { screenshotDisplayType: display_type })
|
86
|
+
|
87
|
+
# iterate over screenshots per display size with index
|
88
|
+
screenshots.each.with_index do |screenshot, index|
|
89
|
+
yield(localization, app_screenshot_set, screenshot, index)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -5,6 +5,7 @@ require 'spaceship/tunes/tunes'
|
|
5
5
|
require 'spaceship/tunes/application'
|
6
6
|
|
7
7
|
require_relative 'module'
|
8
|
+
require_relative 'languages'
|
8
9
|
|
9
10
|
module Deliver
|
10
11
|
class DetectValues
|
@@ -88,7 +89,9 @@ module Deliver
|
|
88
89
|
languages = options[:languages]
|
89
90
|
return unless languages
|
90
91
|
|
91
|
-
|
92
|
+
# 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
|
93
|
+
# Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
|
94
|
+
all_languages = Deliver::Languages::ALL_LANGUAGES
|
92
95
|
diff = languages - all_languages
|
93
96
|
|
94
97
|
unless diff.empty?
|
@@ -0,0 +1,7 @@
|
|
1
|
+
module Deliver
|
2
|
+
module Languages
|
3
|
+
# 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
|
4
|
+
# Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
|
5
|
+
ALL_LANGUAGES = ["ar-SA", "ca", "cs", "da", "de-DE", "el", "en-AU", "en-CA", "en-GB", "en-US", "es-ES", "es-MX", "fi", "fr-CA", "fr-FR", "he", "hi", "hr", "hu", "id", "it", "ja", "ko", "ms", "nl-NL", "no", "pl", "pt-BR", "pt-PT", "ro", "ru", "sk", "sv", "th", "tr", "uk", "vi", "zh-Hans", "zh-Hant"]
|
6
|
+
end
|
7
|
+
end
|
@@ -3,6 +3,7 @@ require 'spaceship/tunes/tunes'
|
|
3
3
|
|
4
4
|
require_relative 'module'
|
5
5
|
require_relative 'upload_metadata'
|
6
|
+
require_relative 'languages'
|
6
7
|
|
7
8
|
module Deliver
|
8
9
|
module Loader
|
@@ -24,11 +25,9 @@ module Deliver
|
|
24
25
|
def self.language_folders(root, ignore_validation)
|
25
26
|
folders = Dir.glob(File.join(root, '*'))
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
available_languages = Spaceship::Tunes.client.available_languages.sort
|
31
|
-
end
|
28
|
+
# 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
|
29
|
+
# Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
|
30
|
+
available_languages = Deliver::Languages::ALL_LANGUAGES
|
32
31
|
|
33
32
|
allowed_directory_names_with_case = (available_languages + SPECIAL_DIR_NAMES)
|
34
33
|
allowed_directory_names = allowed_directory_names_with_case.map(&:downcase).freeze
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'thread'
|
2
|
+
|
3
|
+
module Deliver
|
4
|
+
# This dispatches jobs to worker threads and make it work in parallel.
|
5
|
+
# It's suitable for I/O bounds works and not for CPU bounds works.
|
6
|
+
# Use this when you have all the items that you'll process in advance.
|
7
|
+
# Simply enqueue them to this and call `QueueWorker#start`.
|
8
|
+
class QueueWorker
|
9
|
+
# @param concurrency (Numeric) - A number of threads to be created
|
10
|
+
# @param block (Proc) - A task you want to execute with enqueued items
|
11
|
+
def initialize(concurrency, &block)
|
12
|
+
@concurrency = concurrency
|
13
|
+
@block = block
|
14
|
+
@queue = Queue.new
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param job (Object) - An arbitary object that keeps parameters
|
18
|
+
def enqueue(job)
|
19
|
+
@queue.push(job)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Call this after you enqueuned all the jobs you want to process
|
23
|
+
# This method blocks current thread until all the enqueued jobs are processed
|
24
|
+
def start
|
25
|
+
threads = []
|
26
|
+
@concurrency.times do
|
27
|
+
threads << Thread.new do
|
28
|
+
while running? && !empty?
|
29
|
+
job = @queue.pop
|
30
|
+
@block.call(job) if job
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
wait_for_complete
|
36
|
+
threads.each(&:join)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def running?
|
42
|
+
!@queue.closed?
|
43
|
+
end
|
44
|
+
|
45
|
+
def empty?
|
46
|
+
@queue.empty?
|
47
|
+
end
|
48
|
+
|
49
|
+
def wait_for_complete
|
50
|
+
wait_thread = Thread.new do
|
51
|
+
loop do
|
52
|
+
if @queue.empty?
|
53
|
+
@queue.close
|
54
|
+
break
|
55
|
+
end
|
56
|
+
|
57
|
+
sleep(1)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
wait_thread.join
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -27,8 +27,8 @@ module Deliver
|
|
27
27
|
|
28
28
|
def login
|
29
29
|
UI.message("Login to App Store Connect (#{options[:username]})")
|
30
|
-
Spaceship::
|
31
|
-
Spaceship::
|
30
|
+
Spaceship::ConnectAPI.login(options[:username])
|
31
|
+
Spaceship::ConnectAPI.select_team
|
32
32
|
UI.message("Login successful")
|
33
33
|
end
|
34
34
|
|
@@ -177,17 +177,19 @@ module Deliver
|
|
177
177
|
# If there are multiple teams, infer the provider from the selected team name.
|
178
178
|
# If there are fewer than two teams, don't infer the provider.
|
179
179
|
def transporter_for_selected_team
|
180
|
+
tunes_client = Spaceship::ConnectAPI.client.tunes_client
|
181
|
+
|
180
182
|
generic_transporter = FastlaneCore::ItunesTransporter.new(options[:username], nil, false, options[:itc_provider])
|
181
|
-
return generic_transporter unless options[:itc_provider].nil? &&
|
183
|
+
return generic_transporter unless options[:itc_provider].nil? && tunes_client.teams.count > 1
|
182
184
|
|
183
185
|
begin
|
184
|
-
team =
|
186
|
+
team = tunes_client.teams.find { |t| t['contentProvider']['contentProviderId'].to_s == tunes_client.team_id }
|
185
187
|
name = team['contentProvider']['name']
|
186
188
|
provider_id = generic_transporter.provider_ids[name]
|
187
189
|
UI.verbose("Inferred provider id #{provider_id} for team #{name}.")
|
188
190
|
return FastlaneCore::ItunesTransporter.new(options[:username], nil, false, provider_id)
|
189
191
|
rescue => ex
|
190
|
-
UI.verbose("Couldn't infer a provider short name for team with id #{
|
192
|
+
UI.verbose("Couldn't infer a provider short name for team with id #{tunes_client.team_id} automatically: #{ex}. Proceeding without provider short name.")
|
191
193
|
return generic_transporter
|
192
194
|
end
|
193
195
|
end
|