fastlane-plugin-appcenter 1.3.0 → 1.4.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: f420746739b204f6bfd6e9e5dd23f841028009e63ed49adf45107b053eeb24ac
|
4
|
+
data.tar.gz: '07896d07c221682028e2c59166c8d248a2ede8d953a3da408f734509eb10ae3a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71b84cb05df74504d82d8aaf83626c999f69fdc06481fc072baada8aa29d24fd9e13652359f84a8cca5417b64f3457b5f33dd12d1a769e388e9aa430b0befb7e
|
7
|
+
data.tar.gz: 6e85fa4da98dfbba7a4147aad34aed090dc1e69224495be770587149dd0efb27747ac5b4ed4b7d1570b24656a610477dab359edbaaedcd6a05fde8d5ef50a452
|
data/README.md
CHANGED
@@ -36,11 +36,11 @@ The action parameters `api_token` and `owner_name` can also be omitted when thei
|
|
36
36
|
- `APPCENTER_OWNER_NAME` - Owner name
|
37
37
|
- `APPCENTER_APP_NAME` - App name. If there is no app with such name, you will be prompted to create one
|
38
38
|
- `APPCENTER_DISTRIBUTE_APK` - Build release path for android build
|
39
|
-
- `APPCENTER_DISTRIBUTE_AAB` - Build release path for android app bundle build
|
39
|
+
- `APPCENTER_DISTRIBUTE_AAB` - Build release path for android app bundle build
|
40
40
|
- `APPCENTER_DISTRIBUTE_IPA` - Build release path for ios build
|
41
|
-
- `APPCENTER_DISTRIBUTE_DSYM` - Path to your symbols (app.dSYM.zip) file
|
41
|
+
- `APPCENTER_DISTRIBUTE_DSYM` - Path to your symbols (app.dSYM.zip) file
|
42
42
|
- `APPCENTER_DISTRIBUTE_UPLOAD_DSYM_ONLY` - Flag to upload only the dSYM file to App Center
|
43
|
-
- `APPCENTER_DISTRIBUTE_ANDROID_MAPPING` - Path to your Android mapping.txt file
|
43
|
+
- `APPCENTER_DISTRIBUTE_ANDROID_MAPPING` - Path to your Android mapping.txt file
|
44
44
|
- `APPCENTER_DISTRIBUTE_UPLOAD_ANDROID_MAPPING_ONLY` - Flag to upload only the mapping file to App Center
|
45
45
|
- `APPCENTER_DISTRIBUTE_DESTINATIONS` - Comma separated list of destination names. Both distribution groups and stores are supported. All names are required to be of the same destination type. Default is `Collaborators`.
|
46
46
|
- `APPCENTER_DISTRIBUTE_DESTINATION_TYPE` - Destination type of distribution destination. `group` and `store` are supported. Default is `group`
|
@@ -44,7 +44,7 @@ module Fastlane
|
|
44
44
|
values[:dsym_path] = dsym_path
|
45
45
|
|
46
46
|
UI.message("Starting dSYM upload...")
|
47
|
-
|
47
|
+
|
48
48
|
# TODO: this should eventually be removed once we have warned of deprecation for long enough
|
49
49
|
if File.extname(dsym_path) == ".txt"
|
50
50
|
file_name = File.basename(dsym_path)
|
@@ -103,6 +103,8 @@ module Fastlane
|
|
103
103
|
should_clip = params[:should_clip]
|
104
104
|
release_notes_link = params[:release_notes_link]
|
105
105
|
timeout = params[:timeout]
|
106
|
+
build_number = params[:build_number]
|
107
|
+
version = params[:version]
|
106
108
|
|
107
109
|
if release_notes.length >= Constants::MAX_RELEASE_NOTES_LENGTH
|
108
110
|
unless should_clip
|
@@ -119,13 +121,42 @@ module Fastlane
|
|
119
121
|
file = [
|
120
122
|
params[:ipa],
|
121
123
|
params[:apk],
|
122
|
-
params[:aab]
|
124
|
+
params[:aab],
|
125
|
+
params[:file]
|
123
126
|
].detect { |e| !e.to_s.empty? }
|
124
127
|
|
125
128
|
UI.user_error!("Couldn't find build file at path '#{file}'") unless file && File.exist?(file)
|
126
129
|
|
130
|
+
file_ext = Helper::AppcenterHelper.file_extname_full(file)
|
131
|
+
if destination_type == "group"
|
132
|
+
UI.user_error!("Can't distribute #{file_ext} to groups, please use `destination_type: 'store'`") if %w(.aab).include? file_ext
|
133
|
+
else
|
134
|
+
UI.user_error!("Can't distribute #{file_ext} to stores, please use `destination_type: 'group'`") if %w(.app .app.zip .dmg .pkg).include? file_ext
|
135
|
+
end
|
136
|
+
|
137
|
+
unless params[:file].to_s.empty?
|
138
|
+
if %w[.dmg .pkg].include? file_ext
|
139
|
+
UI.user_error!("Fields `version` and `build_number` must be specified to upload a #{file_ext} file") if build_number.to_s.empty? || version.to_s.empty?
|
140
|
+
release_upload_body = { build_version: version, build_number: build_number }
|
141
|
+
else
|
142
|
+
UI.message("Fields `version` and `build_number` are not required for files of type #{file_ext}, ignored") unless build_number.to_s.empty? && version.to_s.empty?
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
if file_ext == ".app" && File.directory?(file)
|
147
|
+
UI.message("App path is a directory, zipping it before upload")
|
148
|
+
zip_file = file + ".zip"
|
149
|
+
if File.exists? zip_file
|
150
|
+
override = UI.interactive? ? UI.confirm("File '#{zip_file}' already exists, do you want to override it?") : true
|
151
|
+
UI.abort_with_message!("Not overriding, aborting publishing operation") unless override
|
152
|
+
UI.message("Deleting zip file: #{zip_file}")
|
153
|
+
File.delete zip_file
|
154
|
+
end
|
155
|
+
file = Actions::ZipAction.run(path: file, output_path: zip_file)
|
156
|
+
end
|
157
|
+
|
127
158
|
UI.message("Starting release upload...")
|
128
|
-
upload_details = Helper::AppcenterHelper.create_release_upload(api_token, owner_name, app_name)
|
159
|
+
upload_details = Helper::AppcenterHelper.create_release_upload(api_token, owner_name, app_name, release_upload_body)
|
129
160
|
if upload_details
|
130
161
|
upload_id = upload_details['upload_id']
|
131
162
|
upload_url = upload_details['upload_url']
|
@@ -154,7 +185,7 @@ module Fastlane
|
|
154
185
|
UI.error("#{destination_type} '#{destination_name}' was not found")
|
155
186
|
end
|
156
187
|
end
|
157
|
-
else
|
188
|
+
else
|
158
189
|
UI.user_error!("Failed to upload release")
|
159
190
|
end
|
160
191
|
end
|
@@ -171,8 +202,9 @@ module Fastlane
|
|
171
202
|
app_platform = params[:app_platform]
|
172
203
|
|
173
204
|
platforms = {
|
174
|
-
|
175
|
-
|
205
|
+
Android: %w[Java React-Native Xamarin],
|
206
|
+
iOS: %w[Objective-C-Swift React-Native Xamarin],
|
207
|
+
macOS: %w[Objective-C-Swift]
|
176
208
|
}
|
177
209
|
|
178
210
|
if Helper::AppcenterHelper.get_app(api_token, owner_name, app_name)
|
@@ -180,15 +212,14 @@ module Fastlane
|
|
180
212
|
end
|
181
213
|
|
182
214
|
should_create_app = !app_display_name.to_s.empty? || !app_os.to_s.empty? || !app_platform.to_s.empty?
|
183
|
-
|
215
|
+
|
184
216
|
if Helper.test? || should_create_app || UI.confirm("App with name #{app_name} not found, create one?")
|
185
217
|
app_display_name = app_name if app_display_name.to_s.empty?
|
186
|
-
os = app_os.to_s.empty? ?
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
app_platform
|
218
|
+
os = app_os.to_s.empty? && (Helper.test? ? "Android" : UI.select("Select OS", platforms.keys)) || app_os.to_s
|
219
|
+
platform = app_platform.to_s.empty? && (Helper.test? ? "Java" : app_platform.to_s) || app_platform.to_s
|
220
|
+
if platform.to_s.empty?
|
221
|
+
platform = platforms[os].length == 1 ? platforms[os][0] : UI.select("Select Platform", platforms[os])
|
222
|
+
end
|
192
223
|
|
193
224
|
Helper::AppcenterHelper.create_app(api_token, owner_type, owner_name, app_name, app_display_name, os, platform)
|
194
225
|
else
|
@@ -288,22 +319,23 @@ module Fastlane
|
|
288
319
|
default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH],
|
289
320
|
optional: true,
|
290
321
|
type: String,
|
291
|
-
conflicting_options: [:ipa, :aab],
|
322
|
+
conflicting_options: [:ipa, :aab, :file],
|
292
323
|
conflict_block: proc do |value|
|
293
324
|
UI.user_error!("You can't use 'apk' and '#{value.key}' options in one run")
|
294
325
|
end,
|
295
326
|
verify_block: proc do |value|
|
296
327
|
accepted_formats = [".apk"]
|
297
|
-
|
328
|
+
file_extname_full = Helper::AppcenterHelper.file_extname_full(value)
|
329
|
+
UI.user_error!("Only \".apk\" formats are allowed, you provided \"#{file_extname_full}\"") unless accepted_formats.include? file_extname_full
|
298
330
|
end),
|
299
331
|
|
300
332
|
FastlaneCore::ConfigItem.new(key: :aab,
|
301
333
|
env_name: "APPCENTER_DISTRIBUTE_AAB",
|
302
|
-
description: "Build release path for android app bundle build
|
334
|
+
description: "Build release path for android app bundle build",
|
303
335
|
default_value: Actions.lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH],
|
304
336
|
optional: true,
|
305
337
|
type: String,
|
306
|
-
conflicting_options: [:ipa, :apk],
|
338
|
+
conflicting_options: [:ipa, :apk, :file],
|
307
339
|
conflict_block: proc do |value|
|
308
340
|
UI.user_error!("You can't use 'aab' and '#{value.key}' options in one run")
|
309
341
|
end,
|
@@ -314,11 +346,11 @@ module Fastlane
|
|
314
346
|
|
315
347
|
FastlaneCore::ConfigItem.new(key: :ipa,
|
316
348
|
env_name: "APPCENTER_DISTRIBUTE_IPA",
|
317
|
-
description: "Build release path for
|
349
|
+
description: "Build release path for iOS builds",
|
318
350
|
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
319
351
|
optional: true,
|
320
352
|
type: String,
|
321
|
-
conflicting_options: [:apk, :aab],
|
353
|
+
conflicting_options: [:apk, :aab, :file],
|
322
354
|
conflict_block: proc do |value|
|
323
355
|
UI.user_error!("You can't use 'ipa' and '#{value.key}' options in one run")
|
324
356
|
end,
|
@@ -327,6 +359,21 @@ module Fastlane
|
|
327
359
|
UI.user_error!("Only \".ipa\" formats are allowed, you provided \"#{File.extname(value)}\"") unless accepted_formats.include? File.extname(value)
|
328
360
|
end),
|
329
361
|
|
362
|
+
FastlaneCore::ConfigItem.new(key: :file,
|
363
|
+
env_name: "APPCENTER_DISTRIBUTE_FILE",
|
364
|
+
description: "Build release path for generic builds (.aab, .app, .app.zip, .apk, .dmg, .ipa, .pkg)",
|
365
|
+
optional: true,
|
366
|
+
type: String,
|
367
|
+
conflicting_options: [:apk, :aab, :ipa],
|
368
|
+
conflict_block: proc do |value|
|
369
|
+
UI.user_error!("You can't use 'file' and '#{value.key}' options in one run")
|
370
|
+
end,
|
371
|
+
verify_block: proc do |value|
|
372
|
+
accepted_formats = %w(.aab .app .app.zip .apk .dmg .ipa .pkg)
|
373
|
+
file_ext = Helper::AppcenterHelper.file_extname_full(value)
|
374
|
+
UI.user_error!("Only #{accepted_formats.to_s} formats are allowed, you provided \"#{file_ext}\"") unless accepted_formats.include? file_ext
|
375
|
+
end),
|
376
|
+
|
330
377
|
FastlaneCore::ConfigItem.new(key: :dsym,
|
331
378
|
env_name: "APPCENTER_DISTRIBUTE_DSYM",
|
332
379
|
description: "Path to your symbols file. For iOS provide path to app.dSYM.zip",
|
@@ -432,13 +479,13 @@ module Fastlane
|
|
432
479
|
|
433
480
|
FastlaneCore::ConfigItem.new(key: :build_number,
|
434
481
|
env_name: "APPCENTER_DISTRIBUTE_BUILD_NUMBER",
|
435
|
-
description: "The build number
|
482
|
+
description: "The build number, required for Android ProGuard mapping files, as well as macOS .pkg and .dmg builds",
|
436
483
|
optional: true,
|
437
484
|
type: String),
|
438
485
|
|
439
486
|
FastlaneCore::ConfigItem.new(key: :version,
|
440
487
|
env_name: "APPCENTER_DISTRIBUTE_VERSION",
|
441
|
-
description: "The version
|
488
|
+
description: "The build version, required for Android ProGuard mapping files, as well as macOS .pkg and .dmg builds",
|
442
489
|
optional: true,
|
443
490
|
type: String),
|
444
491
|
|
@@ -2,6 +2,19 @@ module Fastlane
|
|
2
2
|
module Helper
|
3
3
|
class AppcenterHelper
|
4
4
|
|
5
|
+
# basic utility method to check file types that App Center will accept,
|
6
|
+
# accounting for file types that can and should be zip-compressed
|
7
|
+
# before they are uploaded
|
8
|
+
def self.file_extname_full(path)
|
9
|
+
is_zip = File.extname(path) == ".zip"
|
10
|
+
|
11
|
+
# if file is not .zip'ed, these do not change basename and extname
|
12
|
+
unzip_basename = File.basename(path, ".zip")
|
13
|
+
unzip_extname = File.extname(unzip_basename)
|
14
|
+
|
15
|
+
is_zip ? unzip_extname + ".zip" : unzip_extname
|
16
|
+
end
|
17
|
+
|
5
18
|
# create request
|
6
19
|
def self.connection(upload_url = false, dsym = false)
|
7
20
|
require 'faraday'
|
@@ -28,13 +41,13 @@ module Fastlane
|
|
28
41
|
# returns:
|
29
42
|
# upload_id
|
30
43
|
# upload_url
|
31
|
-
def self.create_release_upload(api_token, owner_name, app_name)
|
44
|
+
def self.create_release_upload(api_token, owner_name, app_name, body)
|
32
45
|
connection = self.connection
|
33
46
|
|
34
47
|
response = connection.post("v0.1/apps/#{owner_name}/#{app_name}/release_uploads") do |req|
|
35
48
|
req.headers['X-API-Token'] = api_token
|
36
49
|
req.headers['internal-request-source'] = "fastlane"
|
37
|
-
req.body = {}
|
50
|
+
req.body = body.nil? && {} || body
|
38
51
|
end
|
39
52
|
|
40
53
|
case response.status
|
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: 1.
|
4
|
+
version: 1.4.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-08-
|
11
|
+
date: 2019-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -125,8 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
requirements: []
|
128
|
-
|
129
|
-
rubygems_version: 2.7.6
|
128
|
+
rubygems_version: 3.0.4
|
130
129
|
signing_key:
|
131
130
|
specification_version: 4
|
132
131
|
summary: Fastlane plugin for App Center
|