roku_builder 3.13.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|