roku_builder 4.17.1 → 4.18.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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG +4 -0
  4. data/lib/roku_builder/os.rb +23 -0
  5. data/lib/roku_builder/plugins/analyzer.rb +42 -26
  6. data/lib/roku_builder/plugins/line_inspector.rb +1 -4
  7. data/lib/roku_builder/plugins/sca-cmd/bin/sca-cmd +188 -0
  8. data/lib/roku_builder/plugins/sca-cmd/bin/sca-cmd.bat +100 -0
  9. data/lib/roku_builder/plugins/sca-cmd/lib/sca-cmd.jar +0 -0
  10. data/lib/roku_builder/version.rb +1 -1
  11. data/test/roku_builder/plugins/test_analyzer.rb +1 -269
  12. data/test/roku_builder/test_files/analyzer_test/manifest_depricated_attribute +1 -0
  13. data/test/roku_builder/test_files/analyzer_test/manifest_duplicate_attribute +1 -0
  14. data/test/roku_builder/test_files/analyzer_test/manifest_empty_value +1 -0
  15. data/test/roku_builder/test_files/analyzer_test/manifest_has_value +1 -0
  16. data/test/roku_builder/test_files/analyzer_test/manifest_incorrect_image_resolution +1 -0
  17. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_boolean +1 -0
  18. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_equals +1 -0
  19. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_float +1 -0
  20. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_hex +1 -0
  21. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_integer +1 -0
  22. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_negative +1 -0
  23. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_not_equal +1 -0
  24. data/test/roku_builder/test_files/analyzer_test/manifest_invalid_value_starts_with +1 -0
  25. data/test/roku_builder/test_files/analyzer_test/manifest_missing_attribute +1 -0
  26. data/test/roku_builder/test_files/analyzer_test/manifest_missing_file +1 -0
  27. data/test/roku_builder/test_files/analyzer_test/manifest_raf +1 -0
  28. data/test/roku_builder/test_files/analyzer_test/manifest_sd_image_resolution +1 -0
  29. data/test/roku_builder/test_files/analyzer_test/manifest_template +1 -0
  30. data/test/roku_builder/test_files/analyzer_test/source/main.brs +40 -0
  31. metadata +8 -5
  32. data/lib/roku_builder/plugins/manifest_attributes.json +0 -224
  33. data/lib/roku_builder/plugins/manifest_inspector.rb +0 -150
  34. data/lib/roku_builder/plugins/raf_inspector.rb +0 -74
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roku_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.17.1
4
+ version: 4.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - greeneca
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-15 00:00:00.000000000 Z
11
+ date: 2019-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -483,6 +483,7 @@ files:
483
483
  - lib/roku_builder/logger.rb
484
484
  - lib/roku_builder/manifest.rb
485
485
  - lib/roku_builder/options.rb
486
+ - lib/roku_builder/os.rb
486
487
  - lib/roku_builder/plugin.rb
487
488
  - lib/roku_builder/plugins/analyzer.rb
488
489
  - lib/roku_builder/plugins/core.rb
@@ -492,14 +493,14 @@ files:
492
493
  - lib/roku_builder/plugins/line_inspector.rb
493
494
  - lib/roku_builder/plugins/linker.rb
494
495
  - lib/roku_builder/plugins/loader.rb
495
- - lib/roku_builder/plugins/manifest_attributes.json
496
- - lib/roku_builder/plugins/manifest_inspector.rb
497
496
  - lib/roku_builder/plugins/monitor.rb
498
497
  - lib/roku_builder/plugins/navigator.rb
499
498
  - lib/roku_builder/plugins/packager.rb
500
499
  - lib/roku_builder/plugins/performance_config.json
501
500
  - lib/roku_builder/plugins/profiler.rb
502
- - lib/roku_builder/plugins/raf_inspector.rb
501
+ - lib/roku_builder/plugins/sca-cmd/bin/sca-cmd
502
+ - lib/roku_builder/plugins/sca-cmd/bin/sca-cmd.bat
503
+ - lib/roku_builder/plugins/sca-cmd/lib/sca-cmd.jar
503
504
  - lib/roku_builder/plugins/scripter.rb
504
505
  - lib/roku_builder/plugins/tester.rb
505
506
  - lib/roku_builder/stager.rb
@@ -548,6 +549,7 @@ files:
548
549
  - test/roku_builder/test_files/analyzer_test/manifest_raf
549
550
  - test/roku_builder/test_files/analyzer_test/manifest_sd_image_resolution
550
551
  - test/roku_builder/test_files/analyzer_test/manifest_template
552
+ - test/roku_builder/test_files/analyzer_test/source/main.brs
551
553
  - test/roku_builder/test_files/analyzer_test/test.pkg
552
554
  - test/roku_builder/test_files/config_parser_test/test.pkg
553
555
  - test/roku_builder/test_files/config_test/bad.json
@@ -675,6 +677,7 @@ test_files:
675
677
  - test/roku_builder/test_files/analyzer_test/manifest_raf
676
678
  - test/roku_builder/test_files/analyzer_test/manifest_sd_image_resolution
677
679
  - test/roku_builder/test_files/analyzer_test/manifest_template
680
+ - test/roku_builder/test_files/analyzer_test/source/main.brs
678
681
  - test/roku_builder/test_files/analyzer_test/test.pkg
679
682
  - test/roku_builder/test_files/config_parser_test/test.pkg
680
683
  - test/roku_builder/test_files/config_test/bad.json
@@ -1,224 +0,0 @@
1
- {
2
- "title": {
3
- "required": true
4
- },
5
- "major_version": {
6
- "required": true,
7
- "validations": {
8
- "integer": true,
9
- "non_negative": true
10
- }
11
- },
12
- "minor_version": {
13
- "required": true,
14
- "validations": {
15
- "integer": true,
16
- "non_negative": true
17
- }
18
- },
19
- "build_version": {
20
- "required": true,
21
- "validations": {
22
- "integer": true,
23
- "non_negative": true,
24
- "not_equal": ["0"]
25
- }
26
- },
27
- "mm_icon_focus_hd": {
28
- "required": true,
29
- "validations": {
30
- "starts_with": "pkg:/"
31
- },
32
- "isResource": true,
33
- "resolution": [336, 210]
34
- },
35
- "mm_icon_focus_sd": {
36
- "required": true
37
- },
38
- "splash_screen_fhd": {
39
- "validations": {
40
- "starts_with": "pkg:/"
41
- },
42
- "isResource": true,
43
- "resolution": [1920, 1080]
44
- },
45
- "splash_screen_hd": {
46
- "required": true,
47
- "validations": {
48
- "starts_with": "pkg:/"
49
- },
50
- "isResource": true,
51
- "resolution": [1280, 720]
52
- },
53
- "splash_screen_sd": {
54
- "required": true,
55
- "validations": {
56
- "starts_with": "pkg:/"
57
- },
58
- "isResource": true,
59
- "resolution": [720, 480]
60
- },
61
- "splash_color": {
62
- "validations": {
63
- "hex": true
64
- }
65
- },
66
- "splash_min_time": {
67
- "validations": {
68
- "integer": true,
69
- "non_negative": true
70
- }
71
- },
72
- "splash_rgs_optimization": {
73
- "validations": {
74
- "integer": true,
75
- "non_negative": true
76
- }
77
- },
78
- "ui_resolutions": {},
79
- "uri_resolution_autosub": {},
80
- "supports_input_launch": {
81
- "validations": {
82
- "integer": true,
83
- "non_negative": true
84
- }
85
- },
86
- "requires_audiometadata": {
87
- "validations": {
88
- "integer": true,
89
- "non_negative": true
90
- }
91
- },
92
- "requires_gaming_remote": {
93
- "validations": {
94
- "integer": true,
95
- "non_negative": true
96
- }
97
- },
98
- "requires_mkv": {
99
- "validations": {
100
- "integer": true,
101
- "non_negative": true
102
- }
103
- },
104
- "network_not_required": {
105
- "validations": {
106
- "integer": true,
107
- "non_negative": true
108
- }
109
- },
110
- "bs_libs_required": {},
111
- "usb_media_handler": {
112
- "validations": {
113
- "integer": true,
114
- "non_negative": true
115
- }
116
- },
117
- "requires_aaxs_drm": {
118
- "validations": {
119
- "integer": true,
120
- "non_negative": true
121
- }
122
- },
123
- "requires_aaxs_drm": {
124
- "validations": {
125
- "integer": true,
126
- "non_negative": true
127
- }
128
- },
129
- "requires_aaxs_version": {
130
- "validations": {
131
- "float": true,
132
- "non_negative": true
133
- }
134
- },
135
- "requires_verimatrix_drm": {
136
- "validations": {
137
- "integer": true,
138
- "non_negative": true
139
- }
140
- },
141
- "requires_verimatrix_version": {
142
- "validations": {
143
- "float": true,
144
- "non_negative": true
145
- }
146
- },
147
- "hidden": {
148
- "validations": {
149
- "integer": true,
150
- "non_negative": true
151
- }
152
- },
153
- "playonly_aware": {
154
- "validations": {
155
- "integer": true,
156
- "non_negative": true
157
- }
158
- },
159
- "rsg_version": {
160
- "validations": {
161
- "float": true,
162
- "non_negative": true
163
- },
164
- "notify": ["1.0"]
165
- },
166
- "automatic_audio_guide_disabled": {
167
- "validations": {
168
- "integer": true,
169
- "non_negative": true
170
- }
171
- },
172
- "bs_prof_enabled": {
173
- "validations": {
174
- "boolean": true
175
- }
176
- },
177
- "bs_prof_sample_ratio": {
178
- "validations": {
179
- "float": true,
180
- "non_negative": true
181
- }
182
- },
183
- "confirm_partner_button": {
184
- "validations": {
185
- "integer": true,
186
- "non_negative": true
187
- }
188
- },
189
- "suppress_unconnected_hud":{
190
- "validations": {
191
- "equals": ["0", "1"]
192
- }
193
- },
194
- "screensaver_title": {},
195
- "screensaver_private":{
196
- "validations": {
197
- "equals": ["0", "1"]
198
- }
199
- },
200
- "subtitle": {
201
- "deprecated": true
202
- },
203
- "mm_icon_side_hd": {
204
- "deprecated": true,
205
- "validations": {
206
- "starts_with": "pkg:/"
207
- },
208
- "isResource": true
209
- },
210
- "mm_icon_side_sd": {
211
- "deprecated": true,
212
- "validations": {
213
- "starts_with": "pkg:/"
214
- },
215
- "isResource": true
216
- },
217
- "requires_bluetooth": {
218
- "deprecated": true,
219
- "validations": {
220
- "integer": true,
221
- "non_negative": true
222
- }
223
- }
224
- }
@@ -1,150 +0,0 @@
1
- # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
-
3
- module RokuBuilder
4
-
5
- class ManifestInspector
6
- def initialize(config:, dir:, raf:)
7
- @config = config
8
- @dir = dir
9
- @raf_inspector = raf
10
- end
11
-
12
- def run(inspector_config)
13
- @warnings = []
14
- @attributes = {}
15
- @line_numbers = {}
16
- @inspector_config = inspector_config
17
- manifest = File.join(@config.root_dir, "manifest")
18
- unless File.exist?(manifest)
19
- add_warning(warning: :packageManifestFile)
20
- else
21
- File.open(manifest) do |file|
22
- current_line = 0
23
- file.readlines.each do |line|
24
- current_line += 1
25
- parts = line.split("=")
26
- key = parts.shift.to_sym
27
- if @attributes[key]
28
- add_warning(warning: :manifestDuplicateAttribute, key: key, line: current_line)
29
- else
30
- value = parts.join("=").chomp
31
- if !value or value == ""
32
- add_warning(warning: :manifestEmptyValue, key: key, line: current_line)
33
- else
34
- @attributes[key] = value
35
- @line_numbers[key] = current_line
36
- end
37
- end
38
- end
39
- end
40
- manifest_attributes.each_pair do |key, attribute_config|
41
- if @attributes[key]
42
- if attribute_config[:deprecated]
43
- add_warning(warning: :manifestDeprecatedAttribute, key: key)
44
- end
45
- if attribute_config[:validations]
46
- attribute_config[:validations].each_pair do |type, value|
47
- case type
48
- when :integer
49
- unless "%0#{@attributes[key].length}i" % @attributes[key].to_i == @attributes[key]
50
- add_warning(warning: :manifestInvalidValue, key: key)
51
- end
52
- when :hex
53
- unless @attributes[key][0] == "#" and !@attributes[key][1..-1][/\H/]
54
- add_warning(warning: :manifestInvalidValue, key: key)
55
- end
56
- when :float
57
- unless @attributes[key].to_f.to_s == @attributes[key]
58
- add_warning(warning: :manifestInvalidValue, key: key)
59
- end
60
- when :boolean
61
- unless ["false", "true"].include? @attributes[key]
62
- add_warning(warning: :manifestInvalidValue, key: key)
63
- end
64
- when :non_negative
65
- unless @attributes[key].to_f >= 0
66
- add_warning(warning: :manifestInvalidValue, key: key)
67
- end
68
- when :not_equal
69
- if value.include? @attributes[key]
70
- add_warning(warning: :manifestInvalidValue, key: key)
71
- end
72
- when :equals
73
- unless value.include? @attributes[key]
74
- add_warning(warning: :manifestInvalidValue, key: key)
75
- end
76
- when :starts_with
77
- unless @attributes[key].start_with? value
78
- add_warning(warning: :manifestInvalidValue, key: key)
79
- end
80
- else
81
- raise ImplementationError, "Unknown Validation #{type}"
82
- end
83
- end
84
- end
85
- if attribute_config[:notify]
86
- attribute_config[:notify].each do |regexp|
87
- if /#{regexp}/ =~ @attributes[key]
88
- add_warning(warning: :manifestHasValue, key: key)
89
- break
90
- end
91
- end
92
- end
93
- if attribute_config[:isResource]
94
- path = File.join(@dir, @attributes[key].gsub("pkg:/", ""))
95
- unless File.exist?(path)
96
- mapping = {"{0}": @attributes[key], "{1}": key }
97
- add_warning(warning: :manifestMissingFile, key: key, mapping: mapping)
98
- else
99
- if attribute_config[:resolution]
100
- size = ImageSize.path(path).size
101
- target = ImageSize::Size.new(attribute_config[:resolution])
102
- unless size == target
103
- mapping = {
104
- "{0}": @attributes[key],
105
- "{1}": key,
106
- "{2}": size,
107
- "{3}": target
108
- }
109
- add_warning(warning: :manifestIncorrectImageResolution, key: key, mapping: mapping)
110
- end
111
- end
112
- end
113
- end
114
- elsif attribute_config[:required]
115
- add_warning(warning: :manifestMissingAttribute, key: key)
116
- end
117
- @raf_inspector.inspect_manifest(attributes: @attributes, line_numbers: @line_numbers)
118
- end
119
- end
120
- @warnings
121
- end
122
-
123
- private
124
-
125
- def manifest_attributes
126
- file = File.join(File.dirname(__FILE__), "manifest_attributes.json")
127
- JSON.parse(File.open(file).read, {symbolize_names: true})
128
- end
129
-
130
- def add_warning(warning:, key: nil, mapping: nil, line: nil)
131
- @warnings.push(@inspector_config[warning].deep_dup)
132
- @warnings.last[:path] = "manifest"
133
- if line
134
- @warnings.last[:line] = line
135
- elsif @line_numbers[key]
136
- @warnings.last[:line] = @line_numbers[key]
137
- end
138
- if mapping
139
- mapping.each_pair do |map, value|
140
- @warnings.last[:message].gsub!(map.to_s, value.to_s)
141
- end
142
- elsif key
143
- @warnings.last[:message].gsub!("{0}", key.to_s)
144
- if @attributes[key]
145
- @warnings.last[:message].gsub!("{1}", @attributes[key])
146
- end
147
- end
148
- end
149
- end
150
- end
@@ -1,74 +0,0 @@
1
- # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
-
3
- module RokuBuilder
4
-
5
- class RafInspector
6
- RAF_INTERFACE_INITIALIZATION_PATTERN = /roku_ads\(\)/i
7
- LIBRARY_IMPORT_PATTERN = /\s*library\s*"roku_ads.brs"\s*/i
8
-
9
- def initialize(config:, dir:)
10
- @config = config
11
- @dir = dir
12
- @has_raf_interface_initialization = false
13
- @interface_location = {}
14
- @has_library_import = false
15
- @import_location = {}
16
- @has_manifest_entry = false
17
- @manifest_location = {path: "manifest"}
18
- end
19
-
20
- def inspect_line(line:, file:, line_number:)
21
- unless @has_raf_interface_initialization
22
- @has_raf_interface_initialization = !!RAF_INTERFACE_INITIALIZATION_PATTERN.match(line)
23
- if @has_raf_interface_initialization
24
- @interface_location = {path: file, line: line_number}
25
- end
26
- end
27
- unless @has_library_import
28
- @has_library_import = !!LIBRARY_IMPORT_PATTERN.match(line)
29
- if @has_library_import
30
- @import_location = {path: file, line: line_number}
31
- end
32
- end
33
- end
34
-
35
- def inspect_manifest(attributes:, line_numbers:)
36
- if attributes[:bs_libs_required] and attributes[:bs_libs_required].downcase == "roku_ads_lib"
37
- @has_manifest_entry = true
38
- @manifest_location[:line] = line_numbers[:bs_libs_required]
39
- end
40
- end
41
-
42
- def run(inspector_config)
43
- @warnings = []
44
- @inspector_config = inspector_config
45
- if @has_raf_interface_initialization and !@has_library_import
46
- add_warning(warning: :rafConstructorPresentImportMissing, location: @interface_location)
47
- end
48
- if @has_raf_interface_initialization and !@has_manifest_entry
49
- add_warning(warning: :rafConstructorPresentManifestMissing, location: @interface_location)
50
- end
51
- if !@has_raf_interface_initialization and @has_manifest_entry
52
- add_warning(warning: :rafConstructorMissingManifestPresent, location: @manifest_location)
53
- end
54
- if @has_manifest_entry and !@has_library_import
55
- add_warning(warning: :rafManifestPresentImportMissing, location: @manifest_location)
56
- end
57
- if !@has_raf_interface_initialization and @has_library_import
58
- add_warning(warning: :rafConstructorMissingImportPresent, location: @import_location)
59
- end
60
- if @has_raf_interface_initialization and @has_library_import and @has_manifest_entry
61
- add_warning(warning: :rafProperIntegration, location: @import_location)
62
- end
63
- @warnings
64
- end
65
-
66
- private
67
-
68
- def add_warning(warning:, location:)
69
- @warnings.push(@inspector_config[warning].deep_dup)
70
- @warnings.last[:path] = location[:path]
71
- @warnings.last[:line] = location[:line]
72
- end
73
- end
74
- end