fastlane-plugin-appcenter 0.2.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 156b2b0f457a0ad05bd0abe5d232e4e960d36190002882545734f8a150e9284c
|
4
|
+
data.tar.gz: bff39320edca4e3337db294afb2d498aa249ec24320e1b77f170645af804f086
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64cc092929a5189a4b5b610b329c2708aebbd4c7e586114d0a80be10d3b5267637d068713e8719a22a87fb8ff196ffd7ddc69aa09b8139d45f19fa410b4385d4
|
7
|
+
data.tar.gz: 6af5dbf4e3d3e44c8c0e1eddcda88779723f49eeda41f493eeed7ba6956864eef591bff5b1c35eaf1175efd4705907b8e28044d4a5ea07c34b88cf9b38c8dcff
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-appcenter)
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/fastlane-plugin-appcenter.svg)](https://badge.fury.io/rb/fastlane-plugin-appcenter)
|
5
|
-
[![Build Status](https://travis-ci.org/
|
5
|
+
[![Build Status](https://travis-ci.org/microsoft/fastlane-plugin-appcenter.svg?branch=master)](https://travis-ci.org/microsoft/fastlane-plugin-appcenter)
|
6
6
|
|
7
7
|
## Getting Started
|
8
8
|
|
@@ -24,7 +24,8 @@ appcenter_upload(
|
|
24
24
|
api_token: "<appcenter token>",
|
25
25
|
owner_name: "<your appcenter account name>",
|
26
26
|
app_name: "<your app name>",
|
27
|
-
apk: "<path to android build binary>"
|
27
|
+
apk: "<path to android build binary>",
|
28
|
+
notify_testers: true # Set to false if you don't want to notify testers of your new release (default: `false`)
|
28
29
|
)
|
29
30
|
```
|
30
31
|
|
@@ -39,7 +40,7 @@ The action parameters `api_token` and `owner_name` can also be omitted when thei
|
|
39
40
|
- `APPCENTER_DISTRIBUTE_UPLOAD_DSYM_ONLY` - Flag to upload only the dSYM file to App Center
|
40
41
|
- `APPCENTER_DISTRIBUTE_GROUP` - Comma separated list of Distribution Group names
|
41
42
|
- `APPCENTER_DISTRIBUTE_MANDATORY_UPDATE` - Require users to update to this release
|
42
|
-
- `APPCENTER_DISTRIBUTE_NOTIFY_TESTERS` - Send email notification about release
|
43
|
+
- `APPCENTER_DISTRIBUTE_NOTIFY_TESTERS` - Send email notification about release (default: `false`)
|
43
44
|
- `APPCENTER_DISTRIBUTE_RELEASE_NOTES` - Release notes
|
44
45
|
- `APPCENTER_DISTRIBUTE_RELEASE_NOTES_CLIPPING` - Clip release notes if its length is more then 5000, `true` by default
|
45
46
|
- `APPCENTER_DISTRIBUTE_RELEASE_NOTES_LINK` - Additional release notes link
|
@@ -70,7 +71,7 @@ rubocop -a
|
|
70
71
|
|
71
72
|
## Issues and Feedback
|
72
73
|
|
73
|
-
For any other issues and feedback about this plugin, please open a [GitHub issue](https://github.com/
|
74
|
+
For any other issues and feedback about this plugin, please open a [GitHub issue](https://github.com/microsoft/fastlane-plugin-appcenter/issues).
|
74
75
|
|
75
76
|
## Troubleshooting
|
76
77
|
|
@@ -18,6 +18,8 @@ module Fastlane
|
|
18
18
|
app_name = params[:app_name]
|
19
19
|
file = params[:ipa]
|
20
20
|
dsym = params[:dsym]
|
21
|
+
build_number = params[:build_number]
|
22
|
+
version = params[:version]
|
21
23
|
|
22
24
|
dsym_path = nil
|
23
25
|
if dsym
|
@@ -42,7 +44,13 @@ module Fastlane
|
|
42
44
|
values[:dsym_path] = dsym_path
|
43
45
|
|
44
46
|
UI.message("Starting dSYM upload...")
|
45
|
-
|
47
|
+
|
48
|
+
if File.extname(dsym_path) == ".txt"
|
49
|
+
file_name = File.basename(dsym_path)
|
50
|
+
dsym_upload_details = Helper::AppcenterHelper.create_mapping_upload(api_token, owner_name, app_name, file_name ,build_number, version)
|
51
|
+
else
|
52
|
+
dsym_upload_details = Helper::AppcenterHelper.create_dsym_upload(api_token, owner_name, app_name)
|
53
|
+
end
|
46
54
|
|
47
55
|
if dsym_upload_details
|
48
56
|
symbol_upload_id = dsym_upload_details['symbol_upload_id']
|
@@ -60,7 +68,8 @@ module Fastlane
|
|
60
68
|
api_token = params[:api_token]
|
61
69
|
owner_name = params[:owner_name]
|
62
70
|
app_name = params[:app_name]
|
63
|
-
|
71
|
+
destinations = params[:destinations]
|
72
|
+
destination_type = params[:destination_type]
|
64
73
|
mandatory_update = params[:mandatory_update]
|
65
74
|
notify_testers = params[:notify_testers]
|
66
75
|
release_notes = params[:release_notes]
|
@@ -85,7 +94,6 @@ module Fastlane
|
|
85
94
|
].detect { |e| !e.to_s.empty? }
|
86
95
|
|
87
96
|
UI.user_error!("Couldn't find build file at path '#{file}'") unless file && File.exist?(file)
|
88
|
-
UI.user_error!("No Distribute Group given, pass using `group: 'group name'`") unless group && !group.empty?
|
89
97
|
|
90
98
|
UI.message("Starting release upload...")
|
91
99
|
upload_details = Helper::AppcenterHelper.create_release_upload(api_token, owner_name, app_name)
|
@@ -102,19 +110,19 @@ module Fastlane
|
|
102
110
|
|
103
111
|
Helper::AppcenterHelper.update_release(api_token, owner_name, app_name, release_id, release_notes)
|
104
112
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
if
|
109
|
-
|
110
|
-
distributed_release = Helper::AppcenterHelper.
|
113
|
+
destinations_array = destinations.split(',')
|
114
|
+
destinations_array.each do |destination_name|
|
115
|
+
destination = Helper::AppcenterHelper.get_destination(api_token, owner_name, app_name, destination_type, destination_name)
|
116
|
+
if destination
|
117
|
+
destination_id = destination['id']
|
118
|
+
distributed_release = Helper::AppcenterHelper.add_to_destination(api_token, owner_name, app_name, release_id, destination_type, destination_id, mandatory_update, notify_testers)
|
111
119
|
if distributed_release
|
112
|
-
UI.success("Release #{distributed_release['short_version']} was successfully distributed to
|
120
|
+
UI.success("Release #{distributed_release['short_version']} was successfully distributed to #{destination_type} \"#{destination_name}\"")
|
113
121
|
else
|
114
122
|
UI.error("Release '#{release_id}' was not found")
|
115
123
|
end
|
116
124
|
else
|
117
|
-
UI.error("
|
125
|
+
UI.error("#{destination_type} '#{destination_name}' was not found")
|
118
126
|
end
|
119
127
|
end
|
120
128
|
end
|
@@ -253,20 +261,41 @@ module Fastlane
|
|
253
261
|
FastlaneCore::ConfigItem.new(key: :group,
|
254
262
|
env_name: "APPCENTER_DISTRIBUTE_GROUP",
|
255
263
|
description: "Comma separated list of Distribution Group names",
|
264
|
+
optional: true,
|
265
|
+
type: String,
|
266
|
+
deprecated: true,
|
267
|
+
verify_block: proc do |value|
|
268
|
+
UI.user_error!("Option `group` is deprecated. Use `destinations` and `destination_type`")
|
269
|
+
end),
|
270
|
+
|
271
|
+
FastlaneCore::ConfigItem.new(key: :destinations,
|
272
|
+
env_name: "APPCENTER_DISTRIBUTE_DESTINATIONS",
|
273
|
+
description: "Comma separated list of destination names. Both distribution groups and stores are supported. All names are required to be of the same destination type",
|
256
274
|
default_value: "Collaborators",
|
257
275
|
optional: true,
|
258
276
|
type: String),
|
259
277
|
|
278
|
+
|
279
|
+
FastlaneCore::ConfigItem.new(key: :destination_type,
|
280
|
+
env_name: "APPCENTER_DISTRIBUTE_DESTINATION_TYPE",
|
281
|
+
description: "Destination type of distribution destination. 'group' and 'store' are supported",
|
282
|
+
default_value: "group",
|
283
|
+
optional: true,
|
284
|
+
type: String,
|
285
|
+
verify_block: proc do |value|
|
286
|
+
UI.user_error!("No or incorrect destination type given. Use 'group' or 'store'") unless value && !value.empty? && ["group", "store"].include?(value)
|
287
|
+
end),
|
288
|
+
|
260
289
|
FastlaneCore::ConfigItem.new(key: :mandatory_update,
|
261
290
|
env_name: "APPCENTER_DISTRIBUTE_MANDATORY_UPDATE",
|
262
|
-
description: "Require users to update to this release",
|
291
|
+
description: "Require users to update to this release. Ignored if destination type is 'store'",
|
263
292
|
optional: true,
|
264
293
|
is_string: false,
|
265
294
|
default_value: false),
|
266
295
|
|
267
296
|
FastlaneCore::ConfigItem.new(key: :notify_testers,
|
268
297
|
env_name: "APPCENTER_DISTRIBUTE_NOTIFY_TESTERS",
|
269
|
-
description: "Send email notification about release",
|
298
|
+
description: "Send email notification about release. Ignored if destination type is 'store'",
|
270
299
|
optional: true,
|
271
300
|
is_string: false,
|
272
301
|
default_value: false),
|
@@ -289,7 +318,19 @@ module Fastlane
|
|
289
318
|
env_name: "APPCENTER_DISTRIBUTE_RELEASE_NOTES_LINK",
|
290
319
|
description: "Additional release notes link",
|
291
320
|
optional: true,
|
292
|
-
type: String)
|
321
|
+
type: String),
|
322
|
+
|
323
|
+
FastlaneCore::ConfigItem.new(key: :build_number,
|
324
|
+
env_name: "APPCENTER_DISTRIBUTE_BUILD_NUMBER",
|
325
|
+
description: "The build number. Used (and required) for uploading Android ProGuard mapping file",
|
326
|
+
optional: true,
|
327
|
+
type: String),
|
328
|
+
|
329
|
+
FastlaneCore::ConfigItem.new(key: :version,
|
330
|
+
env_name: "APPCENTER_DISTRIBUTE_VERSION",
|
331
|
+
description: "The version number. Used (and required) for uploading Android ProGuard mapping file",
|
332
|
+
optional: true,
|
333
|
+
type: String),
|
293
334
|
]
|
294
335
|
end
|
295
336
|
|
@@ -311,20 +352,24 @@ module Fastlane
|
|
311
352
|
owner_name: "appcenter_owner",
|
312
353
|
app_name: "testing_app",
|
313
354
|
apk: "./app-release.apk",
|
314
|
-
|
315
|
-
|
355
|
+
destinations: "Testers",
|
356
|
+
destination_type: "group",
|
357
|
+
release_notes: "release notes",
|
358
|
+
notify_testers: false
|
316
359
|
)',
|
317
360
|
'appcenter_upload(
|
318
361
|
api_token: "...",
|
319
362
|
owner_name: "appcenter_owner",
|
320
363
|
app_name: "testing_app",
|
321
364
|
apk: "./app-release.ipa",
|
322
|
-
|
365
|
+
destinations: "Testers,Alpha",
|
366
|
+
destination_type: "group",
|
323
367
|
dsym: "./app.dSYM.zip",
|
324
|
-
release_notes: "release notes"
|
368
|
+
release_notes: "release notes",
|
369
|
+
notify_testers: false
|
325
370
|
)'
|
326
371
|
]
|
327
372
|
end
|
328
373
|
end
|
329
374
|
end
|
330
|
-
end
|
375
|
+
end
|
@@ -54,6 +54,42 @@ module Fastlane
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
# creates new mapping upload in appcenter
|
58
|
+
# returns:
|
59
|
+
# symbol_upload_id
|
60
|
+
# upload_url
|
61
|
+
# expiration_date
|
62
|
+
def self.create_mapping_upload(api_token, owner_name, app_name, file_name, build_number, version)
|
63
|
+
connection = self.connection
|
64
|
+
|
65
|
+
response = connection.post do |req|
|
66
|
+
req.url("/v0.1/apps/#{owner_name}/#{app_name}/symbol_uploads")
|
67
|
+
req.headers['X-API-Token'] = api_token
|
68
|
+
req.headers['internal-request-source'] = "fastlane"
|
69
|
+
req.body = {
|
70
|
+
symbol_type: "AndroidProguard",
|
71
|
+
file_name: file_name,
|
72
|
+
build: build_number,
|
73
|
+
version: version,
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
case response.status
|
78
|
+
when 200...300
|
79
|
+
UI.message("DEBUG: #{JSON.pretty_generate(response.body)}\n") if ENV['DEBUG']
|
80
|
+
response.body
|
81
|
+
when 401
|
82
|
+
UI.user_error!("Auth Error, provided invalid token")
|
83
|
+
false
|
84
|
+
when 404
|
85
|
+
UI.error("Not found, invalid owner or application name")
|
86
|
+
false
|
87
|
+
else
|
88
|
+
UI.error("Error #{response.status}: #{response.body}")
|
89
|
+
false
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
57
93
|
# creates new dSYM upload in appcenter
|
58
94
|
# returns:
|
59
95
|
# symbol_upload_id
|
@@ -209,26 +245,26 @@ module Fastlane
|
|
209
245
|
end
|
210
246
|
end
|
211
247
|
|
212
|
-
# get distribution group
|
213
|
-
def self.
|
248
|
+
# get distribution group or store
|
249
|
+
def self.get_destination(api_token, owner_name, app_name, destination_type, destination_name)
|
214
250
|
connection = self.connection
|
215
251
|
|
216
252
|
response = connection.get do |req|
|
217
|
-
req.url("/v0.1/apps/#{owner_name}/#{app_name}/
|
253
|
+
req.url("/v0.1/apps/#{owner_name}/#{app_name}/distribution_#{destination_type}s/#{ERB::Util.url_encode(destination_name)}")
|
218
254
|
req.headers['X-API-Token'] = api_token
|
219
255
|
req.headers['internal-request-source'] = "fastlane"
|
220
256
|
end
|
221
257
|
|
222
258
|
case response.status
|
223
259
|
when 200...300
|
224
|
-
|
225
|
-
UI.message("DEBUG: received
|
226
|
-
|
260
|
+
destination = response.body
|
261
|
+
UI.message("DEBUG: received #{destination_type} #{JSON.pretty_generate(destination)}") if ENV['DEBUG']
|
262
|
+
destination
|
227
263
|
when 404
|
228
|
-
UI.error("Not found, invalid distribution
|
264
|
+
UI.error("Not found, invalid distribution #{destination_type} name")
|
229
265
|
false
|
230
266
|
else
|
231
|
-
UI.error("Error getting
|
267
|
+
UI.error("Error getting #{destination_type} #{response.status}: #{response.body}")
|
232
268
|
false
|
233
269
|
end
|
234
270
|
end
|
@@ -270,21 +306,23 @@ module Fastlane
|
|
270
306
|
end
|
271
307
|
end
|
272
308
|
|
273
|
-
# add release to distribution group
|
274
|
-
def self.
|
309
|
+
# add release to distribution group or store
|
310
|
+
def self.add_to_destination(api_token, owner_name, app_name, release_id, destination_type, destination_id, mandatory_update = false, notify_testers = false)
|
275
311
|
connection = self.connection
|
276
312
|
|
277
313
|
UI.message("DEBUG: getting #{release_id}") if ENV['DEBUG']
|
278
314
|
|
315
|
+
body = { "id" => destination_id }
|
316
|
+
if destination_type == "group"
|
317
|
+
body["mandatory_update"] = mandatory_update
|
318
|
+
body["notify_testers"] = notify_testers
|
319
|
+
end
|
320
|
+
|
279
321
|
response = connection.post do |req|
|
280
|
-
req.url("/v0.1/apps/#{owner_name}/#{app_name}/releases/#{release_id}
|
322
|
+
req.url("/v0.1/apps/#{owner_name}/#{app_name}/releases/#{release_id}/#{destination_type}s")
|
281
323
|
req.headers['X-API-Token'] = api_token
|
282
324
|
req.headers['internal-request-source'] = "fastlane"
|
283
|
-
req.body =
|
284
|
-
"id" => group_id,
|
285
|
-
"mandatory_update" => mandatory_update,
|
286
|
-
"notify_testers" => notify_testers
|
287
|
-
}
|
325
|
+
req.body = body
|
288
326
|
end
|
289
327
|
|
290
328
|
case response.status
|
@@ -303,10 +341,10 @@ module Fastlane
|
|
303
341
|
|
304
342
|
release
|
305
343
|
when 404
|
306
|
-
UI.error("Not found, invalid distribution
|
344
|
+
UI.error("Not found, invalid distribution #{destination_type} name")
|
307
345
|
false
|
308
346
|
else
|
309
|
-
UI.error("Error adding to
|
347
|
+
UI.error("Error adding to #{destination_type} #{response.status}: #{response.body}")
|
310
348
|
false
|
311
349
|
end
|
312
350
|
end
|
@@ -363,4 +401,4 @@ module Fastlane
|
|
363
401
|
end
|
364
402
|
end
|
365
403
|
end
|
366
|
-
end
|
404
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-appcenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Microsoft Corporation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,7 +106,7 @@ files:
|
|
106
106
|
- lib/fastlane/plugin/appcenter/actions/appcenter_upload_action.rb
|
107
107
|
- lib/fastlane/plugin/appcenter/helper/appcenter_helper.rb
|
108
108
|
- lib/fastlane/plugin/appcenter/version.rb
|
109
|
-
homepage: https://github.com/
|
109
|
+
homepage: https://github.com/microsoft/fastlane-plugin-appcenter
|
110
110
|
licenses:
|
111
111
|
- MIT
|
112
112
|
metadata: {}
|