fastlane-plugin-appcenter 1.5.0 → 1.8.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 +4 -4
- data/README.md +42 -14
- data/lib/fastlane/plugin/appcenter/actions/appcenter_fetch_version_number.rb +84 -0
- data/lib/fastlane/plugin/appcenter/actions/appcenter_upload_action.rb +190 -54
- data/lib/fastlane/plugin/appcenter/helper/appcenter_helper.rb +245 -80
- data/lib/fastlane/plugin/appcenter/version.rb +1 -1
- metadata +34 -5
@@ -6,13 +6,11 @@ module Fastlane
|
|
6
6
|
# accounting for file types that can and should be zip-compressed
|
7
7
|
# before they are uploaded
|
8
8
|
def self.file_extname_full(path)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
unzip_basename = File.basename(path, ".zip")
|
13
|
-
unzip_extname = File.extname(unzip_basename)
|
9
|
+
%w(.app.zip .dSYM.zip).each do |suffix|
|
10
|
+
return suffix if path.to_s.downcase.end_with? suffix.downcase
|
11
|
+
end
|
14
12
|
|
15
|
-
|
13
|
+
File.extname path
|
16
14
|
end
|
17
15
|
|
18
16
|
# create request
|
@@ -20,10 +18,17 @@ module Fastlane
|
|
20
18
|
require 'faraday'
|
21
19
|
require 'faraday_middleware'
|
22
20
|
|
21
|
+
default_api_url = "https://api.appcenter.ms"
|
22
|
+
if ENV['APPCENTER_ENV']&.upcase == 'INT'
|
23
|
+
default_api_url = "https://api-gateway-core-integration.dev.avalanch.es"
|
24
|
+
end
|
25
|
+
|
23
26
|
options = {
|
24
|
-
url: upload_url ||
|
27
|
+
url: upload_url || default_api_url
|
25
28
|
}
|
26
29
|
|
30
|
+
UI.message("DEBUG: BASE URL #{options[:url]}") if ENV['DEBUG']
|
31
|
+
|
27
32
|
Faraday.new(options) do |builder|
|
28
33
|
if upload_url
|
29
34
|
builder.request :multipart unless dsym
|
@@ -44,15 +49,22 @@ module Fastlane
|
|
44
49
|
def self.create_release_upload(api_token, owner_name, app_name, body)
|
45
50
|
connection = self.connection
|
46
51
|
|
47
|
-
|
52
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/release_uploads"
|
53
|
+
body ||= {}
|
54
|
+
|
55
|
+
UI.message("DEBUG: POST #{url}") if ENV['DEBUG']
|
56
|
+
UI.message("DEBUG: POST body: #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
57
|
+
|
58
|
+
response = connection.post(url) do |req|
|
48
59
|
req.headers['X-API-Token'] = api_token
|
49
60
|
req.headers['internal-request-source'] = "fastlane"
|
50
|
-
req.body = body
|
61
|
+
req.body = body
|
51
62
|
end
|
52
63
|
|
64
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
65
|
+
|
53
66
|
case response.status
|
54
67
|
when 200...300
|
55
|
-
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
56
68
|
response.body
|
57
69
|
when 401
|
58
70
|
UI.user_error!("Auth Error, provided invalid token")
|
@@ -61,7 +73,7 @@ module Fastlane
|
|
61
73
|
UI.error("Not found, invalid owner or application name")
|
62
74
|
false
|
63
75
|
when 500...600
|
64
|
-
UI.
|
76
|
+
UI.abort_with_message!("Internal Service Error, please try again later")
|
65
77
|
else
|
66
78
|
UI.error("Error #{response.status}: #{response.body}")
|
67
79
|
false
|
@@ -76,20 +88,27 @@ module Fastlane
|
|
76
88
|
def self.create_mapping_upload(api_token, owner_name, app_name, file_name, build_number, version)
|
77
89
|
connection = self.connection
|
78
90
|
|
79
|
-
|
91
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/symbol_uploads"
|
92
|
+
body = {
|
93
|
+
symbol_type: "AndroidProguard",
|
94
|
+
file_name: file_name,
|
95
|
+
build: build_number,
|
96
|
+
version: version,
|
97
|
+
}
|
98
|
+
|
99
|
+
UI.message("DEBUG: POST #{url}") if ENV['DEBUG']
|
100
|
+
UI.message("DEBUG: POST body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
101
|
+
|
102
|
+
response = connection.post(url) do |req|
|
80
103
|
req.headers['X-API-Token'] = api_token
|
81
104
|
req.headers['internal-request-source'] = "fastlane"
|
82
|
-
req.body =
|
83
|
-
symbol_type: "AndroidProguard",
|
84
|
-
file_name: file_name,
|
85
|
-
build: build_number,
|
86
|
-
version: version,
|
87
|
-
}
|
105
|
+
req.body = body
|
88
106
|
end
|
89
107
|
|
108
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
109
|
+
|
90
110
|
case response.status
|
91
111
|
when 200...300
|
92
|
-
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
93
112
|
response.body
|
94
113
|
when 401
|
95
114
|
UI.user_error!("Auth Error, provided invalid token")
|
@@ -111,17 +130,24 @@ module Fastlane
|
|
111
130
|
def self.create_dsym_upload(api_token, owner_name, app_name)
|
112
131
|
connection = self.connection
|
113
132
|
|
114
|
-
|
133
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/symbol_uploads"
|
134
|
+
body = {
|
135
|
+
symbol_type: 'Apple'
|
136
|
+
}
|
137
|
+
|
138
|
+
UI.message("DEBUG: POST #{url}") if ENV['DEBUG']
|
139
|
+
UI.message("DEBUG: POST body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
140
|
+
|
141
|
+
response = connection.post(url) do |req|
|
115
142
|
req.headers['X-API-Token'] = api_token
|
116
143
|
req.headers['internal-request-source'] = "fastlane"
|
117
|
-
req.body =
|
118
|
-
symbol_type: 'Apple'
|
119
|
-
}
|
144
|
+
req.body = body
|
120
145
|
end
|
121
146
|
|
147
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
148
|
+
|
122
149
|
case response.status
|
123
150
|
when 200...300
|
124
|
-
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
125
151
|
response.body
|
126
152
|
when 401
|
127
153
|
UI.user_error!("Auth Error, provided invalid token")
|
@@ -139,17 +165,24 @@ module Fastlane
|
|
139
165
|
def self.update_symbol_upload(api_token, owner_name, app_name, symbol_upload_id, status)
|
140
166
|
connection = self.connection
|
141
167
|
|
142
|
-
|
168
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/symbol_uploads/#{symbol_upload_id}"
|
169
|
+
body = {
|
170
|
+
status: status
|
171
|
+
}
|
172
|
+
|
173
|
+
UI.message("DEBUG: PATCH #{url}") if ENV['DEBUG']
|
174
|
+
UI.message("DEBUG: PATCH body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
175
|
+
|
176
|
+
response = connection.patch(url) do |req|
|
143
177
|
req.headers['X-API-Token'] = api_token
|
144
178
|
req.headers['internal-request-source'] = "fastlane"
|
145
|
-
req.body =
|
146
|
-
"status" => status
|
147
|
-
}
|
179
|
+
req.body = body
|
148
180
|
end
|
149
181
|
|
182
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
183
|
+
|
150
184
|
case response.status
|
151
185
|
when 200...300
|
152
|
-
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
153
186
|
response.body
|
154
187
|
when 401
|
155
188
|
UI.user_error!("Auth Error, provided invalid token")
|
@@ -166,6 +199,9 @@ module Fastlane
|
|
166
199
|
def self.upload_symbol(api_token, owner_name, app_name, symbol, symbol_type, symbol_upload_id, upload_url)
|
167
200
|
connection = self.connection(upload_url, true)
|
168
201
|
|
202
|
+
UI.message("DEBUG: PUT #{upload_url}") if ENV['DEBUG']
|
203
|
+
UI.message("DEBUG: PUT body <data>\n") if ENV['DEBUG']
|
204
|
+
|
169
205
|
response = connection.put do |req|
|
170
206
|
req.headers['x-ms-blob-type'] = "BlockBlob"
|
171
207
|
req.headers['Content-Length'] = File.size(symbol).to_s
|
@@ -173,20 +209,22 @@ module Fastlane
|
|
173
209
|
req.body = Faraday::UploadIO.new(symbol, 'application/octet-stream') if symbol && File.exist?(symbol)
|
174
210
|
end
|
175
211
|
|
176
|
-
|
177
|
-
|
212
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
213
|
+
|
214
|
+
log_type = "dSYM" if symbol_type == "Apple"
|
215
|
+
log_type = "mapping" if symbol_type == "Android"
|
178
216
|
|
179
217
|
case response.status
|
180
218
|
when 200...300
|
181
219
|
self.update_symbol_upload(api_token, owner_name, app_name, symbol_upload_id, 'committed')
|
182
|
-
UI.success("#{
|
220
|
+
UI.success("#{log_type} uploaded")
|
183
221
|
when 401
|
184
222
|
UI.user_error!("Auth Error, provided invalid token")
|
185
223
|
false
|
186
224
|
else
|
187
|
-
UI.error("Error uploading #{
|
225
|
+
UI.error("Error uploading #{log_type} #{response.status}: #{response.body}")
|
188
226
|
self.update_symbol_upload(api_token, owner_name, app_name, symbol_upload_id, 'aborted')
|
189
|
-
UI.error("#{
|
227
|
+
UI.error("#{log_type} upload aborted")
|
190
228
|
false
|
191
229
|
end
|
192
230
|
end
|
@@ -202,12 +240,17 @@ module Fastlane
|
|
202
240
|
# ipa field is used for .apk, .aab and .ipa files
|
203
241
|
options[:ipa] = Faraday::UploadIO.new(file, 'application/octet-stream') if file && File.exist?(file)
|
204
242
|
|
243
|
+
UI.message("DEBUG: POST #{upload_url}") if ENV['DEBUG']
|
244
|
+
UI.message("DEBUG: POST body <data>\n") if ENV['DEBUG']
|
245
|
+
|
205
246
|
response = connection.post do |req|
|
206
247
|
req.options.timeout = timeout
|
207
248
|
req.headers['internal-request-source'] = "fastlane"
|
208
249
|
req.body = options
|
209
250
|
end
|
210
251
|
|
252
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
253
|
+
|
211
254
|
case response.status
|
212
255
|
when 200...300
|
213
256
|
UI.message("Binary uploaded")
|
@@ -227,23 +270,30 @@ module Fastlane
|
|
227
270
|
def self.update_release_upload(api_token, owner_name, app_name, upload_id, status)
|
228
271
|
connection = self.connection
|
229
272
|
|
230
|
-
|
273
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/release_uploads/#{upload_id}"
|
274
|
+
body = {
|
275
|
+
status: status
|
276
|
+
}
|
277
|
+
|
278
|
+
UI.message("DEBUG: PATCH #{url}") if ENV['DEBUG']
|
279
|
+
UI.message("DEBUG: PATCH body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
280
|
+
|
281
|
+
response = connection.patch(url) do |req|
|
231
282
|
req.headers['X-API-Token'] = api_token
|
232
283
|
req.headers['internal-request-source'] = "fastlane"
|
233
|
-
req.body =
|
234
|
-
"status" => status
|
235
|
-
}
|
284
|
+
req.body = body
|
236
285
|
end
|
237
286
|
|
287
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
288
|
+
|
238
289
|
case response.status
|
239
290
|
when 200...300
|
240
|
-
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
241
291
|
response.body
|
242
292
|
when 401
|
243
293
|
UI.user_error!("Auth Error, provided invalid token")
|
244
294
|
false
|
245
295
|
when 500...600
|
246
|
-
UI.
|
296
|
+
UI.abort_with_message!("Internal Service Error, please try again later")
|
247
297
|
else
|
248
298
|
UI.error("Error #{response.status}: #{response.body}")
|
249
299
|
false
|
@@ -253,15 +303,21 @@ module Fastlane
|
|
253
303
|
# get existing release
|
254
304
|
def self.get_release(api_token, owner_name, app_name, release_id)
|
255
305
|
connection = self.connection
|
256
|
-
|
306
|
+
|
307
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/releases/#{release_id}"
|
308
|
+
|
309
|
+
UI.message("DEBUG: GET #{url}") if ENV['DEBUG']
|
310
|
+
|
311
|
+
response = connection.get(url) do |req|
|
257
312
|
req.headers['X-API-Token'] = api_token
|
258
313
|
req.headers['internal-request-source'] = "fastlane"
|
259
314
|
end
|
260
315
|
|
316
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
317
|
+
|
261
318
|
case response.status
|
262
319
|
when 200...300
|
263
320
|
release = response.body
|
264
|
-
UI.message("DEBUG: #{JSON.pretty_generate(release)}") if ENV['DEBUG']
|
265
321
|
release
|
266
322
|
when 404
|
267
323
|
UI.error("Not found, invalid release url")
|
@@ -279,15 +335,20 @@ module Fastlane
|
|
279
335
|
def self.get_destination(api_token, owner_name, app_name, destination_type, destination_name)
|
280
336
|
connection = self.connection
|
281
337
|
|
282
|
-
|
338
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/distribution_#{destination_type}s/#{ERB::Util.url_encode(destination_name)}"
|
339
|
+
|
340
|
+
UI.message("DEBUG: GET #{url}") if ENV['DEBUG']
|
341
|
+
|
342
|
+
response = connection.get(url) do |req|
|
283
343
|
req.headers['X-API-Token'] = api_token
|
284
344
|
req.headers['internal-request-source'] = "fastlane"
|
285
345
|
end
|
286
346
|
|
347
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
348
|
+
|
287
349
|
case response.status
|
288
350
|
when 200...300
|
289
351
|
destination = response.body
|
290
|
-
UI.message("DEBUG: received #{destination_type} #{JSON.pretty_generate(destination)}") if ENV['DEBUG']
|
291
352
|
destination
|
292
353
|
when 404
|
293
354
|
UI.error("Not found, invalid distribution #{destination_type} name")
|
@@ -305,14 +366,22 @@ module Fastlane
|
|
305
366
|
def self.update_release(api_token, owner_name, app_name, release_id, release_notes = '')
|
306
367
|
connection = self.connection
|
307
368
|
|
308
|
-
|
369
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/releases/#{release_id}"
|
370
|
+
body = {
|
371
|
+
release_notes: release_notes
|
372
|
+
}
|
373
|
+
|
374
|
+
UI.message("DEBUG: PUT #{url}") if ENV['DEBUG']
|
375
|
+
UI.message("DEBUG: PUT body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
376
|
+
|
377
|
+
response = connection.put(url) do |req|
|
309
378
|
req.headers['X-API-Token'] = api_token
|
310
379
|
req.headers['internal-request-source'] = "fastlane"
|
311
|
-
req.body =
|
312
|
-
release_notes: release_notes
|
313
|
-
}
|
380
|
+
req.body = body
|
314
381
|
end
|
315
382
|
|
383
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
384
|
+
|
316
385
|
case response.status
|
317
386
|
when 200...300
|
318
387
|
# get full release info
|
@@ -321,8 +390,6 @@ module Fastlane
|
|
321
390
|
|
322
391
|
download_url = release['download_url']
|
323
392
|
|
324
|
-
UI.message("DEBUG: #{JSON.pretty_generate(release)}") if ENV['DEBUG']
|
325
|
-
|
326
393
|
Actions.lane_context[Fastlane::Actions::SharedValues::APPCENTER_DOWNLOAD_LINK] = download_url
|
327
394
|
Actions.lane_context[Fastlane::Actions::SharedValues::APPCENTER_BUILD_INFORMATION] = release
|
328
395
|
|
@@ -345,19 +412,25 @@ module Fastlane
|
|
345
412
|
def self.update_release_metadata(api_token, owner_name, app_name, release_id, dsa_signature)
|
346
413
|
return if dsa_signature.to_s == ''
|
347
414
|
|
348
|
-
|
349
|
-
|
415
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/releases/#{release_id}"
|
416
|
+
body = {
|
417
|
+
metadata: {
|
418
|
+
dsa_signature: dsa_signature
|
419
|
+
}
|
350
420
|
}
|
351
421
|
|
422
|
+
UI.message("DEBUG: PATCH #{url}") if ENV['DEBUG']
|
423
|
+
UI.message("DEBUG: PATCH body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
424
|
+
|
352
425
|
connection = self.connection
|
353
|
-
response = connection.patch(
|
426
|
+
response = connection.patch(url) do |req|
|
354
427
|
req.headers['X-API-Token'] = api_token
|
355
428
|
req.headers['internal-request-source'] = "fastlane"
|
356
|
-
req.body =
|
357
|
-
metadata: release_metadata
|
358
|
-
}
|
429
|
+
req.body = body
|
359
430
|
end
|
360
431
|
|
432
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
433
|
+
|
361
434
|
case response.status
|
362
435
|
when 200...300
|
363
436
|
UI.message("Release Metadata was successfully updated for release '#{release_id}'")
|
@@ -372,25 +445,32 @@ module Fastlane
|
|
372
445
|
false
|
373
446
|
end
|
374
447
|
end
|
375
|
-
|
448
|
+
|
376
449
|
# add release to distribution group or store
|
377
450
|
def self.add_to_destination(api_token, owner_name, app_name, release_id, destination_type, destination_id, mandatory_update = false, notify_testers = false)
|
378
451
|
connection = self.connection
|
379
452
|
|
380
|
-
|
453
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}/releases/#{release_id}/#{destination_type}s"
|
454
|
+
body = {
|
455
|
+
id: destination_id
|
456
|
+
}
|
381
457
|
|
382
|
-
body = { "id" => destination_id }
|
383
458
|
if destination_type == "group"
|
384
459
|
body["mandatory_update"] = mandatory_update
|
385
460
|
body["notify_testers"] = notify_testers
|
386
461
|
end
|
387
462
|
|
388
|
-
|
463
|
+
UI.message("DEBUG: POST #{url}") if ENV['DEBUG']
|
464
|
+
UI.message("DEBUG: POST body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
465
|
+
|
466
|
+
response = connection.post(url) do |req|
|
389
467
|
req.headers['X-API-Token'] = api_token
|
390
468
|
req.headers['internal-request-source'] = "fastlane"
|
391
469
|
req.body = body
|
392
470
|
end
|
393
471
|
|
472
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
473
|
+
|
394
474
|
case response.status
|
395
475
|
when 200...300
|
396
476
|
# get full release info
|
@@ -399,8 +479,6 @@ module Fastlane
|
|
399
479
|
|
400
480
|
download_url = release['download_url']
|
401
481
|
|
402
|
-
UI.message("DEBUG: received release #{JSON.pretty_generate(release)}") if ENV['DEBUG']
|
403
|
-
|
404
482
|
Actions.lane_context[Fastlane::Actions::SharedValues::APPCENTER_DOWNLOAD_LINK] = download_url
|
405
483
|
Actions.lane_context[Fastlane::Actions::SharedValues::APPCENTER_BUILD_INFORMATION] = release
|
406
484
|
|
@@ -423,11 +501,17 @@ module Fastlane
|
|
423
501
|
def self.get_app(api_token, owner_name, app_name)
|
424
502
|
connection = self.connection
|
425
503
|
|
426
|
-
|
504
|
+
url = "v0.1/apps/#{owner_name}/#{app_name}"
|
505
|
+
|
506
|
+
UI.message("DEBUG: GET #{url}") if ENV['DEBUG']
|
507
|
+
|
508
|
+
response = connection.get(url) do |req|
|
427
509
|
req.headers['X-API-Token'] = api_token
|
428
510
|
req.headers['internal-request-source'] = "fastlane"
|
429
511
|
end
|
430
512
|
|
513
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
514
|
+
|
431
515
|
case response.status
|
432
516
|
when 200...300
|
433
517
|
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
@@ -448,23 +532,28 @@ module Fastlane
|
|
448
532
|
def self.create_app(api_token, owner_type, owner_name, app_name, app_display_name, os, platform)
|
449
533
|
connection = self.connection
|
450
534
|
|
451
|
-
|
535
|
+
url = owner_type == "user" ? "v0.1/apps" : "v0.1/orgs/#{owner_name}/apps"
|
536
|
+
body = {
|
537
|
+
display_name: app_display_name,
|
538
|
+
name: app_name,
|
539
|
+
os: os,
|
540
|
+
platform: platform
|
541
|
+
}
|
542
|
+
|
543
|
+
UI.message("DEBUG: POST #{url}") if ENV['DEBUG']
|
544
|
+
UI.message("DEBUG: POST body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
452
545
|
|
453
|
-
response = connection.post(
|
546
|
+
response = connection.post(url) do |req|
|
454
547
|
req.headers['X-API-Token'] = api_token
|
455
548
|
req.headers['internal-request-source'] = "fastlane"
|
456
|
-
req.body =
|
457
|
-
"display_name" => app_display_name,
|
458
|
-
"name" => app_name,
|
459
|
-
"os" => os,
|
460
|
-
"platform" => platform
|
461
|
-
}
|
549
|
+
req.body = body
|
462
550
|
end
|
463
551
|
|
552
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
553
|
+
|
464
554
|
case response.status
|
465
555
|
when 200...300
|
466
556
|
created = response.body
|
467
|
-
UI.message("DEBUG: #{JSON.pretty_generate(created)}") if ENV['DEBUG']
|
468
557
|
UI.success("Created #{os}/#{platform} app with name \"#{created['name']}\" and display name \"#{created['display_name']}\" for #{owner_type} \"#{owner_name}\"")
|
469
558
|
true
|
470
559
|
when 401
|
@@ -479,16 +568,19 @@ module Fastlane
|
|
479
568
|
def self.fetch_distribution_groups(api_token:, owner_name:, app_name:)
|
480
569
|
connection = self.connection
|
481
570
|
|
482
|
-
|
571
|
+
url = "/v0.1/apps/#{owner_name}/#{app_name}/distribution_groups"
|
572
|
+
|
573
|
+
UI.message("DEBUG: GET #{url}") if ENV['DEBUG']
|
483
574
|
|
484
|
-
response = connection.get(
|
575
|
+
response = connection.get(url) do |req|
|
485
576
|
req.headers['X-API-Token'] = api_token
|
486
577
|
req.headers['internal-request-source'] = "fastlane"
|
487
578
|
end
|
488
579
|
|
580
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
581
|
+
|
489
582
|
case response.status
|
490
583
|
when 200...300
|
491
|
-
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
492
584
|
response.body
|
493
585
|
when 401
|
494
586
|
UI.user_error!("Auth Error, provided invalid token")
|
@@ -505,16 +597,19 @@ module Fastlane
|
|
505
597
|
def self.fetch_devices(api_token:, owner_name:, app_name:, distribution_group:)
|
506
598
|
connection = self.connection(nil, false, true)
|
507
599
|
|
508
|
-
|
600
|
+
url = "/v0.1/apps/#{owner_name}/#{app_name}/distribution_groups/#{ERB::Util.url_encode(distribution_group)}/devices/download_devices_list"
|
509
601
|
|
510
|
-
|
602
|
+
UI.message("DEBUG: GET #{url}") if ENV['DEBUG']
|
603
|
+
|
604
|
+
response = connection.get(url) do |req|
|
511
605
|
req.headers['X-API-Token'] = api_token
|
512
606
|
req.headers['internal-request-source'] = "fastlane"
|
513
607
|
end
|
514
608
|
|
609
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
610
|
+
|
515
611
|
case response.status
|
516
612
|
when 200...300
|
517
|
-
UI.message("DEBUG: #{response.body.inspect}") if ENV['DEBUG']
|
518
613
|
response.body
|
519
614
|
when 401
|
520
615
|
UI.user_error!("Auth Error, provided invalid token")
|
@@ -528,17 +623,87 @@ module Fastlane
|
|
528
623
|
end
|
529
624
|
end
|
530
625
|
|
531
|
-
|
626
|
+
def self.fetch_releases(api_token:, owner_name:, app_name:)
|
627
|
+
connection = self.connection(nil, false, true)
|
628
|
+
|
629
|
+
url = "/v0.1/apps/#{owner_name}/#{app_name}/releases"
|
630
|
+
|
631
|
+
UI.message("DEBUG: GET #{url}") if ENV['DEBUG']
|
632
|
+
|
633
|
+
response = connection.get(url) do |req|
|
634
|
+
req.headers['X-API-Token'] = api_token
|
635
|
+
req.headers['internal-request-source'] = "fastlane"
|
636
|
+
end
|
637
|
+
|
638
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
639
|
+
|
640
|
+
case response.status
|
641
|
+
when 200...300
|
642
|
+
JSON.parse(response.body)
|
643
|
+
when 401
|
644
|
+
UI.user_error!("Auth Error, provided invalid token")
|
645
|
+
false
|
646
|
+
when 404
|
647
|
+
UI.error("Not found, invalid owner or application name")
|
648
|
+
false
|
649
|
+
else
|
650
|
+
UI.error("Error #{response.status}: #{response.body}")
|
651
|
+
false
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
532
655
|
def self.get_release_url(owner_type, owner_name, app_name, release_id)
|
533
656
|
owner_path = owner_type == "user" ? "users/#{owner_name}" : "orgs/#{owner_name}"
|
657
|
+
if ENV['APPCENTER_ENV']&.upcase == 'INT'
|
658
|
+
return "https://portal-server-core-integration.dev.avalanch.es/#{owner_path}/apps/#{app_name}/distribute/releases/#{release_id}"
|
659
|
+
end
|
660
|
+
|
534
661
|
return "https://appcenter.ms/#{owner_path}/apps/#{app_name}/distribute/releases/#{release_id}"
|
535
662
|
end
|
536
663
|
|
537
|
-
# Note: This does not support testing environment (INT)
|
538
664
|
def self.get_install_url(owner_type, owner_name, app_name)
|
539
665
|
owner_path = owner_type == "user" ? "users/#{owner_name}" : "orgs/#{owner_name}"
|
666
|
+
if ENV['APPCENTER_ENV']&.upcase == 'INT'
|
667
|
+
return "https://install.portal-server-core-integration.dev.avalanch.es/#{owner_path}/apps/#{app_name}"
|
668
|
+
end
|
669
|
+
|
540
670
|
return "https://install.appcenter.ms/#{owner_path}/apps/#{app_name}"
|
541
671
|
end
|
672
|
+
|
673
|
+
# add new created app to existing distribution group
|
674
|
+
def self.add_new_app_to_distribution_group(api_token:, owner_name:, app_name:, destination_name:)
|
675
|
+
url = URI.escape("/v0.1/orgs/#{owner_name}/distribution_groups/#{destination_name}/apps")
|
676
|
+
body = {
|
677
|
+
apps: [
|
678
|
+
{ name: app_name }
|
679
|
+
]
|
680
|
+
}
|
681
|
+
|
682
|
+
UI.message("DEBUG: POST #{url}") if ENV['DEBUG']
|
683
|
+
UI.message("DEBUG: POST body #{JSON.pretty_generate(body)}\n") if ENV['DEBUG']
|
684
|
+
|
685
|
+
response = connection.post(url) do |req|
|
686
|
+
req.headers['X-API-Token'] = api_token
|
687
|
+
req.headers['internal-request-source'] = "fastlane"
|
688
|
+
req.body = body
|
689
|
+
end
|
690
|
+
|
691
|
+
UI.message("DEBUG: #{response.status} #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
692
|
+
|
693
|
+
case response.status
|
694
|
+
when 200...300
|
695
|
+
created = response.body
|
696
|
+
UI.success("Added new app #{app_name} to distribution group #{destination_name}")
|
697
|
+
when 401
|
698
|
+
UI.user_error!("Auth Error, provided invalid token")
|
699
|
+
when 404
|
700
|
+
UI.error("Not found, invalid distribution group name #{destination_name}")
|
701
|
+
when 409
|
702
|
+
UI.success("App already added to distribution group #{destination_name}")
|
703
|
+
else
|
704
|
+
UI.error("Error adding app to distribution group #{response.status}: #{response.body}")
|
705
|
+
end
|
706
|
+
end
|
542
707
|
end
|
543
708
|
end
|
544
709
|
end
|