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.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG +12 -0
  4. data/Gemfile.lock +22 -7
  5. data/Guardfile +3 -3
  6. data/README.md +22 -398
  7. data/bin/roku +1 -194
  8. data/config.json.example +1 -1
  9. data/intergration/roku_builder/test_core.rb +52 -0
  10. data/intergration/roku_builder/test_files/core_intergration_test/manifest_template +7 -0
  11. data/intergration/roku_builder/test_files/core_intergration_test/test.pkg +0 -0
  12. data/intergration/roku_builder/test_files/inspector_intergration_test/components/rectanglescene.xml +28 -0
  13. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  14. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  15. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_fhd.jpg +0 -0
  16. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_hd.jpg +0 -0
  17. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_sd.jpg +0 -0
  18. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  19. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  20. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  21. data/intergration/roku_builder/test_files/inspector_intergration_test/manifest +21 -0
  22. data/intergration/roku_builder/test_files/inspector_intergration_test/source/main.brs +23 -0
  23. data/intergration/roku_builder/test_files/inspector_intergration_test/test.pkg +0 -0
  24. data/intergration/roku_builder/test_files/linker_intergration_test/components/rectanglescene.xml +29 -0
  25. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  26. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  27. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_fhd.jpg +0 -0
  28. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_hd.jpg +0 -0
  29. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_sd.jpg +0 -0
  30. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  31. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  32. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  33. data/intergration/roku_builder/test_files/linker_intergration_test/manifest +21 -0
  34. data/intergration/roku_builder/test_files/linker_intergration_test/source/main.brs +21 -0
  35. data/intergration/roku_builder/test_files/linker_intergration_test/test.pkg +0 -0
  36. data/intergration/roku_builder/test_files/loader_intergration_test/components/rectanglescene.xml +29 -0
  37. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  38. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  39. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_fhd.jpg +0 -0
  40. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_hd.jpg +0 -0
  41. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_sd.jpg +0 -0
  42. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  43. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  44. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  45. data/intergration/roku_builder/test_files/loader_intergration_test/manifest +21 -0
  46. data/intergration/roku_builder/test_files/loader_intergration_test/source/main.brs +21 -0
  47. data/intergration/roku_builder/test_files/loader_intergration_test/test.pkg +0 -0
  48. data/intergration/roku_builder/test_files/monitor_intergration_test/components/rectanglescene.xml +29 -0
  49. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  50. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  51. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_fhd.jpg +0 -0
  52. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_hd.jpg +0 -0
  53. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_sd.jpg +0 -0
  54. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  55. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  56. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  57. data/intergration/roku_builder/test_files/monitor_intergration_test/manifest +21 -0
  58. data/intergration/roku_builder/test_files/monitor_intergration_test/source/main.brs +21 -0
  59. data/intergration/roku_builder/test_files/monitor_intergration_test/test.pkg +0 -0
  60. data/intergration/roku_builder/test_files/navigator_intergration_test/components/rectanglescene.xml +29 -0
  61. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  62. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  63. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_fhd.jpg +0 -0
  64. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_hd.jpg +0 -0
  65. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_sd.jpg +0 -0
  66. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  67. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  68. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  69. data/intergration/roku_builder/test_files/navigator_intergration_test/manifest +21 -0
  70. data/intergration/roku_builder/test_files/navigator_intergration_test/source/main.brs +21 -0
  71. data/intergration/roku_builder/test_files/navigator_intergration_test/test.pkg +0 -0
  72. data/intergration/roku_builder/test_files/packager_intergration_test/components/rectanglescene.xml +29 -0
  73. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  74. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  75. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_fhd.jpg +0 -0
  76. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_hd.jpg +0 -0
  77. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_sd.jpg +0 -0
  78. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  79. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  80. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  81. data/intergration/roku_builder/test_files/packager_intergration_test/manifest +21 -0
  82. data/intergration/roku_builder/test_files/packager_intergration_test/source/main.brs +21 -0
  83. data/intergration/roku_builder/test_files/packager_intergration_test/test.pkg +0 -0
  84. data/intergration/roku_builder/test_files/profiler_intergration_test/components/rectanglescene.xml +29 -0
  85. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  86. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  87. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_fhd.jpg +0 -0
  88. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_hd.jpg +0 -0
  89. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_sd.jpg +0 -0
  90. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  91. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  92. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  93. data/intergration/roku_builder/test_files/profiler_intergration_test/manifest +21 -0
  94. data/intergration/roku_builder/test_files/profiler_intergration_test/source/main.brs +21 -0
  95. data/intergration/roku_builder/test_files/profiler_intergration_test/test.pkg +0 -0
  96. data/intergration/roku_builder/test_files/scripter_intergration_test/components/rectanglescene.xml +29 -0
  97. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  98. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  99. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_fhd.jpg +0 -0
  100. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_hd.jpg +0 -0
  101. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_sd.jpg +0 -0
  102. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  103. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  104. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  105. data/intergration/roku_builder/test_files/scripter_intergration_test/manifest +21 -0
  106. data/intergration/roku_builder/test_files/scripter_intergration_test/source/main.brs +21 -0
  107. data/intergration/roku_builder/test_files/scripter_intergration_test/test.pkg +0 -0
  108. data/intergration/roku_builder/test_files/tester_intergration_test/components/rectanglescene.xml +29 -0
  109. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  110. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  111. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_fhd.jpg +0 -0
  112. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_hd.jpg +0 -0
  113. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_sd.jpg +0 -0
  114. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  115. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  116. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  117. data/intergration/roku_builder/test_files/tester_intergration_test/manifest +21 -0
  118. data/intergration/roku_builder/test_files/tester_intergration_test/source/main.brs +21 -0
  119. data/intergration/roku_builder/test_files/tester_intergration_test/test.pkg +0 -0
  120. data/intergration/roku_builder/test_helper.rb +138 -0
  121. data/intergration/roku_builder/test_inspector.rb +35 -0
  122. data/intergration/roku_builder/test_linker.rb +32 -0
  123. data/intergration/roku_builder/test_loader.rb +38 -0
  124. data/intergration/roku_builder/test_monitor.rb +21 -0
  125. data/intergration/roku_builder/test_navigator.rb +34 -0
  126. data/intergration/roku_builder/test_packager.rb +41 -0
  127. data/intergration/roku_builder/test_profiler.rb +48 -0
  128. data/intergration/roku_builder/test_scripter.rb +38 -0
  129. data/intergration/roku_builder/test_tester.rb +21 -0
  130. data/lib/roku_builder.rb +143 -154
  131. data/lib/roku_builder/config.rb +17 -40
  132. data/lib/roku_builder/config_parser.rb +49 -200
  133. data/lib/roku_builder/config_validator.rb +1 -1
  134. data/lib/roku_builder/errors.rb +12 -0
  135. data/lib/roku_builder/git.rb +28 -0
  136. data/lib/roku_builder/hash.rb +8 -0
  137. data/lib/roku_builder/manifest.rb +121 -0
  138. data/lib/roku_builder/options.rb +68 -29
  139. data/lib/roku_builder/plugin.rb +30 -0
  140. data/lib/roku_builder/plugins/core.rb +117 -0
  141. data/lib/roku_builder/plugins/inspector.rb +104 -0
  142. data/lib/roku_builder/{linker.rb → plugins/linker.rb} +38 -12
  143. data/lib/roku_builder/plugins/loader.rb +152 -0
  144. data/lib/roku_builder/{monitor.rb → plugins/monitor.rb} +20 -9
  145. data/lib/roku_builder/{navigator.rb → plugins/navigator.rb} +136 -88
  146. data/lib/roku_builder/plugins/packager.rb +194 -0
  147. data/lib/roku_builder/plugins/profiler.rb +135 -0
  148. data/lib/roku_builder/plugins/scripter.rb +53 -0
  149. data/lib/roku_builder/{tester.rb → plugins/tester.rb} +28 -19
  150. data/lib/roku_builder/stager.rb +48 -12
  151. data/lib/roku_builder/string.rb +20 -0
  152. data/lib/roku_builder/util.rb +10 -34
  153. data/lib/roku_builder/version.rb +1 -1
  154. data/rakefile +5 -1
  155. data/roku_builder.gemspec +2 -0
  156. data/test/roku_builder/plugins/test_core.rb +112 -0
  157. data/test/roku_builder/plugins/test_inspector.rb +165 -0
  158. data/test/roku_builder/plugins/test_linker.rb +123 -0
  159. data/test/roku_builder/plugins/test_loader.rb +115 -0
  160. data/test/roku_builder/plugins/test_monitor.rb +141 -0
  161. data/test/roku_builder/plugins/test_navigator.rb +274 -0
  162. data/test/roku_builder/plugins/test_packager.rb +202 -0
  163. data/test/roku_builder/plugins/test_profiler.rb +127 -0
  164. data/test/roku_builder/plugins/test_scripter.rb +110 -0
  165. data/test/roku_builder/plugins/test_tester.rb +109 -0
  166. data/test/roku_builder/test_config.rb +51 -35
  167. data/test/roku_builder/test_config_parser.rb +76 -154
  168. data/test/roku_builder/test_config_validator.rb +18 -1
  169. data/test/roku_builder/test_files/{loader_test/manifest → config_parser_test/test.pkg} +0 -0
  170. data/test/roku_builder/test_files/config_test/config.json +3 -0
  171. data/test/roku_builder/test_files/controller_commands_test/manifest_template +7 -0
  172. data/test/roku_builder/test_files/core_test/manifest_template +7 -0
  173. data/test/roku_builder/test_files/core_test/test.pkg +0 -0
  174. data/test/roku_builder/test_files/inspector_test/manifest +6 -0
  175. data/test/roku_builder/test_files/inspector_test/test.pkg +0 -0
  176. data/test/roku_builder/test_files/linker_test/manifest +6 -0
  177. data/test/roku_builder/test_files/linker_test/test.pkg +0 -0
  178. data/test/roku_builder/test_files/loader_test/manifest_template +6 -0
  179. data/test/roku_builder/test_files/loader_test/test.pkg +0 -0
  180. data/test/roku_builder/test_files/loader_test/test.zip +0 -0
  181. data/test/roku_builder/test_files/manifest_test/manifest_comments +6 -0
  182. data/test/roku_builder/test_files/manifest_test/manifest_template +7 -0
  183. data/test/roku_builder/test_files/manifest_test/test.zip +0 -0
  184. data/test/roku_builder/test_files/packager_test/manifest +6 -0
  185. data/test/roku_builder/test_files/packager_test/scripter_test/manifest +6 -0
  186. data/test/roku_builder/test_files/packager_test/test.pkg +0 -0
  187. data/test/roku_builder/test_files/roku_builder_test/config.json +32 -0
  188. data/test/roku_builder/test_files/scripter_test/manifest +6 -0
  189. data/test/roku_builder/test_files/scripter_test/test.pkg +0 -0
  190. data/test/roku_builder/test_files/stager_test/test.pkg +0 -0
  191. data/test/roku_builder/test_files/tester_test/manifest +6 -0
  192. data/test/roku_builder/test_files/tester_test/test.pkg +0 -0
  193. data/test/roku_builder/test_helper.rb +44 -11
  194. data/test/roku_builder/test_logger.rb +1 -0
  195. data/test/roku_builder/test_manifest.rb +99 -0
  196. data/test/roku_builder/test_options.rb +106 -77
  197. data/test/roku_builder/test_options_plugins.rb +111 -0
  198. data/test/roku_builder/test_plugin.rb +48 -0
  199. data/test/roku_builder/test_roku_builder.rb +239 -0
  200. data/test/roku_builder/test_stager.rb +49 -101
  201. data/test/roku_builder/test_util.rb +19 -4
  202. metadata +241 -47
  203. data/lib/roku_builder/controller.rb +0 -98
  204. data/lib/roku_builder/controller_commands.rb +0 -224
  205. data/lib/roku_builder/error_handler.rb +0 -142
  206. data/lib/roku_builder/inspector.rb +0 -82
  207. data/lib/roku_builder/keyer.rb +0 -106
  208. data/lib/roku_builder/loader.rb +0 -131
  209. data/lib/roku_builder/manifest_manager.rb +0 -126
  210. data/lib/roku_builder/packager.rb +0 -43
  211. data/lib/roku_builder/profiler.rb +0 -96
  212. data/lib/roku_builder/scripter.rb +0 -39
  213. data/test/roku_builder/test_controller.rb +0 -70
  214. data/test/roku_builder/test_controller_commands.rb +0 -465
  215. data/test/roku_builder/test_error_handler.rb +0 -90
  216. data/test/roku_builder/test_inspector.rb +0 -298
  217. data/test/roku_builder/test_keyer.rb +0 -176
  218. data/test/roku_builder/test_linker.rb +0 -110
  219. data/test/roku_builder/test_loader.rb +0 -337
  220. data/test/roku_builder/test_manifest_manager.rb +0 -103
  221. data/test/roku_builder/test_monitor.rb +0 -137
  222. data/test/roku_builder/test_navigator.rb +0 -280
  223. data/test/roku_builder/test_packager.rb +0 -127
  224. data/test/roku_builder/test_profiler.rb +0 -35
  225. data/test/roku_builder/test_scripter.rb +0 -102
  226. 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