Permalink
Fetching contributors…
Cannot retrieve contributors at this time
169 lines (138 sloc) 5.31 KB
require 'fileutils'
require 'albacore'
require 'tools/albacore/zipdirectory_patch.rb'
def get_version
ENV['BUILD_NUMBER'] || '2.0.0.0'
end
task :default => 'build:all'
namespace :setup do
task :ensure_gemcutter_source do
puts 'Ensuring gemcutter.org is registered as a gem source'
unless `gem source -l`.include? 'http://gemcutter.org'
puts 'Setting Gemcutter as a gem source'
`gem source -a http://gemcutter.org`
end
end
task :install_mspec, :resharper_version, :vs_version do |t, args|
resharper_version = args[:resharper_version] || '5.1'
vs_version = args[:vs_version] || 10.0
puts 'Installing MSpec ReSharper runner'
plugins = "#{ENV['APPDATA']}/JetBrains/ReSharper/v#{resharper_version}/vs#{vs_version}/Plugins"
to_copy = ['Machine.Specifications', "Machine.Specifications.ReSharperRunner.#{resharper_version}"]
FileUtils.mkdir plugins unless File.exists? plugins
to_copy.each do |f|
FileUtils.cp "tools/mspec/#{f}.dll", plugins
FileUtils.cp "tools/mspec/#{f}.pdb", plugins
end
end
end
namespace :ci do
task :run_ci_build => [
'build:all',
'docs:build',
'package:all',
]
end
namespace :source do
desc 'Update assembly info with latest version number'
assemblyinfo :update_version do |asm|
asm.output_file = 'src/CommonAssemblyInfo.cs'
asm.version = get_version
asm.company_name = 'http://fluentnhibernate.org'
asm.product_name = 'FluentNHibernate'
asm.copyright = 'Copyright 2008-2010 James Gregory and contributors (Paul Batum, Hudson Akridge et al). All rights reserved.'
asm.namespaces = ['System.Security']
asm.custom_attributes :AllowPartiallyTrustedCallers => nil
puts "The build number is #{asm.version}"
end
task :nhibernate_version, :nhibernate_version do |t,args|
args.with_defaults :nhibernate_version => ENV['nhibernate_version'] || '3.0'
raise "Unknown NHibernate version #{args.nhibernate_version} (check your tools/NHibernate folder)" unless File.directory? "tools/NHibernate/#{args.nhibernate_version}"
# clear out existing selected nh version
files_to_delete = Dir["tools/NHibernate/*.*"].reject {|f| File.directory? f }
files_to_delete.each {|f| File.delete f }
# copy specific nh version files to the main directory
files_to_copy = Dir["tools/NHibernate/#{args.nhibernate_version}/*.*"]
files_to_copy.each {|f| FileUtils.copy f, "tools/NHibernate/" }
end
desc 'Compile the source'
msbuild :compile, [:nhibernate_version] => :nhibernate_version do |msb,args|
args.with_defaults :nhibernate_version => ENV['nhibernate_version'] || '3.0'
nh_version_precompiler_switch = 'NH' + args.nhibernate_version.gsub('.', '')
puts nh_version_precompiler_switch
msb.properties = { :configuration => :Release, :DefineConstants => nh_version_precompiler_switch }
msb.targets [:Clean, :Build]
msb.solution = 'src/FluentNHibernate.sln'
end
end
namespace :specs do
desc 'Run all tests and specs'
task :all => [:nunit, :mspec]
desc 'Run MSpec specs'
mspec :mspec do |mspec|
mspec.path_to_command = 'tools/mspec/mspec.exe'
mspec.assemblies << 'src/FluentNHibernate.Specs/bin/Release/FluentNHibernate.Specs.dll'
end
desc 'Run NUnit tests'
nunit :nunit do |nunit|
nunit.path_to_command = 'tools/nunit/nunit-console-x86.exe'
nunit.assemblies << 'src/FluentNHibernate.Testing/bin/Release/FluentNHibernate.Testing.dll'
end
end
namespace :build do
desc 'Run full build including tests'
task :all => ['source:update_version', 'source:compile', 'specs:all'] do
puts 'Copying output to build directory'
Dir.mkdir 'build' unless File.exist? 'build'
Dir.glob 'src/FluentNHibernate/bin/Release/*.{dll,pdb,xml}' do |path|
copy path, 'build' if File.file? path
end
puts 'Build complete'
end
end
namespace :docs do
desc 'Create API docs'
docu :build do |d|
d.path_to_command = 'tools/docu/docu.exe'
d.assemblies << 'build/FluentNHibernate.dll'
end
end
namespace :package do
task :prepare_dist_directory do
Dir.mkdir 'dist' unless File.exists? 'dist'
end
desc 'Create zip of source-tree'
zip :source => :prepare_dist_directory do |zip|
file_prefix = ENV['SourceDistFilename'] || 'fluentnhibernate-source'
zip.directories_to_zip = ['./']
zip.output_file = "#{file_prefix}-#{get_version}.zip"
zip.output_path = 'dist'
zip.exclusions = get_exclusions
end
def get_exclusions
exclusions = []
%w{build dist results output}.each {|x| exclusions << "#{x}" << "#{x}/**/**" }
%w{bin obj}.each {|x| exclusions << "**/#{x}" << "**/#{x}/**/**" }
[/_ReSharper/, /.user/, /.suo/, /.resharper/, /.cache/].each {|x| exclusions << x }
exclusions
end
desc 'Create zip of binaries'
zip :binaries => :prepare_dist_directory do |zip|
file_prefix = ENV['BinaryDistFilename'] || 'fluentnhibernate-binary'
zip.directories_to_zip = ['build']
zip.output_file = "#{file_prefix}-#{get_version}.zip"
zip.output_path = 'dist'
end
desc 'Create zip of API docs'
zip :docs => :prepare_dist_directory do |zip|
zip.directories_to_zip = ['output']
zip.output_file = "fluentnhibernate-docs-#{get_version}.zip"
zip.output_path = 'dist'
end
task :all => [:source, :binaries, :docs]
end
task :sln do
Thread.new do
system "devenv src/FluentNHibernate.sln"
end
end