main
  1require 'build_utilities.rb'
  2require 'local_properties.rb'
  3require 'project.rb'
  4require 'rake/clean'
  5require 'fileutils'
  6
  7#load settings that differ by machine
  8local_settings = LocalSettings.new
  9
 10if local_settings[:debug] == "TRUE"
 11	COMPILE_TARGET = 'debug'
 12else
 13	COMPILE_TARGET = 'release'
 14end
 15
 16CLEAN.include('artifacts','**/bin','**/obj')
 17
 18def create_sql_fileset(folder)
 19  FileList.new(File.join('product','sql',folder,'**/*.sql'))
 20end
 21
 22template_files = TemplateFileList.new('**/*.template')
 23template_code_dir = File.join('product','templated_code')
 24
 25#configuration files
 26config_files = FileList.new(File.join('product','config','*.template')).select{|fn| ! fn.include?('app.config')}
 27app_config = TemplateFile.new(File.join('product','config',local_settings[:app_config_template]))
 28
 29#target folders that can be run from VS
 30project_startup_dir  = File.join('product',"#{Project.startup_dir}")
 31project_test_dir  = File.join('product',"#{Project.tests_dir}",'bin','debug')
 32
 33output_folders = [project_startup_dir,project_test_dir]
 34
 35task :default => [:test]
 36
 37task :clean do
 38	FileUtils.rm_rf('artifacts')
 39end
 40
 41task :init => :clean do
 42  mkdir 'artifacts'
 43  mkdir 'artifacts/coverage'
 44  mkdir 'artifacts/deploy'
 45  mkdir "artifacts/deploy/#{Project.name}"
 46end
 47
 48task :compile do
 49  MSBuildRunner.compile :compile_target => COMPILE_TARGET, :solution_file => 'solution.sln'
 50end
 51
 52task :test, :category_to_exclude, :needs => [:compile] do |t,args|
 53  runner = MbUnitRunner.new :compile_target => COMPILE_TARGET, :category_to_exclude => 'SLOW', :show_report => true, :report_type => "text"
 54  runner.execute_tests ["#{Project.tests_dir}"]
 55end
 56
 57task :test_xml, :category_to_exclude, :needs => [:compile] do |t,args|
 58  runner = MbUnitRunner.new :compile_target => COMPILE_TARGET, :category_to_exclude => 'SLOW'
 59  runner.execute_tests ["#{Project.tests_dir}"]
 60end
 61
 62task :test_all, :category_to_exclude, :needs => [:compile] do |t,args|
 63  runner = MbUnitRunner.new :compile_target => COMPILE_TARGET, :category_to_exclude => 'none', :show_report => true, :report_type => "text"
 64  runner.execute_tests ["#{Project.tests_dir}"]
 65end
 66
 67task :info do
 68	puts "project name: " + Project.name
 69	puts "project tests dir: " + Project.tests_dir
 70	puts "project startup dir: " + Project.startup_dir
 71	puts "project startup config: " + Project.startup_config
 72	puts "project startup extension: " + Project.startup_extension
 73	puts COMPILE_TARGET
 74end
 75
 76task :run_test_report => [:test_xml] do
 77 runner = BDDDocRunner.new
 78 runner.run(File.join('product',"#{Project.tests_dir}",'bin','debug',"application.tests.dll"))
 79end
 80
 81task :deploy => [:init,:compile] do
 82  deploy_folder = File.join('artifacts','deploy')
 83  copy_project_outputs(File.join(deploy_folder,Project.name),['*.dll','*.exe','*.pdb'])
 84  FileUtils.cp_r(File.join('thirdparty','mbunit'),deploy_folder)
 85  FileUtils.cp_r(File.join('thirdparty','rhino.mocks'),deploy_folder)
 86  FileUtils.cp_r(File.join('thirdparty','developwithpassion.commons'),deploy_folder)
 87end
 88
 89task :run do
 90	deploy_folder = File.join('artifacts','deploy')
 91	sql_folder = File.join(Dir.getwd,'product','sql')
 92	command_line = "\"-migrations_dir:'#{sql_folder}' -connection_string:'#{local_settings[:config_connectionstring]}' -data_provider:'System.Data.SqlClient'\""
 93	sh "#{deploy_folder}/#{Project.name}/#{Project.name}.console.exe '#{command_line}'"
 94end
 95
 96def copy_project_outputs(folder,extensions)
 97  extensions.each do |extension|
 98	puts "#{Project.name}#{extension}"
 99    Dir.glob(File.join('product','**',"#{Project.name}#{extension}")).each do |file|
100      FileUtils.cp file,folder
101    end
102  end
103end