supply 0.3.1 → 0.4.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 +18 -4
- data/lib/supply/client.rb +116 -218
- data/lib/supply/options.rb +25 -7
- data/lib/supply/setup.rb +1 -2
- data/lib/supply/uploader.rb +2 -3
- data/lib/supply/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9697a1089d5497d72524a149bed1fef5891cea92
|
4
|
+
data.tar.gz: 21e4ebade53c3955817f1bc7c96181d3a68aa7c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 885050ae365c1dba5af3570cbeb641cf4836a8faa2404453be88b6c5cbdb5058a4181b9a5262c689ce1d6b8fd28c22f7618bba833b84fa8f371372813dfbd2b2
|
7
|
+
data.tar.gz: 558ce0fbcf00b10e29fbfa210ac8ce0e61b563931f234109b03deb913a2f5aa23f18dc941a5b668898d22799f255f4bd2a9d85e4aa04bc7de2af9865ce613e05
|
data/README.md
CHANGED
@@ -69,20 +69,34 @@ Install the gem
|
|
69
69
|
|
70
70
|
sudo gem install supply
|
71
71
|
|
72
|
-
## Setup
|
72
|
+
## Setup
|
73
|
+
|
74
|
+
Setup consists of setting up your Google Developers Service Account
|
73
75
|
|
74
76
|
- Open the [Google Play Console](https://play.google.com/apps/publish/)
|
75
77
|
- Select **Settings** tab, followed by the **API access** tab
|
76
78
|
- Click the **Create Service Account** button and follow the **Google Developers Console** link in the dialog
|
77
79
|
- Click **Add credentials** and select **Service account**
|
78
|
-
- Select **
|
79
|
-
- Make a note of the file name of the
|
80
|
-
- Make a note of the **Email address** under **Service accounts** - this is the
|
80
|
+
- Select **JSON** as the Key type and click **Create**
|
81
|
+
- Make a note of the file name of the JSON file downloaded to your computer, and close the dialog
|
82
|
+
- Make a note of the **Email address** under **Service accounts** - this is the user which you will need later
|
81
83
|
- Back on the Google Play developer console, click **Done** to close the dialog
|
82
84
|
- Click on **Grant Access** for the newly added service account
|
83
85
|
- In the **Invite a New User** dialog, paste the service account email address you noted earlier into the **Email address** field
|
84
86
|
- Choose **Release Manager** from the **Role** dropdown and click **Send Invitation** to close the dialog
|
85
87
|
|
88
|
+
### Migrating Google credential format (from .p12 key file to .json)
|
89
|
+
|
90
|
+
In previous versions of supply, credentials to your Play Console were stored as `.p12` files. Since version 0.4.0, supply now supports the recommended `.json` key Service Account credential files. If you wish to upgrade:
|
91
|
+
|
92
|
+
- follow the <a href="#setup">Setup</a> procedure once again to make sure you create the appropriate JSON file
|
93
|
+
- update your fastlane configuration or your command line invocation to use the appropriate argument if necessary.
|
94
|
+
Note that you don't need to take note nor pass the `issuer` argument anymore.
|
95
|
+
|
96
|
+
|
97
|
+
The previous p12 configuration is still currently supported.
|
98
|
+
|
99
|
+
|
86
100
|
## Quick Start
|
87
101
|
|
88
102
|
- `cd [your_project_folder]`
|
data/lib/supply/client.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
require '
|
1
|
+
require 'googleauth'
|
2
|
+
require 'google/apis/androidpublisher_v2'
|
3
|
+
Androidpublisher = Google::Apis::AndroidpublisherV2
|
4
|
+
CredentialsLoader = Google::Auth::CredentialsLoader
|
5
|
+
|
2
6
|
require 'net/http'
|
3
7
|
|
4
8
|
module Supply
|
5
9
|
class Client
|
6
10
|
# Connecting with Google
|
7
|
-
attr_accessor :auth_client
|
8
|
-
attr_accessor :api_client
|
9
11
|
attr_accessor :android_publisher
|
10
12
|
|
11
13
|
# Editing something
|
@@ -18,38 +20,43 @@ module Supply
|
|
18
20
|
# @!group Login
|
19
21
|
#####################################################
|
20
22
|
|
21
|
-
#
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
# instanciate a client given the supplied configuration
|
24
|
+
def self.make_from_config
|
25
|
+
return Client.new(path_to_key: Supply.config[:key],
|
26
|
+
issuer: Supply.config[:issuer],
|
27
|
+
path_to_service_account_json: Supply.config[:json_key])
|
28
|
+
end
|
27
29
|
|
28
|
-
|
30
|
+
# Initializes the android_publisher and its auth_client using the specified information
|
31
|
+
# @param path_to_service_account_json: The path to your service account Json file
|
32
|
+
# @param path_to_key: The path to your p12 file (@deprecated)
|
33
|
+
# @param issuer: Email addresss for oauth (@deprecated)
|
34
|
+
def initialize(path_to_key: nil, issuer: nil, path_to_service_account_json: nil)
|
35
|
+
scope = Androidpublisher::AUTH_ANDROIDPUBLISHER
|
29
36
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
raise "Authentification unsuccessful, make sure to pass a valid key file".red
|
37
|
+
if path_to_service_account_json
|
38
|
+
key_io = File.open(File.expand_path(path_to_service_account_json))
|
39
|
+
else
|
40
|
+
require 'google/api_client/auth/key_utils'
|
41
|
+
key = Google::APIClient::KeyUtils.load_from_pkcs12(File.expand_path(path_to_key), 'notasecret')
|
42
|
+
cred_json = {
|
43
|
+
private_key: key.to_s,
|
44
|
+
client_email: issuer
|
45
|
+
}
|
46
|
+
key_io = StringIO.new(MultiJson.dump(cred_json))
|
41
47
|
end
|
42
48
|
|
49
|
+
auth_client = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: key_io, scope: scope)
|
50
|
+
|
43
51
|
Helper.log.debug "Fetching a new access token from Google..."
|
44
52
|
|
45
|
-
|
53
|
+
auth_client.fetch_access_token!
|
46
54
|
|
47
|
-
|
48
|
-
|
49
|
-
application_version: Supply::VERSION
|
50
|
-
)
|
55
|
+
Google::Apis::ClientOptions.default.application_name = "fastlane - supply"
|
56
|
+
Google::Apis::ClientOptions.default.application_version = Supply::VERSION
|
51
57
|
|
52
|
-
self.android_publisher =
|
58
|
+
self.android_publisher = Androidpublisher::AndroidPublisherService.new
|
59
|
+
self.android_publisher.authorization = auth_client
|
53
60
|
end
|
54
61
|
|
55
62
|
#####################################################
|
@@ -60,17 +67,7 @@ module Supply
|
|
60
67
|
def begin_edit(package_name: nil)
|
61
68
|
raise "You currently have an active edit" if @current_edit
|
62
69
|
|
63
|
-
self.current_edit =
|
64
|
-
api_method: android_publisher.edits.insert,
|
65
|
-
parameters: { 'packageName' => package_name },
|
66
|
-
authorization: auth_client
|
67
|
-
)
|
68
|
-
|
69
|
-
if current_edit.error?
|
70
|
-
error_message = current_edit.error_message
|
71
|
-
self.current_edit = nil
|
72
|
-
raise error_message
|
73
|
-
end
|
70
|
+
self.current_edit = android_publisher.insert_edit(package_name)
|
74
71
|
|
75
72
|
self.current_package_name = package_name
|
76
73
|
end
|
@@ -79,16 +76,7 @@ module Supply
|
|
79
76
|
def abort_current_edit
|
80
77
|
ensure_active_edit!
|
81
78
|
|
82
|
-
|
83
|
-
api_method: android_publisher.edits.delete,
|
84
|
-
parameters: {
|
85
|
-
'editId' => current_edit.data.id,
|
86
|
-
'packageName' => current_package_name
|
87
|
-
},
|
88
|
-
authorization: auth_client
|
89
|
-
)
|
90
|
-
|
91
|
-
raise result.error_message.red if result.error?
|
79
|
+
android_publisher.delete_edit(current_package_name, current_edit.id)
|
92
80
|
|
93
81
|
self.current_edit = nil
|
94
82
|
self.current_package_name = nil
|
@@ -98,16 +86,7 @@ module Supply
|
|
98
86
|
def commit_current_edit!
|
99
87
|
ensure_active_edit!
|
100
88
|
|
101
|
-
|
102
|
-
api_method: android_publisher.edits.commit,
|
103
|
-
parameters: {
|
104
|
-
'editId' => current_edit.data.id,
|
105
|
-
'packageName' => current_package_name
|
106
|
-
},
|
107
|
-
authorization: auth_client
|
108
|
-
)
|
109
|
-
|
110
|
-
raise result.error_message.red if result.error?
|
89
|
+
android_publisher.commit_edit(current_package_name, current_edit.id)
|
111
90
|
|
112
91
|
self.current_edit = nil
|
113
92
|
self.current_package_name = nil
|
@@ -122,18 +101,9 @@ module Supply
|
|
122
101
|
def listings
|
123
102
|
ensure_active_edit!
|
124
103
|
|
125
|
-
result =
|
126
|
-
api_method: android_publisher.edits.listings.list,
|
127
|
-
parameters: {
|
128
|
-
'editId' => current_edit.data.id,
|
129
|
-
'packageName' => current_package_name
|
130
|
-
},
|
131
|
-
authorization: auth_client
|
132
|
-
)
|
104
|
+
result = android_publisher.list_listings(current_package_name, current_edit.id)
|
133
105
|
|
134
|
-
|
135
|
-
|
136
|
-
return result.data.listings.collect do |row|
|
106
|
+
return result.listings.map do |row|
|
137
107
|
Listing.new(self, row.language, row)
|
138
108
|
end
|
139
109
|
end
|
@@ -142,22 +112,16 @@ module Supply
|
|
142
112
|
def listing_for_language(language)
|
143
113
|
ensure_active_edit!
|
144
114
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
raise result.error_message.red if result.error? && result.status != 404
|
156
|
-
|
157
|
-
if result.status == 404
|
158
|
-
return Listing.new(self, language) # create a new empty listing
|
159
|
-
else
|
160
|
-
return Listing.new(self, language, result.data)
|
115
|
+
begin
|
116
|
+
result = android_publisher.get_listing(
|
117
|
+
current_package_name,
|
118
|
+
current_edit.id,
|
119
|
+
language)
|
120
|
+
|
121
|
+
return Listing.new(self, language, result)
|
122
|
+
rescue Google::Apis::ClientError => e
|
123
|
+
return Listing.new(self, language) if e.status_code == 404 # create a new empty listing
|
124
|
+
raise
|
161
125
|
end
|
162
126
|
end
|
163
127
|
|
@@ -165,38 +129,22 @@ module Supply
|
|
165
129
|
def apks_version_codes
|
166
130
|
ensure_active_edit!
|
167
131
|
|
168
|
-
result =
|
169
|
-
api_method: android_publisher.edits.apks.list,
|
170
|
-
parameters: {
|
171
|
-
'editId' => current_edit.data.id,
|
172
|
-
'packageName' => current_package_name
|
173
|
-
},
|
174
|
-
authorization: auth_client
|
175
|
-
)
|
132
|
+
result = android_publisher.list_apks(current_package_name, current_edit.id)
|
176
133
|
|
177
|
-
|
178
|
-
|
179
|
-
return result.data.apks.collect(&:versionCode)
|
134
|
+
return result.apks.map(&:version_code)
|
180
135
|
end
|
181
136
|
|
182
137
|
# Get a list of all apk listings (changelogs) - returns the list
|
183
138
|
def apk_listings(apk_version_code)
|
184
139
|
ensure_active_edit!
|
185
140
|
|
186
|
-
result =
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
'editId' => current_edit.data.id,
|
191
|
-
'packageName' => current_package_name
|
192
|
-
},
|
193
|
-
authorization: auth_client
|
194
|
-
)
|
195
|
-
|
196
|
-
raise result.error_message.red if result.error? && result.status != 404
|
141
|
+
result = android_publisher.list_apk_listings(
|
142
|
+
current_package_name,
|
143
|
+
current_edit.id,
|
144
|
+
apk_version_code)
|
197
145
|
|
198
|
-
return result.
|
199
|
-
ApkListing.new(row.
|
146
|
+
return (result.listings || []).map do |row|
|
147
|
+
ApkListing.new(row.recent_changes, row.language, apk_version_code)
|
200
148
|
end
|
201
149
|
end
|
202
150
|
|
@@ -208,90 +156,62 @@ module Supply
|
|
208
156
|
def update_listing_for_language(language: nil, title: nil, short_description: nil, full_description: nil, video: nil)
|
209
157
|
ensure_active_edit!
|
210
158
|
|
211
|
-
listing = {
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
}
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
'language' => language
|
225
|
-
},
|
226
|
-
body_object: listing,
|
227
|
-
authorization: auth_client
|
228
|
-
)
|
229
|
-
raise result.error_message.red if result.error?
|
159
|
+
listing = Androidpublisher::Listing.new({
|
160
|
+
language: language,
|
161
|
+
title: title,
|
162
|
+
full_description: full_description,
|
163
|
+
short_description: short_description,
|
164
|
+
video: video
|
165
|
+
})
|
166
|
+
|
167
|
+
android_publisher.update_listing(
|
168
|
+
current_package_name,
|
169
|
+
current_edit.id,
|
170
|
+
language,
|
171
|
+
listing)
|
230
172
|
end
|
231
173
|
|
232
174
|
def upload_apk(path_to_apk)
|
233
175
|
ensure_active_edit!
|
234
176
|
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
'uploadType' => 'media'
|
242
|
-
},
|
243
|
-
media: apk,
|
244
|
-
authorization: auth_client
|
245
|
-
)
|
246
|
-
|
247
|
-
raise result_upload.error_message.red if result_upload.error?
|
248
|
-
|
249
|
-
return result_upload.data.versionCode
|
177
|
+
result_upload = android_publisher.upload_apk(
|
178
|
+
current_package_name,
|
179
|
+
current_edit.id,
|
180
|
+
upload_source: path_to_apk)
|
181
|
+
|
182
|
+
return result_upload.version_code
|
250
183
|
end
|
251
184
|
|
252
185
|
def update_track(track, rollout, apk_version_code)
|
253
186
|
ensure_active_edit!
|
254
187
|
|
255
|
-
track_body = {
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
}
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
'packageName' => current_package_name,
|
267
|
-
'track' => track
|
268
|
-
},
|
269
|
-
body_object: track_body,
|
270
|
-
authorization: auth_client)
|
271
|
-
|
272
|
-
raise result_update.error_message.red if result_update.error?
|
188
|
+
track_body = Androidpublisher::Track.new({
|
189
|
+
track: track,
|
190
|
+
user_fraction: rollout,
|
191
|
+
version_codes: [apk_version_code]
|
192
|
+
})
|
193
|
+
|
194
|
+
android_publisher.update_track(
|
195
|
+
current_package_name,
|
196
|
+
current_edit.id,
|
197
|
+
track,
|
198
|
+
track_body)
|
273
199
|
end
|
274
200
|
|
275
201
|
def update_apk_listing_for_language(apk_listing)
|
276
202
|
ensure_active_edit!
|
277
203
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
}
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
'language' => apk_listing.language
|
290
|
-
},
|
291
|
-
body_object: body_object,
|
292
|
-
authorization: auth_client
|
293
|
-
)
|
294
|
-
raise result.error_message.red if result.error?
|
204
|
+
apk_listing_object = Androidpublisher::ApkListing.new({
|
205
|
+
language: apk_listing.language,
|
206
|
+
recent_changes: apk_listing.recent_changes
|
207
|
+
})
|
208
|
+
|
209
|
+
android_publisher.update_apk_listing(
|
210
|
+
current_package_name,
|
211
|
+
current_edit.id,
|
212
|
+
apk_listing.apk_version_code,
|
213
|
+
apk_listing.language,
|
214
|
+
apk_listing_object)
|
295
215
|
end
|
296
216
|
|
297
217
|
#####################################################
|
@@ -301,58 +221,36 @@ module Supply
|
|
301
221
|
def fetch_images(image_type: nil, language: nil)
|
302
222
|
ensure_active_edit!
|
303
223
|
|
304
|
-
result =
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
'language' => language,
|
310
|
-
'imageType' => image_type
|
311
|
-
},
|
312
|
-
authorization: auth_client
|
313
|
-
)
|
314
|
-
|
315
|
-
raise result.error_message.red if result.error?
|
224
|
+
result = android_publisher.list_images(
|
225
|
+
current_package_name,
|
226
|
+
current_edit.id,
|
227
|
+
language,
|
228
|
+
image_type)
|
316
229
|
|
317
|
-
result.
|
230
|
+
(result.images || []).map(&:url)
|
318
231
|
end
|
319
232
|
|
320
233
|
# @param image_type (e.g. phoneScreenshots, sevenInchScreenshots, ...)
|
321
234
|
def upload_image(image_path: nil, image_type: nil, language: nil)
|
322
235
|
ensure_active_edit!
|
323
236
|
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
'imageType' => image_type,
|
332
|
-
'uploadType' => 'media'
|
333
|
-
},
|
334
|
-
media: image,
|
335
|
-
authorization: auth_client
|
336
|
-
)
|
337
|
-
|
338
|
-
raise result.error_message.red if result.error?
|
237
|
+
android_publisher.upload_image(
|
238
|
+
current_package_name,
|
239
|
+
current_edit.id,
|
240
|
+
language,
|
241
|
+
image_type,
|
242
|
+
upload_source: image_path,
|
243
|
+
content_type: 'image/*')
|
339
244
|
end
|
340
245
|
|
341
246
|
def clear_screenshots(image_type: nil, language: nil)
|
342
247
|
ensure_active_edit!
|
343
248
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
'language' => language,
|
350
|
-
'imageType' => image_type
|
351
|
-
},
|
352
|
-
authorization: auth_client
|
353
|
-
)
|
354
|
-
|
355
|
-
raise result.error_message if result.error?
|
249
|
+
android_publisher.delete_all_images(
|
250
|
+
current_package_name,
|
251
|
+
current_edit.id,
|
252
|
+
language,
|
253
|
+
image_type)
|
356
254
|
end
|
357
255
|
|
358
256
|
private
|
data/lib/supply/options.rb
CHANGED
@@ -17,7 +17,7 @@ module Supply
|
|
17
17
|
default_value: 'production',
|
18
18
|
verify_block: proc do |value|
|
19
19
|
available = %w(production beta alpha rollout)
|
20
|
-
|
20
|
+
UI.user_error! "Invalid value '#{value}', must be #{available.join(', ')}" unless available.include? value
|
21
21
|
end),
|
22
22
|
FastlaneCore::ConfigItem.new(key: :rollout,
|
23
23
|
short_option: "-r",
|
@@ -25,7 +25,7 @@ module Supply
|
|
25
25
|
default_value: '1.0',
|
26
26
|
verify_block: proc do |value|
|
27
27
|
available = %w(0.005 0.01 0.05 0.1 0.2 0.5 1.0)
|
28
|
-
|
28
|
+
UI.user_error! "Invalid value '#{value}', must be #{available.join(', ')}" unless available.include? value
|
29
29
|
end),
|
30
30
|
FastlaneCore::ConfigItem.new(key: :metadata_path,
|
31
31
|
env_name: "SUPPLY_METADATA_PATH",
|
@@ -36,16 +36,34 @@ module Supply
|
|
36
36
|
FastlaneCore::ConfigItem.new(key: :key,
|
37
37
|
env_name: "SUPPLY_KEY",
|
38
38
|
short_option: "-k",
|
39
|
+
conflicting_options: [:json_key],
|
40
|
+
optional: true, # deprecated
|
39
41
|
description: "The p12 File used to authenticate with Google",
|
40
42
|
default_value: Dir["*.p12"].first || CredentialsManager::AppfileConfig.try_fetch_value(:keyfile),
|
41
43
|
verify_block: proc do |value|
|
42
|
-
|
44
|
+
UI.important("DEPRECATED --key OPTION. Use --json_key instead")
|
45
|
+
UI.user_error! "Could not find p12 file at path '#{File.expand_path(value)}'" unless File.exist?(File.expand_path(value))
|
43
46
|
end),
|
44
47
|
FastlaneCore::ConfigItem.new(key: :issuer,
|
45
|
-
short_option: "-i",
|
46
48
|
env_name: "SUPPLY_ISSUER",
|
49
|
+
short_option: "-i",
|
50
|
+
conflicting_options: [:json_key],
|
51
|
+
optional: true, # deprecated
|
47
52
|
description: "The issuer of the p12 file (email address of the service account)",
|
48
|
-
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:issuer)
|
53
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:issuer),
|
54
|
+
verify_block: proc do |value|
|
55
|
+
UI.important("DEPRECATED --issuer OPTION. Use --json_key instead")
|
56
|
+
end),
|
57
|
+
FastlaneCore::ConfigItem.new(key: :json_key,
|
58
|
+
env_name: "SUPPLY_JSON_KEY",
|
59
|
+
short_option: "-j",
|
60
|
+
conflicting_options: [:issuer, :key],
|
61
|
+
optional: true, # this is shouldn't be optional but is until --key and --issuer are completely removed
|
62
|
+
description: "The service account json file used to authenticate with Google",
|
63
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:json_key_file),
|
64
|
+
verify_block: proc do |value|
|
65
|
+
UI.user_error! "Could not find service account json file at path '#{File.expand_path(value)}'" unless File.exist?(File.expand_path(value))
|
66
|
+
end),
|
49
67
|
FastlaneCore::ConfigItem.new(key: :apk,
|
50
68
|
env_name: "SUPPLY_APK",
|
51
69
|
description: "Path to the APK file to upload",
|
@@ -53,8 +71,8 @@ module Supply
|
|
53
71
|
default_value: Dir["*.apk"].last || Dir[File.join("app", "build", "outputs", "apk", "app-Release.apk")].last,
|
54
72
|
optional: true,
|
55
73
|
verify_block: proc do |value|
|
56
|
-
|
57
|
-
|
74
|
+
UI.user_error! "Could not find apk file at path '#{value}'" unless File.exist?(value)
|
75
|
+
UI.user_error! "apk file is not an apk" unless value.end_with?(value)
|
58
76
|
end),
|
59
77
|
FastlaneCore::ConfigItem.new(key: :skip_upload_apk,
|
60
78
|
env_name: "SUPPLY_SKIP_UPLOAD_APK",
|
data/lib/supply/setup.rb
CHANGED
data/lib/supply/uploader.rb
CHANGED
@@ -8,7 +8,7 @@ module Supply
|
|
8
8
|
raise "No local metadata found, make sure to run `supply init` to setup supply".red unless metadata_path || Supply.config[:apk]
|
9
9
|
|
10
10
|
if metadata_path
|
11
|
-
|
11
|
+
UI.user_error!("Could not find folder #{metadata_path}") unless File.directory? metadata_path
|
12
12
|
|
13
13
|
Dir.foreach(metadata_path) do |language|
|
14
14
|
next if language.start_with?('.') # e.g. . or .. or hidden folders
|
@@ -111,8 +111,7 @@ module Supply
|
|
111
111
|
private
|
112
112
|
|
113
113
|
def client
|
114
|
-
@client ||= Client.
|
115
|
-
issuer: Supply.config[:issuer])
|
114
|
+
@client ||= Client.make_from_config
|
116
115
|
end
|
117
116
|
|
118
117
|
def metadata_path
|
data/lib/supply/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: supply
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-api-client
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.9.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.9.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: fastlane_core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.35.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.35.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: credentials_manager
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.15.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.15.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
219
219
|
version: '0'
|
220
220
|
requirements: []
|
221
221
|
rubyforge_project:
|
222
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.2.2
|
223
223
|
signing_key:
|
224
224
|
specification_version: 4
|
225
225
|
summary: Command line tool for updating Android apps and their metadata on the Google
|