8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/fastlane/plugin/code_static_analyzer/actions/ruby_analyzer.rb', line 8
def self.run(params)
UI. 'Ruby analyzer' if Actions::CodeStaticAnalyzerAction.run_from_main_action
work_dir = Actions::CodeStaticAnalyzerAction.work_dir
files_to_inspect = params[:ruby_files]
UI.message '[!] Ruby analyzer will be run for all ruby files in work directory'.blue if !files_to_inspect or files_to_inspect.empty?
Actions::CodeStaticAnalyzerAction.check_file_exist(work_dir, files_to_inspect, 'ruby_files')
result_dir_path = "#{work_dir}#{params[:result_dir]}"
FileUtils.mkdir_p(result_dir_path) unless File.exist?(result_dir_path)
result_file = "#{result_dir_path}/codeAnalysResults_ruby.xml"
files = Actions::CodeStaticAnalyzerAction.add_root_path(work_dir, files_to_inspect, true)
if params[:use_junit_format]
temp_result_file = "#{result_dir_path}/ruby.json"
run_script = "bundle exec rubocop -f j -a #{files}"
else
temp_result_file = "#{result_dir_path}/ruby.log"
run_script = "bundle exec rubocop -a #{files}"
end
run_script_path = File.join CodeStaticAnalyzer::ROOT, "assets/run_script.sh"
run_script = "#{run_script_path} \"#{run_script}\" '#{temp_result_file}'"
FastlaneCore::CommandExecutor.execute(command: run_script.to_s,
print_all: false,
error: proc do |error_output|
end)
status = $?.exitstatus
if Dir.glob(temp_result_file).empty?
info = (status == 2) ? 'Rubocop return 2: terminates abnormally due to invalid configuration, invalid CLI options, or an internal error' : ''
Actions::CodeStaticAnalyzerAction.start_xml_content unless Actions::CodeStaticAnalyzerAction.run_from_main_action
Actions::CodeStaticAnalyzerAction.add_xml_content("#{result_dir_path}/", 'Ruby', temp_result_file, info)
Actions::CodeStaticAnalyzerAction.create_analyzers_run_result("#{result_dir_path}/") unless Actions::CodeStaticAnalyzerAction.run_from_main_action
status = 43
else
status = 0 if File.read(temp_result_file).empty?
if params[:use_junit_format]
UI.message 'Ruby analyzer generates result in JUnit format'
xml_content = JunitParser.parse_json(temp_result_file)
junit_xml = JunitParser.add_testsuite('rubocop', xml_content)
JunitParser.create_junit_xml(junit_xml, result_file)
end
end
Actions.lane_context[SharedValues::RUBY_ANALYZER_STATUS] = status
end
|