fastlane-plugin-firebase_app_distribution 0.9.1 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b432a12336537ce51caa06e26321f2047cc7d7c8ebe1c4abfe94a105b201e4ba
4
- data.tar.gz: 1c50c9c30886b1d8f5435a7d85d081a0f2e6e0ecd837ca877ed2d51511eabecf
3
+ metadata.gz: 2b85c6c60b76c751c0f4f5ca2611bd6735b5540b1525e600dad266b354bcc2e7
4
+ data.tar.gz: dbee1fc079ed0d7c8f1b50aec4cc22339e7046cf97b100576564797afa440e48
5
5
  SHA512:
6
- metadata.gz: d296fa3989b9d3788b8322d21fed387e908c02c27157f3affe1dab72c0a19035ed871ea63be642c312cb7f0f636130406f161d629e2abd23da99aa98eab11f4a
7
- data.tar.gz: 07b723bf3cf631e1dfc8402c890be0a78753d6d57e178c68f8c66b950727e0157d9573151ee08badf851f6a55c7f9a7b1965846bed4f5589969247614dc75cbd
6
+ metadata.gz: 5fd6c96184db82f9d38dc5495b2c8adcd9b42326f45420afcf50b9db66064dd7c07228d694d349b0c1ee3e82782cc8fe76ec5e0889841574f3c12ecaeff89362
7
+ data.tar.gz: 3f5e0aafc6c0b09ae3722f7fd65522009470c70cad2bd115fd061f2c38a63522eec6b77aa036df9e21cc30b6704134fe593ec132dee5026e65a50d29366f4d91
@@ -1,8 +1,9 @@
1
1
  require 'fastlane/action'
2
+ require 'fastlane_core'
2
3
  require 'open3'
3
4
  require 'shellwords'
4
5
  require 'googleauth'
5
- require 'google/apis/firebaseappdistribution_v1'
6
+ require_relative '../helper/firebase_app_distribution_apis'
6
7
  require_relative '../helper/firebase_app_distribution_helper'
7
8
  require_relative '../helper/firebase_app_distribution_error_message'
8
9
  require_relative '../helper/firebase_app_distribution_auth_client'
@@ -34,8 +35,8 @@ module Fastlane
34
35
  timeout = get_upload_timeout(params)
35
36
 
36
37
  binary_path = get_binary_path(platform, params)
37
- UI.user_error!("Couldn't find binary.") if binary_path.nil?
38
- UI.user_error!("Couldn't find binary at path #{binary_path}.") unless File.exist?(binary_path)
38
+ UI.user_error!("Couldn't determine path for #{platform} binary.") if binary_path.nil?
39
+ UI.user_error!("Couldn't find #{platform} binary at path #{binary_path}.") unless File.exist?(binary_path)
39
40
  binary_type = binary_type_from_path(binary_path)
40
41
 
41
42
  # TODO(lkellogg): This sets the send timeout for all POST requests made by the client, but
@@ -56,7 +57,7 @@ module Fastlane
56
57
 
57
58
  binary_type = binary_type_from_path(binary_path)
58
59
  UI.message("📡 Uploading the #{binary_type}.")
59
- operation = upload_binary(app_name, binary_path, client, timeout)
60
+ operation = upload_binary(client, app_name, binary_path, binary_type, timeout)
60
61
  UI.message("🕵️ Validating upload…")
61
62
  release = poll_upload_release_operation(client, operation, binary_type)
62
63
 
@@ -87,11 +88,12 @@ module Fastlane
87
88
  test_devices =
88
89
  get_value_from_value_or_file(params[:test_devices], params[:test_devices_file])
89
90
  if present?(test_devices)
90
- UI.message("🤖 Starting automated tests. Note: This feature is in beta.")
91
+ test_cases =
92
+ string_to_array(get_value_from_value_or_file(params[:test_case_ids], params[:test_case_ids_file]))&.map { |id| "#{app_name}/testCases/#{id}" }
91
93
  test_password = test_password_from_params(params)
92
- release_test = test_release(alpha_client, release, test_devices, params[:test_username], test_password, params[:test_username_resource], params[:test_password_resource])
94
+ release_tests = test_release(alpha_client, release, test_devices, test_cases, params[:test_username], test_password, params[:test_username_resource], params[:test_password_resource])
93
95
  unless params[:test_non_blocking]
94
- poll_test_finished(alpha_client, release_test.name)
96
+ poll_test_finished(alpha_client, release_tests)
95
97
  end
96
98
  end
97
99
 
@@ -158,11 +160,14 @@ module Fastlane
158
160
  # the same lane
159
161
  return nil if lane_platform == :android
160
162
 
163
+ # rubocop:disable Require/MissingRequireStatement
161
164
  Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE]
165
+ # rubocop:enable Require/MissingRequireStatement
162
166
  end
163
167
 
164
168
  def self.lane_platform
165
- Actions.lane_context[Actions::SharedValues::PLATFORM_NAME]
169
+ # to_sym shouldn't be necessary, but possibly fixes #376
170
+ Actions.lane_context[Actions::SharedValues::PLATFORM_NAME]&.to_sym
166
171
  end
167
172
 
168
173
  def self.platform_from_app_id(app_id)
@@ -173,6 +178,7 @@ module Fastlane
173
178
  end
174
179
  end
175
180
 
181
+ # rubocop:disable Require/MissingRequireStatement
176
182
  def self.get_binary_path(platform, params)
177
183
  if platform == :ios
178
184
  return params[:ipa_path] ||
@@ -193,7 +199,11 @@ module Fastlane
193
199
  Dir["*.apk"].last ||
194
200
  Dir[File.join("app", "build", "outputs", "apk", "release", "app-release.apk")].last
195
201
  end
202
+
203
+ UI.error("Unable to determine binary path for unsupported platform #{platform}.")
204
+ nil
196
205
  end
206
+ # rubocop:enable Require/MissingRequireStatement
197
207
 
198
208
  def self.get_upload_timeout(params)
199
209
  if params[:upload_timeout]
@@ -232,7 +242,9 @@ module Fastlane
232
242
  def self.release_notes(params)
233
243
  release_notes_param =
234
244
  get_value_from_value_or_file(params[:release_notes], params[:release_notes_file])
245
+ # rubocop:disable Require/MissingRequireStatement
235
246
  release_notes_param || Actions.lane_context[SharedValues::FL_CHANGELOG]
247
+ # rubocop:enable Require/MissingRequireStatement
236
248
  end
237
249
 
238
250
  def self.poll_upload_release_operation(client, operation, binary_type)
@@ -268,7 +280,7 @@ module Fastlane
268
280
  extract_release(operation)
269
281
  end
270
282
 
271
- def self.upload_binary(app_name, binary_path, client, timeout)
283
+ def self.upload_binary(client, app_name, binary_path, binary_type, timeout)
272
284
  options = Google::Apis::RequestOptions.new
273
285
  options.max_elapsed_time = timeout # includes retries (default = no retries)
274
286
  options.header = {
@@ -282,12 +294,21 @@ module Fastlane
282
294
  # standard http call instead and convert it to a long running object
283
295
  # https://github.com/googleapis/google-api-ruby-client/blob/main/generated/google-apis-firebaseappdistribution_v1/lib/google/apis/firebaseappdistribution_v1/service.rb#L79
284
296
  # TODO(kbolay): Prefer client.upload_medium
285
- response = client.http(
286
- :post,
287
- "https://firebaseappdistribution.googleapis.com/upload/v1/#{app_name}/releases:upload",
288
- body: File.open(binary_path, 'rb'),
289
- options: options
290
- )
297
+ response = begin
298
+ client.http(
299
+ :post,
300
+ "https://firebaseappdistribution.googleapis.com/upload/v1/#{app_name}/releases:upload",
301
+ body: File.open(binary_path, 'rb'),
302
+ options: options
303
+ )
304
+ rescue Google::Apis::Error => err
305
+ case err.status_code.to_i
306
+ when 403
307
+ UI.crash!(ErrorMessage::PERMISSION_DENIED_ERROR)
308
+ else
309
+ UI.crash!("#{ErrorMessage.upload_binary_error(binary_type)} (#{err}, status_code: #{err.status_code})")
310
+ end
311
+ end
291
312
 
292
313
  Google::Apis::FirebaseappdistributionV1::GoogleLongrunningOperation.from_json(response)
293
314
  end
@@ -339,7 +360,10 @@ module Fastlane
339
360
  end
340
361
  end
341
362
 
342
- def self.test_release(alpha_client, release, test_devices, username = nil, password = nil, username_resource = nil, password_resource = nil)
363
+ def self.test_release(alpha_client, release, test_devices, test_cases, username = nil, password = nil, username_resource = nil, password_resource = nil)
364
+ if present?(test_cases) && (!username_resource.nil? || !password_resource.nil?)
365
+ UI.user_error!("Password and username resource names are not supported for the testing agent.")
366
+ end
343
367
  if username_resource.nil? ^ password_resource.nil?
344
368
  UI.user_error!("Username and password resource names for automated tests need to be specified together.")
345
369
  end
@@ -369,7 +393,7 @@ module Fastlane
369
393
  end
370
394
  end
371
395
 
372
- device_executions = string_to_array(test_devices, ';').map do |td_string|
396
+ device_executions = string_to_array(test_devices, /[;\n]/).map do |td_string|
373
397
  td_hash = parse_test_device_string(td_string)
374
398
  Google::Apis::FirebaseappdistributionV1alpha::GoogleFirebaseAppdistroV1alphaDeviceExecution.new(
375
399
  device: Google::Apis::FirebaseappdistributionV1alpha::GoogleFirebaseAppdistroV1alphaTestDevice.new(
@@ -381,37 +405,64 @@ module Fastlane
381
405
  )
382
406
  end
383
407
 
408
+ UI.message("🤖 Starting automated tests. Note: This feature is in beta.")
409
+ release_tests = []
410
+ if present?(test_cases)
411
+ test_cases.each do |tc|
412
+ release_tests.push(create_release_test(alpha_client, release.name, device_executions, login_credential, tc))
413
+ end
414
+ else
415
+ release_tests.push(create_release_test(alpha_client, release.name, device_executions, login_credential))
416
+ end
417
+ release_tests
418
+ end
419
+
420
+ def self.create_release_test(alpha_client, release_name, device_executions, login_credential, test_case_name = nil)
384
421
  release_test =
385
422
  Google::Apis::FirebaseappdistributionV1alpha::GoogleFirebaseAppdistroV1alphaReleaseTest.new(
423
+ device_executions: device_executions,
386
424
  login_credential: login_credential,
387
- device_executions: device_executions
425
+ test_case: test_case_name
388
426
  )
389
- alpha_client.create_project_app_release_test(release.name, release_test)
427
+ alpha_client.create_project_app_release_test(release_name, release_test)
390
428
  rescue Google::Apis::Error => err
391
- UI.crash!(err)
429
+ case err.status_code.to_i
430
+ when 404
431
+ UI.user_error!("Test Case #{test_case_name} not found")
432
+ else
433
+ UI.crash!(err)
434
+ end
392
435
  end
393
436
 
394
- def self.poll_test_finished(alpha_client, release_test_name)
437
+ def self.poll_test_finished(alpha_client, release_tests)
438
+ release_test_names = release_tests.map(&:name)
395
439
  TEST_MAX_POLLING_RETRIES.times do
396
- UI.message("⏳ The automated test results are pending.")
440
+ UI.message("⏳ #{release_test_names.size} automated test results are pending.")
397
441
  sleep(TEST_POLLING_INTERVAL_SECONDS)
398
- release_test = alpha_client.get_project_app_release_test(release_test_name)
399
- if release_test.device_executions.all? { |e| e.state == 'PASSED' }
400
- UI.success("✅ Passed automated test(s).")
401
- return
402
- end
403
- release_test.device_executions.each do |de|
404
- case de.state
405
- when 'PASSED', 'IN_PROGRESS'
406
- next
407
- when 'FAILED'
408
- UI.test_failure!("Automated test failed for #{device_to_s(de.device)}: #{de.failed_reason}.")
409
- when 'INCONCLUSIVE'
410
- UI.test_failure!("Automated test inconclusive for #{device_to_s(de.device)}: #{de.inconclusive_reason}.")
442
+ release_test_names.delete_if do |release_test_name|
443
+ release_test = alpha_client.get_project_app_release_test(release_test_name)
444
+ if release_test.device_executions.all? { |e| e.state == 'PASSED' }
445
+ true
411
446
  else
412
- UI.test_failure!("Unsupported automated test state for #{device_to_s(de.device)}: #{de.state}.")
447
+ release_test.device_executions.each do |de|
448
+ case de.state
449
+ when 'PASSED', 'IN_PROGRESS'
450
+ next
451
+ when 'FAILED'
452
+ UI.test_failure!("Automated test failed for #{device_to_s(de.device)}: #{de.failed_reason}.")
453
+ when 'INCONCLUSIVE'
454
+ UI.test_failure!("Automated test inconclusive for #{device_to_s(de.device)}: #{de.inconclusive_reason}.")
455
+ else
456
+ UI.test_failure!("Unsupported automated test state for #{device_to_s(de.device)}: #{de.state}.")
457
+ end
458
+ end
459
+ false
413
460
  end
414
461
  end
462
+ if release_test_names.empty?
463
+ UI.success("✅ Passed automated test(s).")
464
+ return
465
+ end
415
466
  end
416
467
  UI.test_failure!("It took longer than expected to process your test, please try again.")
417
468
  end
@@ -493,7 +544,7 @@ module Fastlane
493
544
  type: String),
494
545
  FastlaneCore::ConfigItem.new(key: :groups_file,
495
546
  env_name: "FIREBASEAPPDISTRO_GROUPS_FILE",
496
- description: "Path to file containing group aliases used for distribution, separated by commas",
547
+ description: "Path to file containing group aliases used for distribution, separated by commas or newlines",
497
548
  optional: true,
498
549
  type: String),
499
550
  FastlaneCore::ConfigItem.new(key: :testers,
@@ -503,7 +554,7 @@ module Fastlane
503
554
  type: String),
504
555
  FastlaneCore::ConfigItem.new(key: :testers_file,
505
556
  env_name: "FIREBASEAPPDISTRO_TESTERS_FILE",
506
- description: "Path to file containing email addresses of testers, separated by commas",
557
+ description: "Path to file containing email addresses of testers, separated by commas or newlines",
507
558
  optional: true,
508
559
  type: String),
509
560
  FastlaneCore::ConfigItem.new(key: :release_notes,
@@ -520,12 +571,13 @@ module Fastlane
520
571
  # Release Testing
521
572
  FastlaneCore::ConfigItem.new(key: :test_devices,
522
573
  env_name: "FIREBASEAPPDISTRO_TEST_DEVICES",
523
- description: "List of devices to run automated tests on, in the format 'model=<model-id>,version=<os-version-id>,locale=<locale>,orientation=<orientation>;model=<model-id>,...'. Run 'gcloud firebase test android|ios models list' to see available devices. Note: This feature is in beta",
574
+ description: "List of devices (separated by semicolons) to run automated tests on, in the format 'model=<model-id>,version=<os-version-id>,locale=<locale>,orientation=<orientation>;model=<model-id>,...'. Run 'gcloud firebase test android|ios models list' to see available devices. Note: This feature is in beta",
524
575
  optional: true,
525
576
  type: String),
526
577
  FastlaneCore::ConfigItem.new(key: :test_devices_file,
527
578
  env_name: "FIREBASEAPPDISTRO_TEST_DEVICES_FILE",
528
- description: "Path to file containing a list of devices to run automated tests on, in the format 'model=<model-id>,version=<os-version-id>,locale=<locale>,orientation=<orientation>;model=<model-id>,...'. Run 'gcloud firebase test android|ios models list' to see available devices. Note: This feature is in beta",
579
+ description: "Path to file containing a list of devices (sepatated by semicolons or newlines) to run automated tests on, in the format 'model=<model-id>,version=<os-version-id>,locale=<locale>,orientation=<orientation>;model=<model-id>,...'. " \
580
+ "Run 'gcloud firebase test android|ios models list' to see available devices. Note: This feature is in beta",
529
581
  optional: true,
530
582
  type: String),
531
583
  FastlaneCore::ConfigItem.new(key: :test_username,
@@ -559,6 +611,16 @@ module Fastlane
559
611
  optional: false,
560
612
  default_value: false,
561
613
  type: Boolean),
614
+ FastlaneCore::ConfigItem.new(key: :test_case_ids,
615
+ env_name: "FIREBASEAPPDISTRO_TEST_CASE_IDS",
616
+ description: "Test Case IDs, separated by commas. Note: This feature is in beta",
617
+ optional: true,
618
+ type: String),
619
+ FastlaneCore::ConfigItem.new(key: :test_case_ids_file,
620
+ env_name: "FIREBASEAPPDISTRO_TEST_CASE_IDS_FILE",
621
+ description: "Path to file with containing Test Case IDs, separated by commas or newlines. Note: This feature is in beta",
622
+ optional: true,
623
+ type: String),
562
624
 
563
625
  # Auth
564
626
  FastlaneCore::ConfigItem.new(key: :firebase_cli_token,
@@ -577,11 +639,7 @@ module Fastlane
577
639
  end
578
640
 
579
641
  def self.is_supported?(platform)
580
- # Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example)
581
- # See: https://docs.fastlane.tools/advanced/#control-configuration-by-lane-and-by-platform
582
- #
583
- # [:ios, :mac, :android].include?(platform)
584
- true
642
+ [:ios, :android].include?(platform)
585
643
  end
586
644
 
587
645
  def self.example_code
@@ -1,7 +1,9 @@
1
1
  require 'fastlane/action'
2
+ require 'fastlane_core'
2
3
  require 'fastlane_core/ui/ui'
3
- require 'google/apis/firebaseappdistribution_v1'
4
+ require_relative '../helper/firebase_app_distribution_apis'
4
5
  require_relative '../helper/firebase_app_distribution_helper'
6
+ require_relative '../helper/firebase_app_distribution_error_message'
5
7
  require_relative '../helper/firebase_app_distribution_auth_client'
6
8
 
7
9
  module Fastlane
@@ -1,7 +1,9 @@
1
1
  require 'fastlane/action'
2
+ require 'fastlane_core'
2
3
  require 'fastlane_core/ui/ui'
3
- require 'google/apis/firebaseappdistribution_v1'
4
+ require_relative '../helper/firebase_app_distribution_apis'
4
5
  require_relative '../helper/firebase_app_distribution_helper'
6
+ require_relative '../helper/firebase_app_distribution_error_message'
5
7
  require_relative '../helper/firebase_app_distribution_auth_client'
6
8
 
7
9
  module Fastlane
@@ -1,7 +1,9 @@
1
1
  require 'fastlane/action'
2
+ require 'fastlane_core'
2
3
  require 'fastlane_core/ui/ui'
3
- require 'google/apis/firebaseappdistribution_v1'
4
+ require_relative '../helper/firebase_app_distribution_apis'
4
5
  require_relative '../helper/firebase_app_distribution_helper'
6
+ require_relative '../helper/firebase_app_distribution_error_message'
5
7
  require_relative '../helper/firebase_app_distribution_auth_client'
6
8
 
7
9
  module Fastlane
@@ -1,6 +1,8 @@
1
1
  require 'fastlane/action'
2
- require 'google/apis/firebaseappdistribution_v1'
2
+ require 'fastlane_core'
3
+ require_relative '../helper/firebase_app_distribution_apis'
3
4
  require_relative '../helper/firebase_app_distribution_auth_client'
5
+ require_relative '../helper/firebase_app_distribution_error_message'
4
6
  require_relative '../helper/firebase_app_distribution_helper'
5
7
 
6
8
  module Fastlane
@@ -1,8 +1,9 @@
1
1
  require 'fastlane/action'
2
+ require 'fastlane_core'
2
3
  require 'open3'
3
4
  require 'shellwords'
4
5
  require 'googleauth'
5
- require 'google/apis/firebaseappdistribution_v1alpha'
6
+ require_relative '../helper/firebase_app_distribution_apis'
6
7
  require_relative '../helper/firebase_app_distribution_helper'
7
8
  require_relative '../helper/firebase_app_distribution_error_message'
8
9
  require_relative '../helper/firebase_app_distribution_auth_client'
@@ -1,7 +1,9 @@
1
1
  require 'fastlane/action'
2
+ require 'fastlane_core'
2
3
  require 'fastlane_core/ui/ui'
3
- require 'google/apis/firebaseappdistribution_v1'
4
+ require_relative '../helper/firebase_app_distribution_apis'
4
5
  require_relative '../helper/firebase_app_distribution_helper'
6
+ require_relative '../helper/firebase_app_distribution_error_message'
5
7
  require_relative '../helper/firebase_app_distribution_auth_client'
6
8
 
7
9
  module Fastlane
@@ -0,0 +1,48 @@
1
+ require 'google/apis/firebaseappdistribution_v1'
2
+ require 'google/apis/firebaseappdistribution_v1alpha'
3
+
4
+ # This is partially copied from google/apis/firebaseappdistribution_v1alpha v0.9.0 (2024-12-08) based discovery document revision 20241204.
5
+ # We can't depend on that version directly as long as fastlane locks google-cloud-env < 2.0.0 (to support Ruby 2.6).
6
+ # Newer versions of the API clients depend on google-apis-core >= 0.15.0 which depends on googleauth ~> 1.9 which depends on google-cloud-env ~> 2.1.
7
+ # See also https://github.com/fastlane/fastlane/pull/21685#pullrequestreview-2490037163
8
+ module Google
9
+ module Apis
10
+ module FirebaseappdistributionV1alpha
11
+ class GoogleFirebaseAppdistroV1alphaReleaseTest
12
+ include Google::Apis::Core::Hashable
13
+
14
+ attr_accessor :create_time
15
+ attr_accessor :device_executions
16
+ attr_accessor :display_name
17
+ attr_accessor :login_credential
18
+ attr_accessor :name
19
+ attr_accessor :test_case
20
+ attr_accessor :test_state
21
+
22
+ def initialize(**args)
23
+ update!(**args)
24
+ end
25
+
26
+ def update!(**args)
27
+ @create_time = args[:create_time] if args.key?(:create_time)
28
+ @device_executions = args[:device_executions] if args.key?(:device_executions)
29
+ @display_name = args[:display_name] if args.key?(:display_name)
30
+ @login_credential = args[:login_credential] if args.key?(:login_credential)
31
+ @name = args[:name] if args.key?(:name)
32
+ @test_case = args[:test_case] if args.key?(:test_case)
33
+ @test_state = args[:test_state] if args.key?(:test_state)
34
+ end
35
+
36
+ class Representation < Google::Apis::Core::JsonRepresentation
37
+ property :create_time, as: 'createTime'
38
+ collection :device_executions, as: 'deviceExecutions', class: Google::Apis::FirebaseappdistributionV1alpha::GoogleFirebaseAppdistroV1alphaDeviceExecution, decorator: Google::Apis::FirebaseappdistributionV1alpha::GoogleFirebaseAppdistroV1alphaDeviceExecution::Representation
39
+ property :display_name, as: 'displayName'
40
+ property :login_credential, as: 'loginCredential', class: Google::Apis::FirebaseappdistributionV1alpha::GoogleFirebaseAppdistroV1alphaLoginCredential, decorator: Google::Apis::FirebaseappdistributionV1alpha::GoogleFirebaseAppdistroV1alphaLoginCredential::Representation
41
+ property :name, as: 'name'
42
+ property :test_case, as: 'testCase'
43
+ property :test_state, as: 'testState'
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,6 @@
1
1
  require 'googleauth'
2
2
  require 'fastlane_core/ui/ui'
3
+ require_relative './firebase_app_distribution_error_message'
3
4
 
4
5
  module Fastlane
5
6
  UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
@@ -4,6 +4,8 @@ module ErrorMessage
4
4
  SERVICE_CREDENTIALS_NOT_FOUND = "Service credentials file does not exist. Please check the service credentials path and try again."
5
5
  PARSE_SERVICE_CREDENTIALS_ERROR = "Failed to extract service account information from the service credentials file."
6
6
  PARSE_FIREBASE_TOOLS_JSON_ERROR = "Encountered error parsing json file. Ensure the firebase-tools.json file is formatted correctly."
7
+ PERMISSION_DENIED_ERROR = "The authenticated user does not have the required permissions on the Firebase project"
8
+ UPLOAD_BINARY_ERROR = "App Distribution halted because it had a problem uploading the app binary."
7
9
  UPLOAD_RELEASE_NOTES_ERROR = "App Distribution halted because it had a problem uploading release notes."
8
10
  UPLOAD_TESTERS_ERROR = "App Distribution halted because it had a problem adding testers/groups."
9
11
  GET_RELEASE_TIMEOUT = "App Distribution failed to fetch release information."
@@ -1,5 +1,8 @@
1
1
  require 'fastlane_core/ui/ui'
2
2
  require 'cfpropertylist'
3
+ require 'google/apis/core'
4
+ require 'google/apis/options'
5
+ require_relative './firebase_app_distribution_error_message'
3
6
 
4
7
  module Fastlane
5
8
  UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
@@ -27,7 +30,7 @@ module Fastlane
27
30
 
28
31
  # Returns the array representation of a string with trimmed comma
29
32
  # seperated values.
30
- def string_to_array(string, delimiter = ",")
33
+ def string_to_array(string, delimiter = /[,\n]/)
31
34
  return [] if string.nil?
32
35
  # Strip string and then strip individual values
33
36
  string.strip.split(delimiter).map(&:strip)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module FirebaseAppDistribution
3
- VERSION = "0.9.1"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-firebase_app_distribution
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Natchev
8
8
  - Manny Jimenez
9
9
  - Alonso Salas Infante
10
- autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2024-04-30 00:00:00.000000000 Z
12
+ date: 2025-01-07 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: google-apis-firebaseappdistribution_v1
@@ -166,7 +165,6 @@ dependencies:
166
165
  - - ">="
167
166
  - !ruby/object:Gem::Version
168
167
  version: 2.127.1
169
- description:
170
168
  email:
171
169
  - snatchev@google.com
172
170
  - mannyjimenez@google.com
@@ -186,6 +184,7 @@ files:
186
184
  - lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_get_latest_release.rb
187
185
  - lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_get_udids.rb
188
186
  - lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_remove_testers_action.rb
187
+ - lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_apis.rb
189
188
  - lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_auth_client.rb
190
189
  - lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_error_message.rb
191
190
  - lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_helper.rb
@@ -194,7 +193,6 @@ homepage: https://github.com/fastlane/fastlane-plugin-firebase_app_distribution
194
193
  licenses:
195
194
  - MIT
196
195
  metadata: {}
197
- post_install_message:
198
196
  rdoc_options: []
199
197
  require_paths:
200
198
  - lib
@@ -209,8 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
207
  - !ruby/object:Gem::Version
210
208
  version: '0'
211
209
  requirements: []
212
- rubygems_version: 3.5.9
213
- signing_key:
210
+ rubygems_version: 3.6.2
214
211
  specification_version: 4
215
212
  summary: Release your beta builds to Firebase App Distribution. https://firebase.google.com/docs/app-distribution
216
213
  test_files: []