roku_builder 4.17.1 → 4.18.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 114ba37cf715600a090d737d83c708b116b2f609c7e261edc235f08c925f0ece
4
- data.tar.gz: 2d67e30e939dbe815bccc49be7da543331b78291c6c87c75d2fceaf70cfb7ee6
3
+ metadata.gz: 478680d7cd38f963d8652c4d359327af7dbb47c2cc5b7552e64bdfd2e82026a9
4
+ data.tar.gz: de3003e7bff529ed84a84d8c7873da733b50776cf9e531df0d2b9c9bd434a5b6
5
5
  SHA512:
6
- metadata.gz: 81a51cb1b9af95b7aade298176f544747b08f300eb553b9bd171da5a006fce7f40fd16bf5330e4f8d257da7ea5f97312f7d54eeb6ea3e1fbafc75f0f4eb8f24c
7
- data.tar.gz: '0369e150700a626cf96b7651704cf52c581c194562ac41dc8f066a0015c8aa08505f252c81f870dd2a9318e1c0c3613a465b5c45a437ff3607ca840ddb966afe'
6
+ metadata.gz: ef280481f92632153adb000c66fa6df091b44630d5a35bb73cab4c57b85b8556ef5b620095aa6eca5ced35ef727eea7e085d7bd77658a8134280c3625ef2daa1
7
+ data.tar.gz: fbc3c21570f154f72276ca7328a26e8d93e430814e59fd897bd3b8aac2faf01e9578d92c32ccdffc66e266e723f636b506421b4db96dcb75e6a029c0d9352d2c
data/.gitignore CHANGED
@@ -4,3 +4,5 @@ doc
4
4
  coverage
5
5
  .byebug_history
6
6
  Gemfile.lock
7
+ .DS_Store
8
+ **/.DS_Store
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ = 4.18.0 =
2
+
3
+ - Remove reverse engineered portion of --analyze function, replace with Roku SCA
4
+
1
5
  = 4.17.1 =
2
6
 
3
7
  - Remove requirement for project default in config
@@ -0,0 +1,23 @@
1
+ # ********** Copyright 2016 Viacom, Inc. Apache 2.0 **********
2
+
3
+ module OS
4
+ def OS.windows?
5
+ (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
6
+ end
7
+
8
+ def OS.mac?
9
+ (/darwin/ =~ RUBY_PLATFORM) != nil
10
+ end
11
+
12
+ def OS.unix?
13
+ !OS.windows?
14
+ end
15
+
16
+ def OS.linux?
17
+ OS.unix? and not OS.mac?
18
+ end
19
+
20
+ def OS.jruby?
21
+ RUBY_ENGINE == 'jruby'
22
+ end
23
+ end
@@ -30,43 +30,26 @@ module RokuBuilder
30
30
  def analyze(options:, quiet: false)
31
31
  @options = options
32
32
  @warnings = []
33
- analyzer_config = get_config("inspector_config.json")
34
33
  performance_config = get_config("performance_config.json")
35
34
  linter_config = get_config(".roku_builder_linter.json", true)
36
- linter_config ||= {}
37
- @inspector_config = analyzer_config[:inspectors]
35
+ linter_config ||= {is_ssai: false}
38
36
  loader = Loader.new(config: @config)
39
37
  Dir.mktmpdir do |dir|
40
38
  loader.copy(options: options, path: dir)
41
- raf_inspector = RafInspector.new(config: @config, dir: dir)
42
- manifest_inspector = ManifestInspector.new(config: @config, dir: dir, raf: raf_inspector)
43
- @warnings.concat(manifest_inspector.run(analyzer_config[:inspectors]))
44
- has_source_dir = false
39
+ run_sca_tool(path: dir, ssai: linter_config[:is_ssai])
45
40
  libraries = @config.project[:libraries]
46
41
  libraries ||= []
47
42
  Dir.glob(File.join(dir, "**", "*")).each do |file_path|
48
43
  file = file_path.dup; file.slice!(dir)
49
44
  unless libraries.any_is_start?(file) and not @options[:include_libraries]
50
45
  if File.file?(file_path) and file_path.end_with?(".brs", ".xml")
51
- line_inspector_config = analyzer_config[:lineInspectors]
52
- line_inspector_config += performance_config
46
+ line_inspector_config = performance_config
53
47
  line_inspector_config += linter_config[:rules] if linter_config[:rules]
54
- line_inspector = LineInspector.new(config: @config, raf: raf_inspector, inspector_config: line_inspector_config, indent_config: linter_config[:indentation])
48
+ line_inspector = LineInspector.new(inspector_config: line_inspector_config, indent_config: linter_config[:indentation])
55
49
  @warnings.concat(line_inspector.run(file_path))
56
50
  end
57
- if file_path.end_with?("__MACOSX")
58
- add_warning(warning: :packageMacosxDirectory, path: file_path)
59
- end
60
- if file_path.end_with?(".zip", ".md", ".pkg")
61
- add_warning(warning: :packageExtraneousFiles, path: file_path)
62
- end
63
51
  end
64
- has_source_dir = true if file_path.end_with?("source")
65
- end
66
- unless has_source_dir
67
- add_warning(warning: :packageSourceDirectory, path: "source")
68
52
  end
69
- @warnings.concat(raf_inspector.run(analyzer_config[:inspectors]))
70
53
  format_messages(dir)
71
54
  print_warnings unless quiet
72
55
  end
@@ -75,6 +58,44 @@ module RokuBuilder
75
58
 
76
59
  private
77
60
 
61
+ def run_sca_tool(path:, ssai:)
62
+ if OS.unix?
63
+ command = File.join(File.dirname(__FILE__), "sca-cmd", "bin", "sca-cmd")
64
+ else
65
+ command = File.join(File.dirname(__FILE__), "sca-cmd", "bin", "sca-cmd.bat")
66
+ end
67
+ results = `#{command} #{path}`.split("\n")
68
+ process_sca_results(results, ssai)
69
+ end
70
+
71
+ def process_sca_results(results, ssai)
72
+ results.each do |result_line|
73
+ if /-----+/.match(result_line) or /\*\*\*\*\*+/.match(result_line)
74
+ @warnings.push(@sca_warning) if add_warning?(ssai)
75
+ @sca_warning = {}
76
+ elsif data = /^(\[WARNING\]|\[INFO\]|\[ERROR\])(.*)$/.match(result_line)
77
+ @warnings.push(@sca_warning) if add_warning?(ssai)
78
+ @sca_warning = {}
79
+ @sca_warning[:severity] = data[1].gsub(/(\[|\])/, "").downcase
80
+ @sca_warning[:message] = data[2]
81
+ elsif data = /^\sPath: ([^ ]*) Line: (\d*)./.match(result_line)
82
+ @sca_warning[:path] = data[1]+":"+data[2]
83
+ elsif @sca_warning and @sca_warning[:message]
84
+ @sca_warning[:message] += " " + result_line
85
+ end
86
+ end
87
+ end
88
+
89
+ def add_warning?(ssai)
90
+ if @sca_warning and @sca_warning[:severity]
91
+ if ssai and /SetAdUrl\(\) method is missing/.match(@sca_warning[:message])
92
+ return false
93
+ end
94
+ return true
95
+ end
96
+ return false
97
+ end
98
+
78
99
  def get_config(file, project_root=false)
79
100
  if project_root
80
101
  file = File.join(@config.root_dir, file)
@@ -84,11 +105,6 @@ module RokuBuilder
84
105
  JSON.parse(File.open(file).read, {symbolize_names: true}) if File.exist? file
85
106
  end
86
107
 
87
- def add_warning(warning:, path:)
88
- @warnings.push(@inspector_config[warning].deep_dup)
89
- @warnings.last[:path] = path
90
- end
91
-
92
108
  def print_warnings
93
109
  logger = ::Logger.new(STDOUT)
94
110
  logger.level = @logger.level
@@ -3,9 +3,7 @@
3
3
  module RokuBuilder
4
4
 
5
5
  class LineInspector
6
- def initialize(config:, raf:, inspector_config:, indent_config:)
7
- @config = config
8
- @raf_inspector = raf
6
+ def initialize(inspector_config:, indent_config:)
9
7
  @inspector_config = inspector_config
10
8
  @indent_config = indent_config
11
9
  end
@@ -45,7 +43,6 @@ module RokuBuilder
45
43
  end
46
44
  end
47
45
  end
48
- @raf_inspector.inspect_line(line: line, file: file_path, line_number: line_number)
49
46
  end
50
47
  @warnings += indent_inspector.warnings if indent_inspector
51
48
  end
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env sh
2
+
3
+ #
4
+ # Copyright 2015 the original author or authors.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ ##############################################################################
20
+ ##
21
+ ## sca-cmd start up script for UN*X
22
+ ##
23
+ ##############################################################################
24
+
25
+ # Attempt to set APP_HOME
26
+ # Resolve links: $0 may be a link
27
+ PRG="$0"
28
+ # Need this for relative symlinks.
29
+ while [ -h "$PRG" ] ; do
30
+ ls=`ls -ld "$PRG"`
31
+ link=`expr "$ls" : '.*-> \(.*\)$'`
32
+ if expr "$link" : '/.*' > /dev/null; then
33
+ PRG="$link"
34
+ else
35
+ PRG=`dirname "$PRG"`"/$link"
36
+ fi
37
+ done
38
+ SAVED="`pwd`"
39
+ cd "`dirname \"$PRG\"`/.." >/dev/null
40
+ APP_HOME="`pwd -P`"
41
+ cd "$SAVED" >/dev/null
42
+
43
+ APP_NAME="sca-cmd"
44
+ APP_BASE_NAME=`basename "$0"`
45
+
46
+ # Add default JVM options here. You can also use JAVA_OPTS and SCA_CMD_OPTS to pass JVM options to this script.
47
+ DEFAULT_JVM_OPTS=""
48
+
49
+ # Use the maximum available, or set MAX_FD != -1 to use that value.
50
+ MAX_FD="maximum"
51
+
52
+ warn () {
53
+ echo "$*"
54
+ }
55
+
56
+ die () {
57
+ echo
58
+ echo "$*"
59
+ echo
60
+ exit 1
61
+ }
62
+
63
+ # OS specific support (must be 'true' or 'false').
64
+ cygwin=false
65
+ msys=false
66
+ darwin=false
67
+ nonstop=false
68
+ case "`uname`" in
69
+ CYGWIN* )
70
+ cygwin=true
71
+ ;;
72
+ Darwin* )
73
+ darwin=true
74
+ ;;
75
+ MINGW* )
76
+ msys=true
77
+ ;;
78
+ NONSTOP* )
79
+ nonstop=true
80
+ ;;
81
+ esac
82
+
83
+ CLASSPATH=$APP_HOME/lib/sca-cmd.jar
84
+
85
+ # Determine the Java command to use to start the JVM.
86
+ if [ -n "$JAVA_HOME" ] ; then
87
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
88
+ # IBM's JDK on AIX uses strange locations for the executables
89
+ JAVACMD="$JAVA_HOME/jre/sh/java"
90
+ else
91
+ JAVACMD="$JAVA_HOME/bin/java"
92
+ fi
93
+ if [ ! -x "$JAVACMD" ] ; then
94
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
95
+
96
+ Please set the JAVA_HOME variable in your environment to match the
97
+ location of your Java installation."
98
+ fi
99
+ else
100
+ JAVACMD="java"
101
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
102
+
103
+ Please set the JAVA_HOME variable in your environment to match the
104
+ location of your Java installation."
105
+ fi
106
+
107
+ # Increase the maximum file descriptors if we can.
108
+ if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
109
+ MAX_FD_LIMIT=`ulimit -H -n`
110
+ if [ $? -eq 0 ] ; then
111
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
112
+ MAX_FD="$MAX_FD_LIMIT"
113
+ fi
114
+ ulimit -n $MAX_FD
115
+ if [ $? -ne 0 ] ; then
116
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
117
+ fi
118
+ else
119
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
120
+ fi
121
+ fi
122
+
123
+ # For Darwin, add options to specify how the application appears in the dock
124
+ if $darwin; then
125
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
126
+ fi
127
+
128
+ # For Cygwin, switch paths to Windows format before running java
129
+ if $cygwin ; then
130
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
131
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
132
+ JAVACMD=`cygpath --unix "$JAVACMD"`
133
+
134
+ # We build the pattern for arguments to be converted via cygpath
135
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
136
+ SEP=""
137
+ for dir in $ROOTDIRSRAW ; do
138
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
139
+ SEP="|"
140
+ done
141
+ OURCYGPATTERN="(^($ROOTDIRS))"
142
+ # Add a user-defined pattern to the cygpath arguments
143
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
144
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
145
+ fi
146
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
147
+ i=0
148
+ for arg in "$@" ; do
149
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
150
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
151
+
152
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
153
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
154
+ else
155
+ eval `echo args$i`="\"$arg\""
156
+ fi
157
+ i=$((i+1))
158
+ done
159
+ case $i in
160
+ (0) set -- ;;
161
+ (1) set -- "$args0" ;;
162
+ (2) set -- "$args0" "$args1" ;;
163
+ (3) set -- "$args0" "$args1" "$args2" ;;
164
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
165
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
166
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
167
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
168
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
169
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
170
+ esac
171
+ fi
172
+
173
+ # Escape application args
174
+ save () {
175
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
176
+ echo " "
177
+ }
178
+ APP_ARGS=$(save "$@")
179
+
180
+ # Collect all arguments for the java command, following the shell quoting and substitution rules
181
+ eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $SCA_CMD_OPTS -classpath "\"$CLASSPATH\"" com.roku.sca.cmd.CommandLineInterface "$APP_ARGS"
182
+
183
+ # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
184
+ if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
185
+ cd "$(dirname "$0")"
186
+ fi
187
+
188
+ exec "$JAVACMD" "$@"
@@ -0,0 +1,100 @@
1
+ @rem
2
+ @rem Copyright 2015 the original author or authors.
3
+ @rem
4
+ @rem Licensed under the Apache License, Version 2.0 (the "License");
5
+ @rem you may not use this file except in compliance with the License.
6
+ @rem You may obtain a copy of the License at
7
+ @rem
8
+ @rem http://www.apache.org/licenses/LICENSE-2.0
9
+ @rem
10
+ @rem Unless required by applicable law or agreed to in writing, software
11
+ @rem distributed under the License is distributed on an "AS IS" BASIS,
12
+ @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ @rem See the License for the specific language governing permissions and
14
+ @rem limitations under the License.
15
+ @rem
16
+
17
+ @if "%DEBUG%" == "" @echo off
18
+ @rem ##########################################################################
19
+ @rem
20
+ @rem sca-cmd startup script for Windows
21
+ @rem
22
+ @rem ##########################################################################
23
+
24
+ @rem Set local scope for the variables with windows NT shell
25
+ if "%OS%"=="Windows_NT" setlocal
26
+
27
+ set DIRNAME=%~dp0
28
+ if "%DIRNAME%" == "" set DIRNAME=.
29
+ set APP_BASE_NAME=%~n0
30
+ set APP_HOME=%DIRNAME%..
31
+
32
+ @rem Add default JVM options here. You can also use JAVA_OPTS and SCA_CMD_OPTS to pass JVM options to this script.
33
+ set DEFAULT_JVM_OPTS=
34
+
35
+ @rem Find java.exe
36
+ if defined JAVA_HOME goto findJavaFromJavaHome
37
+
38
+ set JAVA_EXE=java.exe
39
+ %JAVA_EXE% -version >NUL 2>&1
40
+ if "%ERRORLEVEL%" == "0" goto init
41
+
42
+ echo.
43
+ echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
44
+ echo.
45
+ echo Please set the JAVA_HOME variable in your environment to match the
46
+ echo location of your Java installation.
47
+
48
+ goto fail
49
+
50
+ :findJavaFromJavaHome
51
+ set JAVA_HOME=%JAVA_HOME:"=%
52
+ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
53
+
54
+ if exist "%JAVA_EXE%" goto init
55
+
56
+ echo.
57
+ echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
58
+ echo.
59
+ echo Please set the JAVA_HOME variable in your environment to match the
60
+ echo location of your Java installation.
61
+
62
+ goto fail
63
+
64
+ :init
65
+ @rem Get command-line arguments, handling Windows variants
66
+
67
+ if not "%OS%" == "Windows_NT" goto win9xME_args
68
+
69
+ :win9xME_args
70
+ @rem Slurp the command line arguments.
71
+ set CMD_LINE_ARGS=
72
+ set _SKIP=2
73
+
74
+ :win9xME_args_slurp
75
+ if "x%~1" == "x" goto execute
76
+
77
+ set CMD_LINE_ARGS=%*
78
+
79
+ :execute
80
+ @rem Setup the command line
81
+
82
+ set CLASSPATH=%APP_HOME%\lib\sca-cmd.jar
83
+
84
+ @rem Execute sca-cmd
85
+ "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SCA_CMD_OPTS% -classpath "%CLASSPATH%" com.roku.sca.cmd.CommandLineInterface %CMD_LINE_ARGS%
86
+
87
+ :end
88
+ @rem End local scope for the variables with windows NT shell
89
+ if "%ERRORLEVEL%"=="0" goto mainEnd
90
+
91
+ :fail
92
+ rem Set variable SCA_CMD_EXIT_CONSOLE if you need the _script_ return code instead of
93
+ rem the _cmd.exe /c_ return code!
94
+ if not "" == "%SCA_CMD_EXIT_CONSOLE%" exit 1
95
+ exit /b 1
96
+
97
+ :mainEnd
98
+ if "%OS%"=="Windows_NT" endlocal
99
+
100
+ :omega