Class: Fastlane::Actions::FirebaseManagementAddAppAction

Inherits:
Action
  • Object
show all
Defined in:
lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb

Class Method Summary collapse

Class Method Details

.authorsObject



84
85
86
# File 'lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb', line 84

def self.authors
	["Ackee, s.r.o."]
end

.available_optionsObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb', line 97

def self.available_options
	[
		FastlaneCore::ConfigItem.new(key: :email,
								env_name: "FIREBASE_EMAIL",
							 description: "User's email to identify stored credentials",
								optional: true),

		FastlaneCore::ConfigItem.new(key: :client_secret_json_path,
								env_name: "FIREBASE_CLIENT_SECRET_JSON_PATH",
							 description: "Path to client secret json file",
								optional: true),

		FastlaneCore::ConfigItem.new(key: :service_account_json_path,
								env_name: "FIREBASE_SERVICE_ACCOUNT_JSON_PATH",
							 description: "Path to service account json key",
								optional: true),

		FastlaneCore::ConfigItem.new(key: :project_id,
								env_name: "FIREBASE_PROJECT_ID",
							 description: "Project id",
								optional: true),

		FastlaneCore::ConfigItem.new(key: :download_config,
								env_name: "FIREBASE_DOWNLOAD_CONFIG",
							 description: "Should download config for created client",
								optional: false,
								is_string: false,
								default_value: false),

		FastlaneCore::ConfigItem.new(key: :type,
								env_name: "FIREBASE_TYPE",
							 description: "Type of client (ios, android)",
								verify_block: proc do |value|
									types = [:ios, :android]
									UI.user_error!("Type must be in #{types}") unless types.include?(value.to_sym)
								end
							 ),
		FastlaneCore::ConfigItem.new(key: :bundle_id,
								env_name: "FIREBASE_BUNDLE_ID",
							 description: "Bundle ID (package name)",
								optional: false),

		FastlaneCore::ConfigItem.new(key: :display_name,
								env_name: "FIREBASE_DISPLAY_NAME",
							 description: "Display name",
								optional: true),

		FastlaneCore::ConfigItem.new(key: :output_path,
		                        env_name: "FIREBASE_OUTPUT_PATH",
		                     description: "Path for the downloaded config",
		                        optional: false,
		                   default_value: "./"),

		FastlaneCore::ConfigItem.new(key: :output_name,
		                        env_name: "FIREBASE_OUTPUT_NAME",
		                     description: "Name of the downloaded file",
		                        optional: true)
	]	
end

.descriptionObject



80
81
82
# File 'lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb', line 80

def self.description
	"Add new app to Firebase project"
end

.detailsObject



92
93
94
95
# File 'lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb', line 92

def self.details
	# Optional:
	"Firebase plugin helps you list your projects, create applications and download configuration files."
end

.is_supported?(platform) ⇒ Boolean

Returns:

  • (Boolean)


157
158
159
160
161
162
163
# File 'lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb', line 157

def self.is_supported?(platform)
	# Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example)
	# See: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
	#
	# [:ios, :mac, :android].include?(platform)
	true
end

.return_valueObject



88
89
90
# File 'lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb', line 88

def self.return_value
	# If your method provides a return value, you can describe here what it does
end

.run(params) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/fastlane/plugin/firebase_management/actions/firebase_add_app_action.rb', line 5

def self.run(params)
	manager = FirebaseManagement::Manager.new
	
	# login
	api = nil
	if params[:service_account_json_path] != nil then
		api = manager.serviceAccountLogin(params[:service_account_json_path])
	elsif params[:email] != nil && params[:client_secret_json_path] != nil then
		api = manager.userLogin(params[:email], params[:client_secret_json_path])
	else
		UI.error "You must define service_account_json_path or email with client_secret_json_path."
		return nil
	end

	# select project
	project_id = params[:project_id] || manager.select_project(nil)["projectId"]

	# select type
	type = params[:type].to_sym

	bundle_id = params[:bundle_id]

	display_name = params[:display_name]

	case type
	when :ios
		# create new ios app on Firebase
		api.add_ios_app(project_id, bundle_id, display_name)

		# App creation is a long-running operation.
		# Creation endpoint returns operation ID which should be used to check
		# the result of the operation. This requires another Google API to be
		# enabled and other stuff to do so just wait for 3 seconds here, fetch
		# apps from Firebase and check whether the new app is there.
		sleep 3

		# download apps for project
		apps = api.ios_app_list(project_id)

		# search for newly created app
		app = apps.detect {|app| app["bundleId"] == bundle_id }

	when :android
		# create new android app on Firebase
		api.add_android_app(project_id, bundle_id, display_name)

		# see reason described above
		sleep 3

		# download apps for project
		apps = api.android_app_list(project_id)

		# search for newly created app
		app = apps.detect {|app| app["packageName"] == bundle_id }
	end

	# present result to user
	if app != nil then
		UI.success "New app with id: #{app["appId"]} successfully created"
	else
		UI.crash! "Unable to create new app"
	end

	if params[:download_config] then
		#Download config
		Actions::FirebaseManagementDownloadConfigAction.run(
			service_account_json_path: params[:service_account_json_path],
			project_id: project_id,
			app_id: app["appId"],
			type: type,
			output_path: params[:output_path]
		)
	end
end