-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathRakefile
94 lines (77 loc) · 1.99 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
# frozen_string_literal: true
require 'json'
require 'yaml'
desc 'Runs rubocop'
task :cop do
sh 'rubocop'
end
desc 'Runs cookstyle and chefstyle'
task :lint do
sh 'cookstyle'
sh 'chefstyle'
end
desc 'Runs test for specifiedd instance and destroy'
task :test_instance, [:instance] do |_t, args|
sh "kitchen verify #{args[:instance]}" # implies create and converge
sh "kitchen destroy #{args[:instance]}"
end
desc 'Runs all tests in sequence and cleans up after every instance'
task :integration do
kcfg = YAML.load_file '.kitchen.yml'
kcfg['suites'].each do |pl|
platform = pl['name']
kcfg['platforms'].each do |su|
suite = su['name']
instance = "#{platform}-#{suite}"
puts "Run integration test for #{instance}"
Rake::Task[:test_instance].invoke instance
Rake::Task[:test_instance].reenable
end
end
Rake::Task[:clean].invoke
end
desc 'Runs concurrent kitchen verify'
task :verify do
threads = []
kcfg = YAML.load_file '.kitchen.yml'
kcfg['suites'].each do |pl|
platform = pl['name']
kcfg['platforms'].each do |su|
suite = su['name']
instance = "#{platform}-#{suite}"
threads << Thread.new do
puts "Run integration test for #{instance}"
sh "kitchen verify #{instance}"
sh "kitchen destroy #{instance}"
end
end
end
threads.map(&:join)
end
desc 'Runs complete test setup sequentially'
task test: %i[lint integration]
desc 'Runs complete test setup concurrently'
task test_multi: %i[lint verify clean]
desc 'Cleanup project'
task :clean do
sh 'kitchen destroy -c'
rm_rf '.kitchen'
end
def vagrant_task(tsk)
desc "Wrap kitchen #{tsk} for vagrant"
task tsk do
sh "KITCHEN_LOCAL_YAML=.kitchen.vagrant.yml kitchen #{tsk}"
end
end
namespace :vagrant do
vagrant_task :status
vagrant_task :create
vagrant_task :converge
vagrant_task :login
vagrant_task :verify
vagrant_task :destroy
desc 'kitchen destroy & clean'
task clean: %i[destroy] do
rm_rf '.kitchen'
end
end