forked from intel/lkp-tests
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
89 lines (66 loc) · 2.2 KB
/
Rakefile
1
2
3
4
5
6
7
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
require 'rubygems'
require 'bundler/setup'
require 'rspec/core/rake_task'
require 'fileutils'
require 'rubocop/rake_task'
require 'English'
desc 'Show help'
task :help do
puts <<~EOF
== SPEC ==
usage: rake spec [spec=result_path]
example:
rake spec # check all unit tests status
rake spec spec=job" # check spec/job_spec.rb status
== RUBOCOP ==
usage: rake rubocop [file=pattern]
example:
rake rubocop file="lib/**/*.rb" # check all lib files
EOF
end
RSpec::Core::RakeTask.new do |t|
ENV['LKP_SRC'] ||= File.expand_path File.dirname(__FILE__).to_s
puts "PWD = #{Dir.pwd}"
puts "ENV['LKP_SRC'] = #{ENV['LKP_SRC']}"
spec = ENV['spec'] || '*'
t.pattern = "spec/**{,/*/**}/#{spec}_spec.rb"
end
if ENV['GENERATE_REPORTS'] == 'true'
require 'ci/reporter/rake/rspec'
task spec: 'ci:setup:rspec'
end
begin
RuboCop::RakeTask.new(:rubocop) do |t|
t.options = ['-D', '-c.rubocop.yml']
t.patterns = [ENV['file']] if ENV['file']
puts "PWD = #{Dir.pwd}"
puts "rubocop.patterns = #{t.patterns}"
puts "rubocop.options = #{t.options}"
end
rescue StandardError => e
puts e.to_s
end
def bash(cmd)
output = `bash -c #{Shellwords.escape(cmd)}`
puts output unless output.empty?
raise "bash exitstatus: #{$CHILD_STATUS.exitstatus}" unless $CHILD_STATUS.success?
end
desc 'Run syntax check'
task :syntax do
executables = `find -type f -executable ! -path "./.git*" ! -path "./vendor*" ! -size +100k`.split("\n").join(' ')
bash "grep -s -l '^#!/.*ruby$' #{executables} | xargs -n1 ruby -c >/dev/null"
bash "grep -s -l '^#!/.*bash$' #{executables} | xargs -n1 bash -n"
bash "grep -s -l '^#!/bin/sh$' #{executables} | xargs -n1 dash -n"
puts 'syntax OK'
end
desc 'Run shellcheck'
task :shellcheck do
executables = `find -type f -executable ! -path "./.git*" ! -path "./vendor*" ! -size +100k | xargs grep -s -l -e '^#!/.*bash$' -e '^#!/bin/sh$'`.split("\n").join(' ')
format = ENV['format'] || 'tty'
base_cmd = "shellcheck -S warning -f #{format}"
base_cmd += " -i #{ENV['code']}" if ENV['code']
bash "#{base_cmd} #{executables}"
puts 'shellcheck OK'
end
desc 'Run code check'
task code: %i[syntax shellcheck rubocop spec]