Commit ae0014f2c274909f5bc88cf593a46b65b9676ed2
1 parent
8fbadc47
Exists in
master
and in
29 other branches
Add ci:smoke Rake task for CI environments
Assumes the CI environment will export the sha1 of the head commit into HEAD, and the sha1 of the previous head commit in PREV_HEAD.
Showing
1 changed file
with
30 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
1 | +namespace :ci do | ||
2 | + | ||
3 | + desc 'Continuous integration smoke test' | ||
4 | + task :smoke do | ||
5 | + if ENV['HEAD'] && ENV['PREV_HEAD'] | ||
6 | + from = ENV['PREV_HEAD'] | ||
7 | + to = ENV['HEAD'] | ||
8 | + changed_files = `git diff --name-only #{from}..#{to}`.split | ||
9 | + | ||
10 | + # explicitly changed tests | ||
11 | + tests = changed_files.select { |f| f =~ /test\/.*_test\.rb$/ } | ||
12 | + features = changed_files.select { |f| f =~ /\.feature$/ } | ||
13 | + | ||
14 | + # match changed code files to their respective tests | ||
15 | + changed_files.each do |f| | ||
16 | + if f =~ /^(app|lib)\// | ||
17 | + basename = File.basename(f, '.rb') | ||
18 | + Dir.glob("test/**/#{basename}_test.rb").each do |t| | ||
19 | + tests << t unless tests.include?(t) | ||
20 | + end | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | + sh 'testrb', *tests unless tests.empty? | ||
25 | + sh 'cucumber', *features unless features.empty? | ||
26 | + sh 'cucumber', '-p', 'selenium', *features unless features.empty? | ||
27 | + end | ||
28 | + end | ||
29 | + | ||
30 | +end |