summaryrefslogtreecommitdiff
path: root/Rakefile
blob: 781675e2b7016c7bfaf24ac60649a6523dc5a935 (plain)
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
gems = %w[chef chef-server-slice chef-server]
require 'rubygems'
require 'cucumber/rake/task'

namespace :git do
  desc "Initialise and update the Git submodules"
  task :submodule_update do
    sh "git submodule update --init"
  end
end

desc "Build the chef gems"
task :gem => "git:submodule_update" do
  gems.each do |dir|
    Dir.chdir(dir) { sh "rake package" }
  end
end
 
desc "Install the chef gems"
task :install => "git:submodule_update" do
  gems.each do |dir|
    Dir.chdir(dir) { sh "rake install" }
  end
end

desc "Uninstall the chef gems"
task :uninstall do
  gems.reverse.each do |dir|
    Dir.chdir(dir) { sh "rake uninstall" }
  end
end

desc "Run the rspec tests"
task :spec do
  gems.each do |dir|
    Dir.chdir(dir) { sh "rake spec" }
  end
end

def start_dev_environment(type="normal")
  @couchdb_server_pid = nil
  @chef_server_pid    = nil
  @chef_indexer_pid   = nil
  @stompserver_pid    = nil
  
  ccid = fork
  if ccid
    @couchdb_server_pid = ccid
  else
    exec("couchdb")
  end

  scid = fork
  if scid
    @stompserver_pid = scid
  else
    exec("stompserver")
  end

  mcid = fork
  if mcid # parent
    @chef_indexer_pid = mcid
  else # child
    case type
    when "normal"
      exec("chef-indexer -l debug")
    when "features"
      exec("chef-indexer -c #{File.join(File.dirname(__FILE__), "features", "data", "config", "server.rb")} -l debug")
    end
  end

  mcid = fork
  if mcid # parent
    @chef_server_pid = mcid
  else # child
    case type
    when "normal"
      exec("chef-server -l debug -N -c 2")
    when "features"
      exec("chef-server -C #{File.join(File.dirname(__FILE__), "features", "data", "config", "server.rb")} -l debug -N -c 2")
      
    end
  end

  puts "Running Chef at #{@chef_server_pid}"
  puts "Running Chef Indexer at #{@chef_indexer_pid}"
  puts "Running CouchDB at #{@couchdb_server_pid}"
  puts "Running Stompserver at #{@stompserver_pid}"
end

def stop_dev_environment
  puts "Stopping CouchDB"
  Process.kill("KILL", @couchdb_server_pid) 
  puts "Stopping Stomp server"
  Process.kill("KILL", @stompserver_pid) 
  puts "Stopping Chef Server"
  Process.kill("INT", @chef_server_pid)
  puts "Stopping Chef Indexer"
  Process.kill("INT", @chef_indexer_pid)
  puts "\nCouchDB, Stomp, Chef Server and Chef Indexer killed - have a nice day!"
end

def wait_for_ctrlc
  puts "Hit CTRL-C to destroy development environment"
  trap("CHLD", "IGNORE")
  trap("INT") do
    stop_dev_environment
    exit 1
  end
  while true
    sleep 10
  end
end

desc "Run a Devel instance of Chef"
task :dev => "dev:install" do
  start_dev_environment
  wait_for_ctrlc
end

namespace :dev do  
  desc "Install a Devel instance of Chef with the example-repository"
  task :install do
    gems.each do |dir|
      Dir.chdir(dir) { sh "rake install" }
    end
    Dir.chdir("example-repository") { sh("rake install") }
  end

  
  desc "Install a test instance of Chef for doing features against"
  task :features do
    gems.each do |dir|
      Dir.chdir(dir) { sh "rake install" }
    end
    start_dev_environment("features")
    wait_for_ctrlc
  end
end

Cucumber::Rake::Task.new(:features) do |t|
  t.step_pattern = 'features/steps/**/*.rb'
  supportdir = 'features/support'
  t.cucumber_opts = "--format pretty -r #{supportdir}"
end