fastlane-plugin-firebase_app_distribution 0.9.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_action.rb +103 -45
- data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_add_testers_action.rb +3 -1
- data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_create_group_action.rb +3 -1
- data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_delete_group_action.rb +3 -1
- data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_get_latest_release.rb +3 -1
- data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_get_udids.rb +2 -1
- data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_remove_testers_action.rb +3 -1
- data/lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_apis.rb +48 -0
- data/lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_auth_client.rb +1 -0
- data/lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_error_message.rb +2 -0
- data/lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_helper.rb +4 -1
- data/lib/fastlane/plugin/firebase_app_distribution/version.rb +1 -1
- metadata +4 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b85c6c60b76c751c0f4f5ca2611bd6735b5540b1525e600dad266b354bcc2e7
|
4
|
+
data.tar.gz: dbee1fc079ed0d7c8f1b50aec4cc22339e7046cf97b100576564797afa440e48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fd6c96184db82f9d38dc5495b2c8adcd9b42326f45420afcf50b9db66064dd7c07228d694d349b0c1ee3e82782cc8fe76ec5e0889841574f3c12ecaeff89362
|
7
|
+
data.tar.gz: 3f5e0aafc6c0b09ae3722f7fd65522009470c70cad2bd115fd061f2c38a63522eec6b77aa036df9e21cc30b6704134fe593ec132dee5026e65a50d29366f4d91
|
data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_action.rb
CHANGED
@@ -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
|
-
|
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
|
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,
|
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
|
-
|
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
|
-
|
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,
|
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
|
-
|
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,
|
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 =
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
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,
|
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
|
-
|
425
|
+
test_case: test_case_name
|
388
426
|
)
|
389
|
-
alpha_client.create_project_app_release_test(
|
427
|
+
alpha_client.create_project_app_release_test(release_name, release_test)
|
390
428
|
rescue Google::Apis::Error => err
|
391
|
-
|
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,
|
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("⏳
|
440
|
+
UI.message("⏳ #{release_test_names.size} automated test results are pending.")
|
397
441
|
sleep(TEST_POLLING_INTERVAL_SECONDS)
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
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
|
-
|
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>,...'.
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 '
|
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
|
data/lib/fastlane/plugin/firebase_app_distribution/actions/firebase_app_distribution_get_udids.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_error_message.rb
CHANGED
@@ -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."
|
data/lib/fastlane/plugin/firebase_app_distribution/helper/firebase_app_distribution_helper.rb
CHANGED
@@ -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)
|
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.
|
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:
|
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.
|
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: []
|