roku_builder 3.3.3 → 3.3.4

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +1158 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile.lock +19 -14
  6. data/README.md +5 -0
  7. data/bin/roku +32 -37
  8. data/config.json.example +2 -2
  9. data/lib/roku_builder/config_manager.rb +83 -118
  10. data/lib/roku_builder/config_parser.rb +192 -0
  11. data/lib/roku_builder/config_validator.rb +125 -0
  12. data/lib/roku_builder/controller.rb +97 -484
  13. data/lib/roku_builder/controller_commands.rb +112 -0
  14. data/lib/roku_builder/error_handler.rb +116 -0
  15. data/lib/roku_builder/inspector.rb +5 -18
  16. data/lib/roku_builder/keyer.rb +3 -11
  17. data/lib/roku_builder/linker.rb +3 -15
  18. data/lib/roku_builder/loader.rb +52 -89
  19. data/lib/roku_builder/manifest_manager.rb +2 -3
  20. data/lib/roku_builder/monitor.rb +15 -12
  21. data/lib/roku_builder/navigator.rb +2 -10
  22. data/lib/roku_builder/packager.rb +1 -7
  23. data/lib/roku_builder/tester.rb +1 -0
  24. data/lib/roku_builder/util.rb +39 -0
  25. data/lib/roku_builder/version.rb +1 -1
  26. data/lib/roku_builder.rb +96 -1
  27. data/roku_builder.gemspec +5 -4
  28. data/tests/roku_builder/config_manager_test.rb +80 -241
  29. data/tests/roku_builder/{controller_config_test.rb → config_parser_test.rb} +5 -5
  30. data/tests/roku_builder/config_validator_test.rb +158 -0
  31. data/tests/roku_builder/controller_commands_test.rb +304 -0
  32. data/tests/roku_builder/controller_test.rb +61 -620
  33. data/tests/roku_builder/error_handler_test.rb +76 -0
  34. data/tests/roku_builder/inspector_test.rb +3 -0
  35. data/tests/roku_builder/keyer_test.rb +3 -2
  36. data/tests/roku_builder/linker_test.rb +2 -1
  37. data/tests/roku_builder/loader_test.rb +2 -0
  38. data/tests/roku_builder/manifest_manager_test.rb +3 -6
  39. data/tests/roku_builder/monitor_test.rb +5 -13
  40. data/tests/roku_builder/navigator_test.rb +2 -0
  41. data/tests/roku_builder/test_helper.rb +38 -0
  42. metadata +34 -11
@@ -3,101 +3,11 @@ module RokuBuilder
3
3
  # Controls all interaction with other classes
4
4
  class Controller
5
5
 
6
-
7
-
8
- ### Validation Codes ###
9
-
10
- # Valid Options
11
- VALID = 0
12
-
13
- # Too many commands given
14
- EXTRA_COMMANDS = 1
15
-
16
- # No commands given
17
- NO_COMMANDS = 2
18
-
19
- # Too many source options given
20
- EXTRA_SOURCES = 3
21
-
22
- # No source options given
23
- NO_SOURCE = 4
24
-
25
- # Incorrect use of current option
26
- BAD_CURRENT = 5
27
-
28
- # No deeplink options supplied for deeplink
29
- BAD_DEEPLINK = 6
30
-
31
- # Incorrect use of the in option
32
- BAD_IN_FILE = 7
33
-
34
-
35
-
36
- ### Device Codes ###
37
-
38
- # The default device is offline switched to a secondary device
39
- CHANGED_DEVICE = -1
40
-
41
- # Device is online
42
- GOOD_DEVICE = 0
43
-
44
- # User defined device was not online
45
- BAD_DEVICE = 1
46
-
47
- # No configured devices were online
48
- NO_DEVICES = 2
49
-
50
-
51
-
52
- ### Run Codes ###
53
-
54
- # Config has deplicated options
55
- DEPRICATED_CONFIG = -1
56
-
57
- # Valid config
58
- SUCCESS = 0
59
-
60
- # Tring to overwrite existing config file
61
- CONFIG_OVERWRITE = 1
62
-
63
- # Missing config file
64
- MISSING_CONFIG = 2
65
-
66
- # Invalid config file
67
- INVALID_CONFIG = 3
68
-
69
- # Missing manifest file
70
- MISSING_MANIFEST = 4
71
-
72
- # Unknow device given
73
- UNKNOWN_DEVICE = 5
74
-
75
- # Unknown project given
76
- UNKNOWN_PROJECT = 6
77
-
78
- # Unknown stage given
79
- UNKNOWN_STAGE = 7
80
-
81
- # Failed to sideload app
82
- FAILED_SIDELOAD = 8
83
-
84
- # Failed to sign app
85
- FAILED_SIGNING = 9
86
-
87
- # Failed to deeplink to app
88
- FAILED_DEEPLINKING = 10
89
-
90
- # Failed to send navigation command
91
- FAILED_NAVIGATING = 11
92
-
93
- # Failed to capture screen
94
- FAILED_SCREENCAPTURE = 12
95
-
96
6
  # Run the builder
97
7
  # @param options [Hash] The options hash
98
8
  def self.run(options:)
99
9
  logger = Logger.new(STDOUT)
100
- logger.formatter = proc {|severity, datetime, progname, msg|
10
+ logger.formatter = proc {|severity, datetime, _progname, msg|
101
11
  "[%s #%s] %5s: %s\n\r" % [datetime.strftime("%Y-%m-%d %H:%M:%S.%4N"), $$, severity, msg]
102
12
  }
103
13
  if options[:debug]
@@ -108,142 +18,111 @@ module RokuBuilder
108
18
  logger.level = Logger::WARN
109
19
  end
110
20
 
21
+ # Validate Options
22
+ options_code = validate_options(options: options)
23
+ ErrorHandler.handle_options_codes(options_code: options_code, logger: logger)
111
24
 
112
- options_code = self.validate_options(options: options, logger: logger)
25
+ # Configure Gem
26
+ configure_code = configure(options: options, logger: logger)
27
+ ErrorHandler.handle_configure_codes(configure_code: configure_code, logger: logger)
113
28
 
114
- self.handle_error_codes(options: options, options_code: options_code, logger: logger)
29
+ # Load Config
30
+ load_code, config, configs = ConfigManager.load_config(options: options, logger: logger)
31
+ ErrorHandler.handle_load_codes(options: options, load_code: load_code, logger: logger)
115
32
 
116
- handle_code = self.handle_options(options: options, logger: logger)
33
+ # Check devices
34
+ device_code, configs = check_devices(options: options, config: config, configs: configs, logger: logger)
35
+ ErrorHandler.handle_device_codes(device_code: device_code, logger: logger)
117
36
 
118
- self.handle_error_codes(options: options, handle_code: handle_code, logger: logger)
37
+ # Run Commands
38
+ command_code = execute_commands(options: options, config: config, configs: configs, logger: logger)
39
+ ErrorHandler.handle_command_codes(command_code: command_code, logger: logger)
119
40
  end
120
41
 
121
- protected
42
+ # Validates the user options
43
+ # @param options [Hash] The options hash
44
+ # @return [Integer] Status code for command validation
45
+ def self.validate_options(options:)
46
+ command_result = validate_command_options(options: options)
47
+ return command_result unless command_result == VALID
48
+ source_result = validate_source_options(options: options)
49
+ return source_result unless source_result == VALID
50
+ combination_result = validate_option_combinations(options: options)
51
+ return combination_result
52
+ end
53
+ private_class_method :validate_options
122
54
 
123
- # Validates the commands
55
+ # Validates use of command options
124
56
  # @param options [Hash] The options hash
125
57
  # @return [Integer] Status code for command validation
126
- # @param logger [Logger] system logger
127
- def self.validate_options(options:, logger:)
128
- commands = options.keys & self.commands
129
- return EXTRA_COMMANDS if commands.count > 1
130
- return NO_COMMANDS if commands.count < 1
131
- sources = options.keys & self.sources
132
- return EXTRA_SOURCES if sources.count > 1
133
- if (options.keys & self.source_commands).count == 1
134
- return NO_SOURCE unless sources.count == 1
58
+ def self.validate_command_options(options:)
59
+ all_commands = options.keys & commands
60
+ return EXTRA_COMMANDS if all_commands.count > 1
61
+ return NO_COMMANDS if all_commands.count < 1
62
+ VALID
63
+ end
64
+ private_class_method :validate_command_options
65
+
66
+ # Validates use of source options
67
+ # @param options [Hash] The options hash
68
+ # @return [Integer] Status code for command validation
69
+ def self.validate_source_options(options:)
70
+ all_sources = options.keys & sources
71
+ return EXTRA_SOURCES if all_sources.count > 1
72
+ if (options.keys & source_commands).count == 1
73
+ return NO_SOURCE unless all_sources.count == 1
135
74
  end
136
- if sources.include?(:current)
75
+ VALID
76
+ end
77
+ private_class_method :validate_source_options
78
+
79
+ # Validates proper option combinations
80
+ # @param options [Hash] The options hash
81
+ # @return [Integer] Status code for command validation
82
+ def self.validate_option_combinations(options:)
83
+ all_sources = options.keys & sources
84
+ if all_sources.include?(:current)
137
85
  return BAD_CURRENT unless options[:build] or options[:sideload]
138
86
  end
139
87
  if options[:in]
140
88
  return BAD_IN_FILE unless options[:sideload]
141
89
  end
142
90
  if options[:deeplink]
143
- return BAD_DEEPLINK if !options[:deeplink_options] or options[:deeplink_options].chomp == ""
91
+ return BAD_DEEPLINK if options[:deeplink_options].to_s.empty?
144
92
  end
145
- return VALID
93
+ VALID
146
94
  end
95
+ private_class_method :validate_option_combinations
147
96
 
148
97
  # Run commands
149
98
  # @param options [Hash] The options hash
150
99
  # @return [Integer] Return code for options handeling
151
100
  # @param logger [Logger] system logger
152
- def self.handle_options(options:, logger:)
153
- if options[:configure]
154
- return configure(options: options, logger: logger)
155
- end
156
- code, config, configs = self.load_config(options: options, logger: logger)
157
- return code if code != SUCCESS
158
-
159
- # Check devices
160
- device_code, configs = self.check_devices(options: options, config: config, configs: configs, logger: logger)
161
- self.handle_error_codes(options: options, device_code: device_code, logger: logger)
162
-
163
- command = (self.commands & options.keys).first
164
- case command
165
- when :validate
166
- # Do Nothing #
167
- when :sideload
168
- ### Sideload App ###
169
- loader = Loader.new(**configs[:device_config])
170
- success = loader.sideload(**configs[:sideload_config])
171
- return FAILED_SIDELOAD unless success
172
- when :package
173
- ### Package App ###
174
- keyer = Keyer.new(**configs[:device_config])
175
- loader = Loader.new(**configs[:device_config])
176
- packager = Packager.new(**configs[:device_config])
177
- inspector = Inspector.new(**configs[:device_config])
178
- logger.warn "Packaging working directory" if options[:working]
179
- # Sideload #
180
- build_version = loader.sideload(**configs[:sideload_config])
181
- return FAILED_SIGNING unless build_version
182
- # Key #
183
- success = keyer.rekey(**configs[:key])
184
- logger.info "Key did not change" unless success
185
- # Package #
186
- options[:build_version] = build_version
187
- configs = self.update_configs(configs: configs, options: options)
188
- success = packager.package(**configs[:package_config])
189
- logger.info "Signing Successful: #{configs[:package_config][:out_file]}" if success
190
- return FAILED_SIGNING unless success
191
- # Inspect #
192
- if options[:inspect]
193
- info = inspector.inspect(configs[:inspect_config])
194
- logger.unknown "App Name: #{info[:app_name]}"
195
- logger.unknown "Dev ID: #{info[:dev_id]}"
196
- logger.unknown "Creation Date: #{info[:creation_date]}"
197
- logger.unknown "dev.zip: #{info[:dev_zip]}"
101
+ def self.execute_commands(options:, config:, configs:, logger:)
102
+ command = (commands & options.keys).first
103
+ if ControllerCommands.simple_commands.keys.include?(command)
104
+ params = ControllerCommands.simple_commands[command]
105
+ params[:configs] = configs
106
+ ControllerCommands.simple_command(**params)
107
+ else
108
+ params = ControllerCommands.method(command.to_s).parameters.collect{|a|a[1]}
109
+ args = {}
110
+ params.each do |key|
111
+ case key
112
+ when :options
113
+ args[:options] = options
114
+ when :config
115
+ args[:config] = config
116
+ when :configs
117
+ args[:configs] = configs
118
+ when :logger
119
+ args[:logger] = logger
120
+ end
198
121
  end
199
- when :build
200
- ### Build ###
201
- loader = Loader.new(**configs[:device_config])
202
- build_version = ManifestManager.build_version(**configs[:manifest_config])
203
- options[:build_version] = build_version
204
- configs = self.update_configs(configs: configs, options: options)
205
- outfile = loader.build(**configs[:build_config])
206
- logger.info "Build: #{outfile}"
207
- when :update
208
- ### Update ###
209
- old_version = ManifestManager.build_version(**configs[:manifest_config])
210
- new_version = ManifestManager.update_build(**configs[:manifest_config])
211
- logger.info "Update build version from:\n#{old_version}\nto:\n#{new_version}"
212
- when :deeplink
213
- ### Deeplink ###
214
- linker = Linker.new(**configs[:device_config])
215
- success = linker.link(**configs[:deeplink_config])
216
- return FAILED_DEEPLINKING unless success
217
- when :delete
218
- loader = Loader.new(**configs[:device_config])
219
- loader.unload()
220
- when :monitor
221
- monitor = Monitor.new(**configs[:device_config])
222
- monitor.monitor(**configs[:monitor_config])
223
- when :navigate
224
- navigator = Navigator.new(**configs[:device_config])
225
- success = navigator.nav(**configs[:navigate_config])
226
- return FAILED_NAVIGATING unless success
227
- when :screen
228
- navigator = Navigator.new(**configs[:device_config])
229
- success = navigator.screen(**configs[:screen_config])
230
- return FAILED_NAVIGATING unless success
231
- when :screens
232
- navigator = Navigator.new(**configs[:device_config])
233
- navigator.screens
234
- when :text
235
- navigator = Navigator.new(**configs[:device_config])
236
- navigator.type(**configs[:text_config])
237
- when :test
238
- tester = Tester.new(**configs[:device_config])
239
- tester.run_tests(**configs[:test_config])
240
- when :screencapture
241
- inspector = Inspector.new(**configs[:device_config])
242
- success = inspector.screencapture(**configs[:screencapture_config])
243
- return FAILED_SCREENCAPTURE unless success
122
+ ControllerCommands.send(command, args)
244
123
  end
245
- return SUCCESS
246
124
  end
125
+ private_class_method :execute_commands
247
126
 
248
127
  # Ensure that the selected device is accessable
249
128
  # @param options [Hash] The options hash
@@ -265,6 +144,7 @@ module RokuBuilder
265
144
  }
266
145
  return [NO_DEVICES, nil]
267
146
  end
147
+ private_class_method :check_devices
268
148
 
269
149
  # List of command options
270
150
  # @return [Array<Symbol>] List of command symbols that can be used in the options hash
@@ -273,314 +153,47 @@ module RokuBuilder
273
153
  :navigate, :text, :build, :monitor, :update, :screencapture, :screen,
274
154
  :screens]
275
155
  end
156
+ private_class_method :commands
276
157
 
277
158
  # List of source options
278
159
  # @return [Array<Symbol>] List of source symbols that can be used in the options hash
279
160
  def self.sources
280
161
  [:ref, :set_stage, :working, :current]
281
162
  end
163
+ private_class_method :sources
282
164
 
283
165
  # List of commands requiring a source option
284
166
  # @return [Array<Symbol>] List of command symbols that require a source in the options hash
285
167
  def self.source_commands
286
168
  [:sideload, :package, :test, :build]
287
169
  end
170
+ private_class_method :source_commands
288
171
 
289
- # Handle error codes
290
- # @param options_code [Integer] the error code returned by validate_options
291
- # @param handle_code [Integer] the error code returned by handle_options
292
- # @param logger [Logger] system logger
293
- def self.handle_error_codes(options:, options_code: nil, device_code: nil, handle_code: nil, logger:)
294
- if options_code
295
- case options_code
296
- when EXTRA_COMMANDS
297
- logger.fatal "Only one command is allowed"
298
- abort
299
- when NO_COMMANDS
300
- logger.fatal "At least one command is required"
301
- abort
302
- when EXTRA_SOURCES
303
- logger.fatal "Only use one of --ref, --working, --current or --stage"
304
- abort
305
- when NO_SOURCE
306
- logger.fatal "Must use at least one of --ref, --working, --current or --stage"
307
- abort
308
- when BAD_CURRENT
309
- logger.fatal "Can only sideload or build 'current' directory"
310
- abort
311
- when BAD_DEEPLINK
312
- logger.fatal "Must supply deeplinking options when deeplinking"
313
- abort
314
- when BAD_IN_FILE
315
- logger.fatal "Can only supply in file for building"
316
- abort
317
- end
318
- elsif device_code
319
- case device_code
320
- when CHANGED_DEVICE
321
- logger.info "The default device was not online so a secondary device is being used"
322
- when BAD_DEVICE
323
- logger.fatal "The selected device was not online"
324
- abort
325
- when NO_DEVICES
326
- logger.fatal "No configured devices were found"
327
- abort
328
- end
329
- elsif handle_code
330
- case handle_code
331
- when DEPRICATED_CONFIG
332
- logger.warn 'Depricated config. See Above'
333
- when CONFIG_OVERWRITE
334
- logger.fatal 'Config already exists. To create default please remove config first.'
335
- abort
336
- when MISSING_CONFIG
337
- logger.fatal "Missing config file: #{options[:config]}"
338
- abort
339
- when INVALID_CONFIG
340
- logger.fatal 'Invalid config. See Above'
341
- abort
342
- when MISSING_MANIFEST
343
- logger.fatal 'Manifest file missing'
344
- abort
345
- when UNKNOWN_DEVICE
346
- logger.fatal "Unkown device id"
347
- abort
348
- when UNKNOWN_PROJECT
349
- logger.fatal "Unknown project id"
350
- abort
351
- when UNKNOWN_STAGE
352
- logger.fatal "Unknown stage"
353
- abort
354
- when FAILED_SIDELOAD
355
- logger.fatal "Failed Sideloading App"
356
- abort
357
- when FAILED_SIGNING
358
- logger.fatal "Failed Signing App"
359
- abort
360
- when FAILED_DEEPLINKING
361
- logger.fatal "Failed Deeplinking To App"
362
- abort
363
- when FAILED_NAVIGATING
364
- logger.fatal "Command not sent"
365
- abort
366
- when FAILED_SCREENCAPTURE
367
- logger.fatal "Failed to Capture Screen"
368
- abort
369
- end
370
- end
371
- end
372
172
 
373
173
  # Configure the gem
374
174
  # @param options [Hash] The options hash
375
175
  # @return [Integer] Success or failure code
376
176
  # @param logger [Logger] system logger
377
177
  def self.configure(options:, logger:)
378
- source_config = File.expand_path(File.join(File.dirname(__FILE__), "..", '..', 'config.json.example'))
379
- target_config = File.expand_path(options[:config])
380
- if File.exist?(target_config)
381
- unless options[:edit_params]
382
- return CONFIG_OVERWRITE
383
- end
384
- else
385
- ### Copy Config File ###
386
- FileUtils.copy(source_config, target_config)
387
- end
388
- if options[:edit_params]
389
- ConfigManager.edit_config(config: target_config, options: options[:edit_params], device: options[:device], project: options[:project], stage: options[:stage], logger: logger)
390
- end
391
- return SUCCESS
392
- end
393
-
394
- # Load config file and generate intermeidate configs
395
- # @param options [Hash] The options hash
396
- # @param logger [Logger] system logger
397
- # @return [Integer] Return code
398
- # @return [Hash] Loaded config
399
- # @return [Hash] Intermeidate configs
400
- def self.load_config(options:, logger:)
401
- config_file = File.expand_path(options[:config])
402
- return MISSING_CONFIG unless File.exists?(config_file)
403
- code = SUCCESS
404
- config = ConfigManager.get_config(config: config_file, logger: logger)
405
- return INVALID_CONFIG unless config
406
- configs = {}
407
- codes = ConfigManager.validate_config(config: config, logger: logger)
408
- fatal = false
409
- warning = false
410
- codes.each {|code|
411
- if code > 0
412
- logger.fatal "Invalid Config: "+ ConfigManager.error_codes()[code]
413
- fatal = true
414
- elsif code < 0
415
- logger.warn "Depricated Config: "+ ConfigManager.error_codes()[code]
416
- warning = true
417
- elsif code == 0 and options[:validate]
418
- logger.info "Config Valid"
419
- end
420
- }
421
- return [INVALID_CONFIG, nil, nil] if fatal
422
- code = DEPRICATED_CONFIG if warning
423
-
424
- #set device
425
- unless options[:device]
426
- options[:device] = config[:devices][:default]
427
- end
428
- #set project
429
- if options[:current] or not options[:project]
430
- path = self.system(command: "pwd")
431
- project = nil
432
- config[:projects].each_pair {|key,value|
433
- if value.is_a?(Hash)
434
- repo_path = Pathname.new(value[:directory]).realdirpath.to_s
435
- if path.start_with?(repo_path)
436
- project = key
437
- break
438
- end
178
+ if options[:configure]
179
+ source_config = File.expand_path(File.join(File.dirname(__FILE__), "..", '..', 'config.json.example'))
180
+ target_config = File.expand_path(options[:config])
181
+ if File.exist?(target_config)
182
+ unless options[:edit_params]
183
+ return CONFIG_OVERWRITE
439
184
  end
440
- }
441
- if project
442
- options[:project] = project
443
185
  else
444
- options[:project] = config[:projects][:default]
186
+ ### Copy Config File ###
187
+ FileUtils.copy(source_config, target_config)
445
188
  end
446
- end
447
- #set outfile
448
- options[:out_folder] = nil
449
- options[:out_file] = nil
450
- if options[:out]
451
- if options[:out].end_with?(".zip") or options[:out].end_with?(".pkg") or options[:out].end_with?(".jpg")
452
- options[:out_folder], options[:out_file] = Pathname.new(options[:out]).split.map{|p| p.to_s}
453
- else
454
- options[:out_folder] = options[:out]
455
- end
456
- end
457
- unless options[:out_folder]
458
- options[:out_folder] = "/tmp"
459
- end
460
-
461
- # Create Device Config
462
- configs[:device_config] = config[:devices][options[:device].to_sym]
463
- return [UNKNOWN_DEVICE, nil, nil] unless configs[:device_config]
464
- configs[:device_config][:logger] = logger
465
-
466
- #Create Project Config
467
- project_config = {}
468
- if options[:current]
469
- pwd = self.system(command: "pwd")
470
- return [MISSING_MANIFEST, nil, nil] unless File.exist?(File.join(pwd, "manifest"))
471
- project_config = {
472
- directory: pwd,
473
- folders: nil,
474
- files: nil,
475
- stages: { production: { branch: nil } }
476
- }
477
- else
478
- project_config = config[:projects][options[:project].to_sym]
479
- end
480
- return [UNKNOWN_PROJECT, nil, nil] unless project_config
481
- configs[:project_config] = project_config
482
- stage = options[:stage].to_sym
483
- return [UNKNOWN_STAGE, nil, nil] unless project_config[:stages][stage]
484
- configs[:stage] = stage
485
-
486
- root_dir = project_config[:directory]
487
- branch = project_config[:stages][stage][:branch]
488
- branch = options[:ref] if options[:ref]
489
- branch = nil if options[:current]
490
- branch = nil if options[:working]
491
-
492
- # Create Sideload Config
493
- configs[:sideload_config] = {
494
- root_dir: root_dir,
495
- branch: branch,
496
- update_manifest: options[:update_manifest],
497
- fetch: options[:fetch],
498
- folders: project_config[:folders],
499
- files: project_config[:files]
500
- }
501
- if options[:package]
502
- # Create Key Config
503
- configs[:key] = project_config[:stages][stage][:key]
504
- # Create Package Config
505
- configs[:package_config] = {
506
- password: configs[:key][:password],
507
- app_name_version: "#{project_config[:app_name]} - #{stage}"
508
- }
509
- if options[:out_file]
510
- configs[:package_config][:out_file] = File.join(options[:out_folder], options[:out_file])
511
- end
512
- # Create Inspector Config
513
- configs[:inspect_config] = {
514
- pkg: configs[:package_config][:out_file],
515
- password: configs[:key][:password]
516
- }
517
- end if
518
- # Create Build Config
519
- configs[:build_config] = {
520
- root_dir: root_dir,
521
- branch: branch,
522
- fetch: options[:fetch],
523
- folders: project_config[:folders],
524
- files: project_config[:files]
525
- }
526
- # Create Manifest Config
527
- configs[:manifest_config] = {
528
- root_dir: project_config[:directory],
529
- logger: logger
530
- }
531
- # Create Deeplink Config
532
- configs[:deeplink_config] ={
533
- options: options[:deeplink_options]
534
- }
535
- # Create Monitor Config
536
- if options[:monitor]
537
- configs[:monitor_config] = {
538
- type: options[:monitor].to_sym
539
- }
540
- end
541
- # Create Navigate Config
542
- if options[:navigate]
543
- configs[:navigate_config] = {
544
- command: options[:navigate].to_sym
545
- }
546
- end
547
- # Create Text Config
548
- configs[:text_config] = {
549
- text: options[:text]
550
- }
551
- # Create Test Config
552
- configs[:test_config] = {
553
- sideload_config: configs[:sideload_config]
554
- }
555
- #Create screencapture config
556
- configs[:screencapture_config] = {
557
- out_folder: options[:out_folder],
558
- out_file: options[:out_file]
559
- }
560
-
561
- if options[:screen]
562
- configs[:screen_config] = {
563
- type: options[:screen].to_sym
564
- }
565
- end
566
- return [code, config, configs]
567
- end
568
-
569
- # Update the intermeidate configs
570
- # @param configs [Hash] Intermeidate configs hash
571
- # @param options [Hash] Options hash
572
- # @return [Hash] New intermeidate configs hash
573
- def self.update_configs(configs:, options:)
574
- if options[:build_version]
575
- configs[:package_config][:app_name_version] = "#{configs[:project_config][:app_name]} - #{configs[:stage]} - #{options[:build_version]}" if configs[:package_config]
576
- unless options[:outfile]
577
- configs[:package_config][:out_file] = File.join(options[:out_folder], "#{configs[:project_config][:app_name]}_#{configs[:stage]}_#{options[:build_version]}.pkg") if configs[:package_config]
578
- configs[:build_config][:outfile] = File.join(options[:out_folder], "#{configs[:project_config][:app_name]}_#{configs[:stage]}_#{options[:build_version]}.zip") if configs[:build_config]
579
- configs[:inspect_config][:pkg] = configs[:package_config][:out_file] if configs[:inspect_config] and configs[:package_config]
189
+ if options[:edit_params]
190
+ ConfigManager.edit_config(config: target_config, options: options, logger: logger)
580
191
  end
192
+ return SUCCESS
581
193
  end
582
- return configs
194
+ nil
583
195
  end
196
+ private_class_method :configure
584
197
 
585
198
  # Run a system command
586
199
  # @param command [String] The command to be run