forked from MrCloud/jazzy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
113 lines (94 loc) · 3.18 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#-- Bootstrap --------------------------------------------------------------#
desc 'Initializes your working copy to run the specs'
task :bootstrap do
if system('which bundle')
title 'Installing gems'
sh 'bundle install'
title 'Updating submodules'
sh 'git submodule update --init --recursive'
else
$stderr.puts "\033[0;31m" \
"[!] Please install the bundler gem manually:\n" \
' $ [sudo] gem install bundler' \
"\e[0m"
exit 1
end
end
begin
require 'bundler/gem_tasks'
require 'fileutils'
task default: :spec
#-- Specs ------------------------------------------------------------------#
desc 'Run specs'
task :spec do
title 'Running Unit Tests'
files = FileList['spec/*_spec.rb']
.exclude('spec/integration_spec.rb').shuffle.join(' ')
sh "bundle exec bacon #{files}"
sh 'bundle exec bacon spec/integration_spec.rb'
Rake::Task['rubocop'].invoke
end
desc 'Rebuilds integration fixtures'
task :rebuild_integration_fixtures do
title 'Running Integration tests'
sh 'rm -rf spec/integration_specs/tmp'
puts `bundle exec bacon spec/integration_spec.rb`
title 'Storing fixtures'
# Copy the files to the files produced by the specs to the after folders
FileList['tmp/*'].each do |source|
destination = "spec/integration_specs/#{source.gsub('tmp/', '')}/after"
if File.exist?(destination)
sh "rm -rf #{destination}"
sh "mv #{source} #{destination}"
end
end
# Remove files not used for the comparison
# To keep the git diff clean
files_glob = 'spec/integration_specs/*/after/{*,.*}'
files_to_delete = FileList[files_glob]
.exclude('**/.', '**/..')
.exclude('spec/integration_specs/*/after/*docs',
'spec/integration_specs/*/after/execution_output.txt')
.include('**/*.dsidx')
.include('**/*.tgz')
files_to_delete.each do |file_to_delete|
sh "rm -rf '#{file_to_delete}'"
end
puts
puts 'Integration fixtures updated, see `spec/integration_specs`'
end
#-- RuboCop ----------------------------------------------------------------#
require 'rubocop/rake_task'
RuboCop::RakeTask.new(:rubocop)
#-- SourceKitten -----------------------------------------------------------#
desc 'Vendors SourceKitten'
task :sourcekitten do
Dir.chdir('SourceKitten') do
`make installables`
end
destination = 'lib/jazzy/sourcekitten'
rakefile = File.read("#{destination}/Rakefile")
source = '/tmp/SourceKitten.dst/usr/local/.'
FileUtils.rm_rf destination
FileUtils.mkdir_p destination
FileUtils.cp_r source, destination
File.open("#{destination}/Rakefile", 'w') { |f| f.write rakefile }
end
rescue LoadError, NameError => e
$stderr.puts "\033[0;31m" \
'[!] Some Rake tasks haven been disabled because the environment' \
' couldn’t be loaded. Be sure to run `rake bootstrap` first.' \
"\e[0m"
$stderr.puts e.message
$stderr.puts e.backtrace
$stderr.puts
end
#-- Helpers ------------------------------------------------------------------#
def title(title)
cyan_title = "\033[0;36m#{title}\033[0m"
puts
puts '-' * 80
puts cyan_title
puts '-' * 80
puts
end