roku_builder 3.13.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG +12 -0
- data/Gemfile.lock +22 -7
- data/Guardfile +3 -3
- data/README.md +22 -398
- data/bin/roku +1 -194
- data/config.json.example +1 -1
- data/intergration/roku_builder/test_core.rb +52 -0
- data/intergration/roku_builder/test_files/core_intergration_test/manifest_template +7 -0
- data/intergration/roku_builder/test_files/core_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/components/rectanglescene.xml +28 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/source/main.brs +23 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_helper.rb +138 -0
- data/intergration/roku_builder/test_inspector.rb +35 -0
- data/intergration/roku_builder/test_linker.rb +32 -0
- data/intergration/roku_builder/test_loader.rb +38 -0
- data/intergration/roku_builder/test_monitor.rb +21 -0
- data/intergration/roku_builder/test_navigator.rb +34 -0
- data/intergration/roku_builder/test_packager.rb +41 -0
- data/intergration/roku_builder/test_profiler.rb +48 -0
- data/intergration/roku_builder/test_scripter.rb +38 -0
- data/intergration/roku_builder/test_tester.rb +21 -0
- data/lib/roku_builder.rb +143 -154
- data/lib/roku_builder/config.rb +17 -40
- data/lib/roku_builder/config_parser.rb +49 -200
- data/lib/roku_builder/config_validator.rb +1 -1
- data/lib/roku_builder/errors.rb +12 -0
- data/lib/roku_builder/git.rb +28 -0
- data/lib/roku_builder/hash.rb +8 -0
- data/lib/roku_builder/manifest.rb +121 -0
- data/lib/roku_builder/options.rb +68 -29
- data/lib/roku_builder/plugin.rb +30 -0
- data/lib/roku_builder/plugins/core.rb +117 -0
- data/lib/roku_builder/plugins/inspector.rb +104 -0
- data/lib/roku_builder/{linker.rb → plugins/linker.rb} +38 -12
- data/lib/roku_builder/plugins/loader.rb +152 -0
- data/lib/roku_builder/{monitor.rb → plugins/monitor.rb} +20 -9
- data/lib/roku_builder/{navigator.rb → plugins/navigator.rb} +136 -88
- data/lib/roku_builder/plugins/packager.rb +194 -0
- data/lib/roku_builder/plugins/profiler.rb +135 -0
- data/lib/roku_builder/plugins/scripter.rb +53 -0
- data/lib/roku_builder/{tester.rb → plugins/tester.rb} +28 -19
- data/lib/roku_builder/stager.rb +48 -12
- data/lib/roku_builder/string.rb +20 -0
- data/lib/roku_builder/util.rb +10 -34
- data/lib/roku_builder/version.rb +1 -1
- data/rakefile +5 -1
- data/roku_builder.gemspec +2 -0
- data/test/roku_builder/plugins/test_core.rb +112 -0
- data/test/roku_builder/plugins/test_inspector.rb +165 -0
- data/test/roku_builder/plugins/test_linker.rb +123 -0
- data/test/roku_builder/plugins/test_loader.rb +115 -0
- data/test/roku_builder/plugins/test_monitor.rb +141 -0
- data/test/roku_builder/plugins/test_navigator.rb +274 -0
- data/test/roku_builder/plugins/test_packager.rb +202 -0
- data/test/roku_builder/plugins/test_profiler.rb +127 -0
- data/test/roku_builder/plugins/test_scripter.rb +110 -0
- data/test/roku_builder/plugins/test_tester.rb +109 -0
- data/test/roku_builder/test_config.rb +51 -35
- data/test/roku_builder/test_config_parser.rb +76 -154
- data/test/roku_builder/test_config_validator.rb +18 -1
- data/test/roku_builder/test_files/{loader_test/manifest → config_parser_test/test.pkg} +0 -0
- data/test/roku_builder/test_files/config_test/config.json +3 -0
- data/test/roku_builder/test_files/controller_commands_test/manifest_template +7 -0
- data/test/roku_builder/test_files/core_test/manifest_template +7 -0
- data/test/roku_builder/test_files/core_test/test.pkg +0 -0
- data/test/roku_builder/test_files/inspector_test/manifest +6 -0
- data/test/roku_builder/test_files/inspector_test/test.pkg +0 -0
- data/test/roku_builder/test_files/linker_test/manifest +6 -0
- data/test/roku_builder/test_files/linker_test/test.pkg +0 -0
- data/test/roku_builder/test_files/loader_test/manifest_template +6 -0
- data/test/roku_builder/test_files/loader_test/test.pkg +0 -0
- data/test/roku_builder/test_files/loader_test/test.zip +0 -0
- data/test/roku_builder/test_files/manifest_test/manifest_comments +6 -0
- data/test/roku_builder/test_files/manifest_test/manifest_template +7 -0
- data/test/roku_builder/test_files/manifest_test/test.zip +0 -0
- data/test/roku_builder/test_files/packager_test/manifest +6 -0
- data/test/roku_builder/test_files/packager_test/scripter_test/manifest +6 -0
- data/test/roku_builder/test_files/packager_test/test.pkg +0 -0
- data/test/roku_builder/test_files/roku_builder_test/config.json +32 -0
- data/test/roku_builder/test_files/scripter_test/manifest +6 -0
- data/test/roku_builder/test_files/scripter_test/test.pkg +0 -0
- data/test/roku_builder/test_files/stager_test/test.pkg +0 -0
- data/test/roku_builder/test_files/tester_test/manifest +6 -0
- data/test/roku_builder/test_files/tester_test/test.pkg +0 -0
- data/test/roku_builder/test_helper.rb +44 -11
- data/test/roku_builder/test_logger.rb +1 -0
- data/test/roku_builder/test_manifest.rb +99 -0
- data/test/roku_builder/test_options.rb +106 -77
- data/test/roku_builder/test_options_plugins.rb +111 -0
- data/test/roku_builder/test_plugin.rb +48 -0
- data/test/roku_builder/test_roku_builder.rb +239 -0
- data/test/roku_builder/test_stager.rb +49 -101
- data/test/roku_builder/test_util.rb +19 -4
- metadata +241 -47
- data/lib/roku_builder/controller.rb +0 -98
- data/lib/roku_builder/controller_commands.rb +0 -224
- data/lib/roku_builder/error_handler.rb +0 -142
- data/lib/roku_builder/inspector.rb +0 -82
- data/lib/roku_builder/keyer.rb +0 -106
- data/lib/roku_builder/loader.rb +0 -131
- data/lib/roku_builder/manifest_manager.rb +0 -126
- data/lib/roku_builder/packager.rb +0 -43
- data/lib/roku_builder/profiler.rb +0 -96
- data/lib/roku_builder/scripter.rb +0 -39
- data/test/roku_builder/test_controller.rb +0 -70
- data/test/roku_builder/test_controller_commands.rb +0 -465
- data/test/roku_builder/test_error_handler.rb +0 -90
- data/test/roku_builder/test_inspector.rb +0 -298
- data/test/roku_builder/test_keyer.rb +0 -176
- data/test/roku_builder/test_linker.rb +0 -110
- data/test/roku_builder/test_loader.rb +0 -337
- data/test/roku_builder/test_manifest_manager.rb +0 -103
- data/test/roku_builder/test_monitor.rb +0 -137
- data/test/roku_builder/test_navigator.rb +0 -280
- data/test/roku_builder/test_packager.rb +0 -127
- data/test/roku_builder/test_profiler.rb +0 -35
- data/test/roku_builder/test_scripter.rb +0 -102
- data/test/roku_builder/test_tester.rb +0 -130
@@ -1,224 +0,0 @@
|
|
1
|
-
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
2
|
-
|
3
|
-
module RokuBuilder
|
4
|
-
|
5
|
-
# Commands that the controller uses to interface with the rest of the gem.
|
6
|
-
class ControllerCommands
|
7
|
-
|
8
|
-
# Provides a hash of all of the options needed to run simple commands via
|
9
|
-
# the simple_command method
|
10
|
-
# @return [Hash] options to run simple commands
|
11
|
-
def self.simple_commands
|
12
|
-
{
|
13
|
-
delete: { klass: Loader, method: :unload },
|
14
|
-
monitor: { klass: Monitor, method: :monitor,
|
15
|
-
config_key: :monitor_config },
|
16
|
-
navigate: { klass: Navigator, method: :nav, config_key: :navigate_config,
|
17
|
-
failure: FAILED_NAVIGATING },
|
18
|
-
navigator: { klass: Navigator, method: :interactive },
|
19
|
-
screen: { klass: Navigator, method: :screen, config_key: :screen_config,
|
20
|
-
failure: FAILED_NAVIGATING },
|
21
|
-
key: { klass: Keyer, method: :rekey, config_key: :key },
|
22
|
-
genkey: { klass: Keyer, method: :genkey, config_key: :genkey },
|
23
|
-
screens: { klass: Navigator, method: :screens },
|
24
|
-
text: { klass: Navigator, method: :type, config_key: :text_config },
|
25
|
-
screencapture: { klass: Inspector, method: :screencapture, config_key: :screencapture_config,
|
26
|
-
failure: FAILED_SCREENCAPTURE },
|
27
|
-
applist: {klass: Linker, method: :list},
|
28
|
-
profile: {klass: Profiler, method: :run, config_key: :profiler_config}
|
29
|
-
}
|
30
|
-
end
|
31
|
-
# Validate Config
|
32
|
-
# @return [Integer] Success or Failure Code
|
33
|
-
def self.validate()
|
34
|
-
Logger.instance.info "Config validated"
|
35
|
-
SUCCESS
|
36
|
-
end
|
37
|
-
# Run Sideload
|
38
|
-
# @param options [Hash] user options
|
39
|
-
# @param config [Config] parsed config
|
40
|
-
# @return [Integer] Success or Failure Code
|
41
|
-
def self.sideload(options:, config:)
|
42
|
-
device_config = config.parsed[:device_config].dup
|
43
|
-
device_config[:init_params] = config.parsed[:init_params][:loader]
|
44
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
45
|
-
success = nil
|
46
|
-
if stager.stage
|
47
|
-
loader = Loader.new(**device_config)
|
48
|
-
build_version = ManifestManager.build_version(**config.parsed[:manifest_config])
|
49
|
-
options[:build_version] = build_version
|
50
|
-
config.update
|
51
|
-
success = loader.sideload(**config.parsed[:sideload_config])[0]
|
52
|
-
end
|
53
|
-
stager.unstage
|
54
|
-
if success == SUCCESS
|
55
|
-
Logger.instance.info "App Sideloaded; staged using #{stager.method}"
|
56
|
-
end
|
57
|
-
success
|
58
|
-
end
|
59
|
-
# Run Package
|
60
|
-
# @param options [Hash] user options
|
61
|
-
# @param config [Conifg] config object
|
62
|
-
# @return [Integer] Success or Failure Code
|
63
|
-
def self.package(options:, config:)
|
64
|
-
loader_config = config.parsed[:device_config].dup
|
65
|
-
loader_config[:init_params] = config.parsed[:init_params][:loader]
|
66
|
-
keyer = Keyer.new(**config.parsed[:device_config])
|
67
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
68
|
-
loader = Loader.new(**loader_config)
|
69
|
-
packager = Packager.new(**config.parsed[:device_config])
|
70
|
-
Logger.instance.warn "Packaging working directory" if options[:working]
|
71
|
-
if stager.stage
|
72
|
-
# Sideload #
|
73
|
-
code, build_version = loader.sideload(**config.parsed[:sideload_config])
|
74
|
-
return code unless code == SUCCESS
|
75
|
-
# Key #
|
76
|
-
_success = keyer.rekey(**config.parsed[:key])
|
77
|
-
# Package #
|
78
|
-
options[:build_version] = build_version
|
79
|
-
config.update
|
80
|
-
success = packager.package(**config.parsed[:package_config])
|
81
|
-
Logger.instance.info "Signing Successful: #{config.parsed[:package_config][:out_file]}" if success
|
82
|
-
return FAILED_SIGNING unless success
|
83
|
-
# Inspect #
|
84
|
-
if options[:inspect]
|
85
|
-
inspect_package(config: config)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
stager.unstage
|
89
|
-
Logger.instance.info "App Packaged; staged using #{stager.method}"
|
90
|
-
SUCCESS
|
91
|
-
end
|
92
|
-
# Run Sideload
|
93
|
-
# @param options [Hash] user options
|
94
|
-
# @param config [Config] parsed config
|
95
|
-
# @return [Integer] Success or Failure Code
|
96
|
-
def self.test(options:, config:)
|
97
|
-
device_config = config.parsed[:device_config].dup
|
98
|
-
device_config[:init_params] = config.parsed[:init_params][:tester]
|
99
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
100
|
-
if stager.stage
|
101
|
-
tester = Tester.new(**device_config)
|
102
|
-
tester.run_tests(**config.parsed[:test_config])
|
103
|
-
end
|
104
|
-
stager.unstage
|
105
|
-
SUCCESS
|
106
|
-
end
|
107
|
-
|
108
|
-
def self.inspect_package(config:)
|
109
|
-
inspector = Inspector.new(**config.parsed[:device_config])
|
110
|
-
info = inspector.inspect(config.parsed[:inspect_config])
|
111
|
-
inspect_logger = ::Logger.new(STDOUT)
|
112
|
-
inspect_logger.formatter = proc {|_severity, _datetime, _progname, msg|
|
113
|
-
"%s\n\r" % [msg]
|
114
|
-
}
|
115
|
-
inspect_logger.unknown "=============================================================="
|
116
|
-
inspect_logger.unknown "App Name: #{info[:app_name]}"
|
117
|
-
inspect_logger.unknown "Dev ID: #{info[:dev_id]}"
|
118
|
-
inspect_logger.unknown "Creation Date: #{info[:creation_date]}"
|
119
|
-
inspect_logger.unknown "dev.zip: #{info[:dev_zip]}"
|
120
|
-
inspect_logger.unknown "=============================================================="
|
121
|
-
end
|
122
|
-
private_class_method :inspect_package
|
123
|
-
|
124
|
-
# Run Build
|
125
|
-
# @param options [Hash] user options
|
126
|
-
# @param config [Config] config object
|
127
|
-
# @return [Integer] Success or Failure Code
|
128
|
-
def self.build(options:, config:)
|
129
|
-
### Build ###
|
130
|
-
loader_config = config.parsed[:device_config].dup
|
131
|
-
loader_config[:init_params] = config.parsed[:init_params][:loader]
|
132
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
133
|
-
loader = Loader.new(**loader_config)
|
134
|
-
if stager.stage
|
135
|
-
build_version = ManifestManager.build_version(**config.parsed[:manifest_config])
|
136
|
-
options[:build_version] = build_version
|
137
|
-
config.update
|
138
|
-
outfile = loader.build(**config.parsed[:build_config])
|
139
|
-
Logger.instance.info "Build: #{outfile}"
|
140
|
-
end
|
141
|
-
stager.unstage
|
142
|
-
Logger.instance.info "App build; staged using #{stager.method}"
|
143
|
-
SUCCESS
|
144
|
-
end
|
145
|
-
# Run update
|
146
|
-
# @param config [Config] config object
|
147
|
-
# @return [Integer] Success or Failure Code
|
148
|
-
def self.update(config:)
|
149
|
-
### Update ###
|
150
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
151
|
-
if stager.stage
|
152
|
-
old_version = ManifestManager.build_version(**config.parsed[:manifest_config])
|
153
|
-
new_version = ManifestManager.update_build(**config.parsed[:manifest_config])
|
154
|
-
Logger.instance.info "Update build version from:\n#{old_version}\nto:\n#{new_version}"
|
155
|
-
end
|
156
|
-
stager.unstage
|
157
|
-
SUCCESS
|
158
|
-
end
|
159
|
-
|
160
|
-
# Run Deeplink
|
161
|
-
# @param options [Hash] user options
|
162
|
-
# @param config [Config] config object
|
163
|
-
def self.deeplink(options:, config:)
|
164
|
-
if options.has_source?
|
165
|
-
sideload(options: options, config: config)
|
166
|
-
end
|
167
|
-
|
168
|
-
linker = Linker.new(config.parsed[:device_config])
|
169
|
-
if linker.launch(config.parsed[:deeplink_config])
|
170
|
-
Logger.instance.info "Deeplinked into app"
|
171
|
-
return SUCCESS
|
172
|
-
else
|
173
|
-
return FAILED_DEEPLINKING
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
# Run Print
|
178
|
-
# @param options [Hash] user options
|
179
|
-
# @param config [Config] config object
|
180
|
-
def self.print(options:, config:)
|
181
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
182
|
-
code = nil
|
183
|
-
if stager.stage
|
184
|
-
code = Scripter.print(attribute: options[:print].to_sym, configs: config.parsed)
|
185
|
-
end
|
186
|
-
stager.unstage
|
187
|
-
code
|
188
|
-
end
|
189
|
-
|
190
|
-
def self.dostage(config:)
|
191
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
192
|
-
stager.stage
|
193
|
-
end
|
194
|
-
|
195
|
-
def self.dounstage(config:)
|
196
|
-
stager = Stager.new(**config.parsed[:stage_config])
|
197
|
-
stager.unstage
|
198
|
-
end
|
199
|
-
|
200
|
-
# Run a simple command
|
201
|
-
# @param klass [Class] class of object to create
|
202
|
-
# @param method [Symbol] methog to run on klass
|
203
|
-
# @param config_key [Symbol] config to send from configs if not nil
|
204
|
-
# @param config [Configs] config object
|
205
|
-
# @param failure [Integer] failure code to return on failure if not nil
|
206
|
-
# @return [Integer] Success of failure code
|
207
|
-
def self.simple_command(klass:, method:, config_key: nil, config:, failure: nil)
|
208
|
-
klass_config = config.parsed[:device_config].dup
|
209
|
-
key = klass.to_s.split("::")[-1].underscore.to_sym
|
210
|
-
if config.parsed[:init_params][key]
|
211
|
-
klass_config[:init_params] = config.parsed[:init_params][key]
|
212
|
-
end
|
213
|
-
instance = klass.new(**klass_config)
|
214
|
-
if config_key
|
215
|
-
success = instance.send(method, config.parsed[config_key])
|
216
|
-
else
|
217
|
-
success = instance.send(method)
|
218
|
-
end
|
219
|
-
return failure unless failure.nil? or success
|
220
|
-
Logger.instance.debug "#{klass} call #{method} successfully"
|
221
|
-
SUCCESS
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
@@ -1,142 +0,0 @@
|
|
1
|
-
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
2
|
-
|
3
|
-
module RokuBuilder
|
4
|
-
|
5
|
-
# Contains methods to handle errors from different sources.
|
6
|
-
class ErrorHandler
|
7
|
-
# Handle codes returned from validating options
|
8
|
-
# @param options_code [Integer] the error code returned by validate_options
|
9
|
-
# @param logger [Logger] system logger
|
10
|
-
def self.handle_options_codes(options_code:, options:, logger:)
|
11
|
-
case options_code
|
12
|
-
when EXTRA_COMMANDS
|
13
|
-
logger.fatal "Only one command is allowed"
|
14
|
-
abort
|
15
|
-
when NO_COMMANDS
|
16
|
-
logger.fatal "At least one command is required"
|
17
|
-
abort
|
18
|
-
when EXTRA_SOURCES
|
19
|
-
logger.fatal "Only use one of --ref, --working, --current or --stage"
|
20
|
-
abort
|
21
|
-
when NO_SOURCE
|
22
|
-
logger.fatal "Must use at least one of --ref, --working, --current or --stage"
|
23
|
-
abort
|
24
|
-
when BAD_CURRENT
|
25
|
-
logger.fatal "Can only sideload or build 'current' directory"
|
26
|
-
abort
|
27
|
-
when BAD_IN_FILE
|
28
|
-
logger.fatal "Can only supply in file for building"
|
29
|
-
abort
|
30
|
-
when DEPRICATED
|
31
|
-
print_options_depricateions(options: options, logger: logger)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Handle codes returned from configuring
|
36
|
-
# @param configure_code [Integer] the error code returned by configure
|
37
|
-
# @param logger [Logger] system logger
|
38
|
-
def self.handle_configure_codes(configure_code:, logger:)
|
39
|
-
case configure_code
|
40
|
-
when CONFIG_OVERWRITE
|
41
|
-
logger.fatal 'Config already exists. To create default please remove config first.'
|
42
|
-
abort
|
43
|
-
when SUCCESS
|
44
|
-
logger.info 'Configure successful'
|
45
|
-
abort
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Handle codes returned from load_config
|
50
|
-
# @param options [Hash] the options hash
|
51
|
-
# @param load_code [Integer] the error code returned by configure
|
52
|
-
# @param logger [Logger] system logger
|
53
|
-
def self.handle_load_codes(options:, load_code:, logger:)
|
54
|
-
case load_code
|
55
|
-
when DEPRICATED_CONFIG
|
56
|
-
logger.warn 'Depricated config. See Above'
|
57
|
-
when MISSING_CONFIG
|
58
|
-
logger.fatal "Missing config file: #{options[:config]}"
|
59
|
-
abort
|
60
|
-
when INVALID_CONFIG
|
61
|
-
logger.fatal 'Invalid config. See Above'
|
62
|
-
abort
|
63
|
-
when MISSING_MANIFEST
|
64
|
-
logger.fatal 'Manifest file missing'
|
65
|
-
abort
|
66
|
-
when UNKNOWN_DEVICE
|
67
|
-
logger.fatal "Unkown device id"
|
68
|
-
abort
|
69
|
-
when UNKNOWN_PROJECT
|
70
|
-
logger.fatal "Unknown project id"
|
71
|
-
abort
|
72
|
-
when UNKNOWN_STAGE
|
73
|
-
logger.fatal "Unknown stage"
|
74
|
-
abort
|
75
|
-
when BAD_PROJECT_DIR
|
76
|
-
logger.fatal "Invalid directory for project"
|
77
|
-
abort
|
78
|
-
when BAD_KEY_FILE
|
79
|
-
logger.fatal "Invalid key path"
|
80
|
-
abort
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
# Handle codes returned from configuring
|
85
|
-
# @param configure_code [Integer] the error code returned by configure
|
86
|
-
# @param logger [Logger] system logger
|
87
|
-
def self.handle_configs_codes(configs_code:, logger:)
|
88
|
-
case configs_code
|
89
|
-
when MISSING_OUT_FOLDER
|
90
|
-
logger.fatal 'The folder passed in the command line options does not exist.'
|
91
|
-
abort
|
92
|
-
when VALID
|
93
|
-
logger.debug 'Configs OK'
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
# Handle codes returned from checking devices
|
98
|
-
# @param device_code [Integer] the error code returned by check_devices
|
99
|
-
# @param logger [Logger] system logger
|
100
|
-
def self.handle_device_codes(device_code:, logger:)
|
101
|
-
case device_code
|
102
|
-
when CHANGED_DEVICE
|
103
|
-
logger.info "The default device was not online so a secondary device is being used"
|
104
|
-
when BAD_DEVICE
|
105
|
-
logger.fatal "The selected device was not online"
|
106
|
-
abort
|
107
|
-
when NO_DEVICES
|
108
|
-
logger.fatal "No configured devices were found"
|
109
|
-
abort
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
# Handle codes returned from handeling commands devices
|
114
|
-
# @param command_code [Integer] the error code returned by handle_options
|
115
|
-
# @param logger [Logger] system logger
|
116
|
-
def self.handle_command_codes(command_code:, logger:)
|
117
|
-
case command_code
|
118
|
-
when FAILED_SIDELOAD
|
119
|
-
logger.fatal "Failed Sideloading App"
|
120
|
-
abort
|
121
|
-
when FAILED_SIGNING
|
122
|
-
logger.fatal "Failed Signing App"
|
123
|
-
abort
|
124
|
-
when FAILED_DEEPLINKING
|
125
|
-
logger.fatal "Failed Deeplinking To App"
|
126
|
-
abort
|
127
|
-
when FAILED_NAVIGATING
|
128
|
-
logger.fatal "Command not sent"
|
129
|
-
abort
|
130
|
-
when FAILED_SCREENCAPTURE
|
131
|
-
logger.fatal "Failed to Capture Screen"
|
132
|
-
abort
|
133
|
-
when BAD_PRINT_ATTRIBUTE
|
134
|
-
logger.fatal "Unknown print attribute"
|
135
|
-
abort
|
136
|
-
when MISSING_MANIFEST
|
137
|
-
logger.fatal 'Manifest file missing'
|
138
|
-
abort
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
2
|
-
|
3
|
-
module RokuBuilder
|
4
|
-
|
5
|
-
# Collects information on a package for submission
|
6
|
-
class Inspector < Util
|
7
|
-
|
8
|
-
# Inspects the given pkg
|
9
|
-
# @param pkg [String] Path to the pkg to be inspected
|
10
|
-
# @param password [String] Password for the given pkg
|
11
|
-
# @return [Hash] Package information. Contains the following keys:
|
12
|
-
# * app_name
|
13
|
-
# * dev_id
|
14
|
-
# * creation_date
|
15
|
-
# * dev_zip
|
16
|
-
def inspect(pkg:, password:)
|
17
|
-
|
18
|
-
pkg = pkg+".pkg" unless pkg.end_with?(".pkg")
|
19
|
-
# upload new key with password
|
20
|
-
path = "/plugin_inspect"
|
21
|
-
conn = multipart_connection
|
22
|
-
payload = {
|
23
|
-
mysubmit: "Inspect",
|
24
|
-
passwd: password,
|
25
|
-
archive: Faraday::UploadIO.new(pkg, 'application/octet-stream')
|
26
|
-
}
|
27
|
-
response = conn.post path, payload
|
28
|
-
|
29
|
-
app_name = /App Name:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)
|
30
|
-
dev_id = nil
|
31
|
-
creation_date = nil
|
32
|
-
dev_zip = nil
|
33
|
-
if app_name
|
34
|
-
app_name = app_name[1]
|
35
|
-
dev_id = /Dev ID:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
|
36
|
-
creation_date = /new Date\(([^)]*)\)/.match(response.body.delete("\n"))[1]
|
37
|
-
dev_zip = /dev.zip:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
|
38
|
-
else
|
39
|
-
app_name = /App Name:[^<]*<div[^>]*>([^<]*)<\/div>/.match(response.body)[1]
|
40
|
-
dev_id = /Dev ID:[^<]*<div[^>]*><font[^>]*>([^<]*)<\/font><\/div>/.match(response.body)[1]
|
41
|
-
creation_date = /new Date\(([^\/]*)\)/.match(response.body.delete("\n"))[1]
|
42
|
-
dev_zip = /dev.zip:[^<]*<div[^>]*><font[^>]*>([^<]*)<\/font><\/div>/.match(response.body)[1]
|
43
|
-
end
|
44
|
-
|
45
|
-
return {app_name: app_name, dev_id: dev_id, creation_date: Time.at(creation_date.to_i).to_s, dev_zip: dev_zip}
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
# Capture a screencapture for the currently sideloaded app
|
50
|
-
# @return [Boolean] Success
|
51
|
-
def screencapture(out_folder:, out_file: nil)
|
52
|
-
path = "/plugin_inspect"
|
53
|
-
conn = multipart_connection
|
54
|
-
payload = {
|
55
|
-
mysubmit: "Screenshot",
|
56
|
-
passwd: @dev_password,
|
57
|
-
archive: Faraday::UploadIO.new(File::NULL, 'application/octet-stream')
|
58
|
-
}
|
59
|
-
response = conn.post path, payload
|
60
|
-
|
61
|
-
path = /<img src="([^"]*)">/.match(response.body)
|
62
|
-
return false unless path
|
63
|
-
path = path[1]
|
64
|
-
unless out_file
|
65
|
-
out_time = /time=([^"]*)">/.match(response.body)
|
66
|
-
out_ext = /dev.([^"]*)\?/.match(response.body)
|
67
|
-
out_file = "dev_#{out_time[1]}.#{out_ext[1]}" if out_time and out_ext
|
68
|
-
out_file = "dev.jpg" unless out_file
|
69
|
-
end
|
70
|
-
|
71
|
-
conn = simple_connection
|
72
|
-
|
73
|
-
response = conn.get path
|
74
|
-
|
75
|
-
File.open(File.join(out_folder, out_file), "wb") do |io|
|
76
|
-
io.write(response.body)
|
77
|
-
end
|
78
|
-
@logger.info "Screen captured to #{File.join(out_folder, out_file)}"
|
79
|
-
return response.success?
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|